系列二
实现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 }