系列二
實現RadGridView行中添加不同控件,並在控件中綁定不同的數據源
先上一段前台代碼

1 <telerik:RadGridView Grid.Row="2" x:Name="activitiesGrid1" 2 AutoGenerateColumns="False" GridLinesVisibility="None" Visibility="Collapsed" 3 UseLayoutRounding="False" IsReadOnly="True" 4 RowHeight="20" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" SelectionMode="Single" 5 HorizontalGridLinesBrush="Transparent" VerticalGridLinesBrush="Transparent" 6 Background="{x:Null}" BorderBrush="{x:Null}" 7 IsFilteringAllowed="False" RowIndicatorVisibility="Collapsed" 8 CanUserFreezeColumns="False" ShowGroupPanel="False" 9 HeaderRowStyle="{StaticResource SalesInfoGridViewHeaderRowStyle}" 10 GroupRowStyle="{StaticResource SalesInfoGridViewGroupRowStyle}" 11 RowStyle="{StaticResource SalesInfoGridViewRowStyle}" 12 ScrollViewer.HorizontalScrollBarVisibility="Auto" 13 ScrollViewer.VerticalScrollBarVisibility="Auto" Height="200"> 14 <telerik:RadGridView.Columns> 15 <telerik:GridViewColumn Header="歸屬營業廳ID" Width="*" IsVisible="False"> 16 <telerik:GridViewColumn.CellTemplate> 17 <DataTemplate> 18 <TextBlock Text="{Binding ROOM_ID}" /> 19 </DataTemplate> 20 </telerik:GridViewColumn.CellTemplate> 21 </telerik:GridViewColumn> 22 <telerik:GridViewColumn Header="歸屬縣ID" Width="*" IsVisible="False"> 23 <telerik:GridViewColumn.CellTemplate> 24 <DataTemplate> 25 <TextBlock Text="{Binding TOWN_ID}" /> 26 </DataTemplate> 27 </telerik:GridViewColumn.CellTemplate> 28 </telerik:GridViewColumn> 29 <telerik:GridViewColumn Header="歸屬營業廳名稱" Width="*"> 30 <telerik:GridViewColumn.CellTemplate> 31 <DataTemplate> 32 <TextBlock Text="{Binding ROOM_NAME}" /> 33 </DataTemplate> 34 </telerik:GridViewColumn.CellTemplate> 35 </telerik:GridViewColumn> 36 <telerik:GridViewColumn Header="歸屬縣名稱" Width="*"> 37 <telerik:GridViewColumn.CellTemplate> 38 <DataTemplate> 39 <TextBlock Text="{Binding COUNTY_NAME}" FontSize="14" Width="100"/> 40 </DataTemplate> 41 </telerik:GridViewColumn.CellTemplate> 42 </telerik:GridViewColumn> 43 <telerik:GridViewColumn Header="歸屬營業廳類型" Width="*"> 44 <telerik:GridViewColumn.CellTemplate> 45 <DataTemplate> 46 <telerik:RadComboBox EmptyText="{Binding ROOM_TYPE}" Width="100" FontSize="14" Text="{Binding ROOM_TYPE}" 47 HorizontalAlignment="Left" Style="{StaticResource RadComboBoxStyle1}" > 48 <telerik:RadComboBoxItem Content="形象廳" Style="{StaticResource RadComboBoxItemStyle1}" /> 49 <telerik:RadComboBoxItem Content="市縣營業廳" Style="{StaticResource RadComboBoxItemStyle1}"/> 50 <telerik:RadComboBoxItem Content="鄉鎮營業廳" Style="{StaticResource RadComboBoxItemStyle1}"/> 51 </telerik:RadComboBox> 52 </DataTemplate> 53 </telerik:GridViewColumn.CellTemplate> 54 </telerik:GridViewColumn> 55 <telerik:GridViewColumn Header="創建時間" Width="*"> 56 <telerik:GridViewColumn.CellTemplate> 57 <DataTemplate> 58 <TextBlock Text="{Binding CREATETIME}" /> 59 </DataTemplate> 60 </telerik:GridViewColumn.CellTemplate> 61 </telerik:GridViewColumn> 62 <telerik:GridViewColumn Header="狀態" Width="*"> 63 <telerik:GridViewColumn.CellTemplate> 64 <DataTemplate> 65 <telerik:RadComboBox EmptyText="{Binding ROOM_STAT}" Text="{Binding ROOM_STAT}" Width="100" FontSize="14" HorizontalAlignment="Left" Style="{StaticResource RadComboBoxStyle1}" > 66 <telerik:RadComboBoxItem Content="正常" Style="{StaticResource RadComboBoxItemStyle1}" /> 67 <telerik:RadComboBoxItem Content="異常" Style="{StaticResource RadComboBoxItemStyle1}"/> 68 </telerik:RadComboBox> 69 </DataTemplate> 70 </telerik:GridViewColumn.CellTemplate> 71 </telerik:GridViewColumn> 72 <telerik:GridViewDataColumn DataMemberBinding="{Binding ROOM_DMXS}" Header="營業廳店面調節系數" Width="*" /> 73 <telerik:GridViewColumn Header="是否3人以上營業廳" Width="*"> 74 <telerik:GridViewColumn.CellTemplate> 75 <DataTemplate> 76 <telerik:RadComboBox EmptyText="{Binding IS_GREATERTHREE}" Text="{Binding IS_GREATERTHREE}" Width="100" 77 FontSize="14" HorizontalAlignment="Left" Style="{StaticResource RadComboBoxStyle1}" > 78 <telerik:RadComboBoxItem Content="是" Style="{StaticResource RadComboBoxItemStyle1}" /> 79 <telerik:RadComboBoxItem Content="否" Style="{StaticResource RadComboBoxItemStyle1}"/> 80 </telerik:RadComboBox> 81 </DataTemplate> 82 </telerik:GridViewColumn.CellTemplate> 83 </telerik:GridViewColumn> 84 <telerik:GridViewColumn Header="" Width="*" HeaderCellStyle="{StaticResource SalesInfoGridViewHeaderCellStyleFirst}" 85 CellStyle="{StaticResource SalesInfoGridViewCellStyle}"> 86 <telerik:GridViewColumn.CellTemplate> 87 <DataTemplate> 88 <telerik:RadButton Style="{StaticResource RadButtonStyle}" Content="刪除" 89 x:Name="ExceptXishu" Click="ExceptXishu_Click" 90 FontSize="12" Foreground="White" 91 Tag="{Binding ID}" 92 Height="20" Width="50" 93 /> 94 </DataTemplate> 95 </telerik:GridViewColumn.CellTemplate> 96 </telerik:GridViewColumn> 97 </telerik:RadGridView.Columns> 98 </telerik:RadGridView>
在GridViewColumn中添加GridViewColumn.CellTemplate,並在其子節點添加DataTemplate,在其中添加你想要的控件。可以在不同的控件中設置數據源綁定。
我在給RadGridView賦值的時候是通過賦值LIST集合賦值。
例如,this.activitiesGrid.ItemsSource = e.Result.ToList();---此處指的是從服務引用中返回的數據源(大家都懂得)
若你想你的控件在展示的時候默認顯示第一行,請添加如下代碼:

1 if (this.activitiesGrid.Items.Count>0) 2 { 3 this.activitiesGrid.SelectedItem = activitiesGrid.Items[0]; 4 }
在后台控制控件中某一列的顯示和隱藏
聲明GridViewColumn 對象,取得對象之后控制顯示和隱藏
GridViewColumn column = this.activitiesGrid.Columns[第幾行];
column.IsVisible = true;//顯示這一列
在后台取得某一行的數據源
(在這里我用了一個技巧,在給RadGridView綁定數據源的同時,我給每一個行的數據源綁定了一個ID,是為了取得每一個行的數據源)
在RadGridView控件中,每一行我定義一個控件,例如是RadButton控件,在他的Tag屬性中我綁定了這一行數據源的ID,點擊事件后我將這行的ID取出,然后可以得到其數據源,前后台代碼如下:
前台代碼:

1 <telerik:GridViewColumn Header="刪除" Width="*" HeaderCellStyle="{StaticResource SalesInfoGridViewHeaderCellStyleFirst}" 2 CellStyle="{StaticResource SalesInfoGridViewCellStyle}"> 3 <telerik:GridViewColumn.CellTemplate> 4 <DataTemplate> 5 <telerik:RadButton Style="{StaticResource RadButtonStyle}" Content="刪除" 6 FontSize="12" Foreground="White" 7 Tag="{Binding ID}" 8 Height="20" Width="50" 9 Click="RadButton_Click_2" /> 10 </DataTemplate> 11 </telerik:GridViewColumn.CellTemplate> 12 </telerik:GridViewColumn>
后台代碼:

1 private void btDeny_Click(object sender, RoutedEventArgs e) 2 { 3 RadButton btn = sender as RadButton; 4 int num = Convert.ToInt32(btn.TabIndex.ToString()); 5 GridViewRow row=new GridViewRow(); 6 var item = this.BackUserDetailes.Items[num];//綁定數據源的同時,給從庫中返回的數據源制定了ID 7 row=this.BackUserDetailes.ItemContainerGenerator.ContainerFromItem(item) as GridViewRow; 8 //得到Row對象后可以將其的數據源轉換成你想要的類型 9 想要的類型=row.DataContext as 想要的類型; 10 }
也可以用另外一種簡單的方式獲得這一行的數據源
想要的類型=btn.DataContext as 想要的類型。
在后台獲取行中有不同控件值的方法
取得了GridViewRow對象之后,可以取得這一行的每個單元格,即可把單元格中的控件取出。代碼如下:
例如,你在這一單元格中放置的是RadComboBox控件,可以通過:RadComboBox box=row.Cells[第幾個單元格].Content as RadComboBox;將RadComboBox對象取出,並進行你想要的操作。
在RadGridView中對某一列的特殊的控件賦值,通過這一列的控件中聲明其Loaded事件,為這一行的特殊的控件賦值。
例如下例:

1 <telerik:GridViewColumn Header="給特殊列綁定單個數據" Width="*" HeaderCellStyle="{StaticResource SalesInfoGridViewHeaderCellStyleFirst}" 2 CellStyle="{StaticResource SalesInfoGridViewCellStyle}" > 3 <telerik:GridViewColumn.CellTemplate> 4 <DataTemplate> 5 <telerik:RadComboBox EmptyText="{Binding 綁定的數據源中字段名稱}" Text="{Binding 綁定的數據源中字段名稱}" 6 FontSize="14" Width="200" HorizontalAlignment="Left" 7 Style="{StaticResource RadComboBoxStyle1}" 8 Loaded="RadComboBox_Loaded"> 9 <telerik:RadComboBoxItem Content="{Binding 綁定的數據源中字段名稱}" Tag="{Binding CHNL_ID}" Style="{StaticResource RadComboBoxItemStyle1}" /> 10 </telerik:RadComboBox> 11 </DataTemplate> 12 </telerik:GridViewColumn.CellTemplate> 13 </telerik:GridViewColumn>
其中,EmptyText="{Binding 綁定的數據源的名稱}"指的是其RadComboBox在沒有 默認顯示第一個值時的賦予該控件的值。
后台代碼如下:

1 private void RadComboBox_Loaded(object sender, RoutedEventArgs e) 2 { 3 RadComboBox box = sender as RadComboBox; 4 box.Items.Clear(); 5 (sender as RadComboBox).DisplayMemberPath = "ROOM_NAME"; 6 (sender as RadComboBox).Tag = this.chnlList[0].ROOM_ID; 7 (sender as RadComboBox).ItemsSource = 數據源名稱; 8 box.ItemsSource = chnlList; 9 }