绑定Datatable的DataGrid,自动生成行列,怎样才能在最前面加上一列checkBox,并使其与相应row的IsSelected属性绑定?

weixin_38052782 2019-08-14 12:08:49
我的需求是读取数据库的表,在控件中显示数据,并且能够增删改数据,所以我使用DataTable直接Binding在DataGrid上,但是需求中还要求最前一列是checkBox,可以选择多行一次性删除。
我的问题是如何在自动生成的DataGrid中加入一列CheckBox,并将CheckBox的IsChecked属性与该CheckBox所在行(Row)的IsSelected属性绑定起来。这样就可以直接使用DataGrid的默认键盘监听事件(Delete)来删除选中的列。
...全文
15 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38073288 2019-08-15
  • 打赏
  • 举报
回复
首先将CanUserDeleteRows设置为False,
其次是设置KeyUp事件

并自定义DataGrid.Columns修改如下
<DataGrid x:Name="DG" KeyUp="DG_KeyUp" ItemsSource="{Binding }" CanUserDeleteRows="False" AutoGenerateColumns="True"> <DataGrid.Columns> <DataGridCheckBoxColumn Header="SingleCheckBox"> <DataGridCheckBoxColumn.CellStyle> <Style TargetType="DataGridCell"> <Setter Property="ContentTemplate" > <Setter.Value> <DataTemplate> <CheckBox x:Name="CB" Click="CB_Click"/> </DataTemplate> </Setter.Value> </Setter> </Style> </DataGridCheckBoxColumn.CellStyle> </DataGridCheckBoxColumn> </DataGrid.Columns> </DataGrid>



CS页面
定义一个List<DataRow> dataRow 集合用来存储DataTable的Row
修改CheckBox的Click事件
如下
public List<DataRow> dataRow = new List<DataRow>(); private void CB_Click(object sender, RoutedEventArgs e) { if (DG.SelectedItem != null) { var row = DG.SelectedItem as DataRowView; dataRow.Add(row.Row); } }


在修改DataGrid的KeyUp事件如下
private void DG_KeyUp(object sender, KeyEventArgs e) { if(e.Key==Key.Delete) { if (dataRow.Count> 0) { for (var item = 0; item < dataRow.Count; item++) { dataTable.Rows.Remove(dataRow[item]); } dataRow.Clear(); } } }
截图



476

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧