C# wpf 在DataGrid中添加带文本信息CheckBox
2013-10-18 21:13
489 查看
最近在使用C#写工具,发现DataGrid中默认只能添加不带文本信息的CheckBox,找了N多资料都木有成功。。
本来已经放弃了,已经通过2列来实现带文本信息的checkbox, 但是在调试SelectedCellsChanged事件过程中发现第二个参数 SelectedCellsChangedEventArgs e中蕴含着玄机,如下((System.Windows.Controls.VirtualizedCellInfoCollection)(((System.Windows.Controls.VirtualizedCellInfoCollection)(e.AddedCells))._owner._selectedCells))._owner._currentCellContainer.EditingElement
他的内容既然是:{System.Windows.Controls.CheckBox 内容: IsChecked:True} System.Windows.FrameworkElement {System.Windows.Controls.CheckBox}
这不就是第3列的checkbox吗?如果能把他的content加上内容,不就成功了吗?
经过多次验证终于成功实现:
通过DataGridColumn的GetCellContent获得对应每行的控件.
另外在如下事件中,内容会被清掉,所以在排序后,需要重新进行对checkbox的修改.可能还有其他情况也需要重新修改..
1.Sorting
2.ScrollChangedEvent:
this.dataGrid.AddHandler(ScrollViewer.ScrollChangedEvent, new ScrollChangedEventHandler(ScrollChangedEventHandler));
public void ScrollChangedEventHandler(object sender, ScrollChangedEventArgs e)
{
bInitDataGridCheckBox = false;
}
代码如下:
本来已经放弃了,已经通过2列来实现带文本信息的checkbox, 但是在调试SelectedCellsChanged事件过程中发现第二个参数 SelectedCellsChangedEventArgs e中蕴含着玄机,如下((System.Windows.Controls.VirtualizedCellInfoCollection)(((System.Windows.Controls.VirtualizedCellInfoCollection)(e.AddedCells))._owner._selectedCells))._owner._currentCellContainer.EditingElement
他的内容既然是:{System.Windows.Controls.CheckBox 内容: IsChecked:True} System.Windows.FrameworkElement {System.Windows.Controls.CheckBox}
这不就是第3列的checkbox吗?如果能把他的content加上内容,不就成功了吗?
经过多次验证终于成功实现:
通过DataGridColumn的GetCellContent获得对应每行的控件.
另外在如下事件中,内容会被清掉,所以在排序后,需要重新进行对checkbox的修改.可能还有其他情况也需要重新修改..
1.Sorting
2.ScrollChangedEvent:
this.dataGrid.AddHandler(ScrollViewer.ScrollChangedEvent, new ScrollChangedEventHandler(ScrollChangedEventHandler));
public void ScrollChangedEventHandler(object sender, ScrollChangedEventArgs e)
{
bInitDataGridCheckBox = false;
}
代码如下:
public partial class MainWindow : Window {
// 通过DataTable可以实现动态增加行和列 DataTable mDataTable = new DataTable(); private bool mbUpdateDataGridCheckBox = true; public MainWindow() { InitializeComponent(); this.dataGrid.ItemsSource = mDataTable.DefaultView; mDataTable.Columns.Add(new DataColumn("ID", typeof(int))); mDataTable.Columns.Add(new DataColumn("文本", typeof(string))); mDataTable.Columns.Add(new DataColumn("CheckBox1", typeof(bool))); mDataTable.Columns.Add(new DataColumn("CheckBox2", typeof(bool))); for (int i = 0; i < 5; i++ ) { DataRow dr = mDataTable.NewRow(); dr["ID"] = mDataTable.Rows.Count; dr["文本"] = "文本" + i; dr["CheckBox1"] = true; dr["CheckBox2"] = true; mDataTable.Rows.Add(dr); } } private void dataGrid_LayoutUpdated(object sender, EventArgs e) { if (mbUpdateDataGridCheckBox) { foreach (DataRowView drv in this.dataGrid.Items) { Console.WriteLine("aaa"); foreach (DataGridColumn dgc in this.dataGrid.Columns) { var content = dgc.GetCellContent(drv); if (content !=null && content.GetType() == typeof(CheckBox)) { CheckBox cb = content as CheckBox; cb.Content = "点我"; } } } mbUpdateDataGridCheckBox = false; } } private void dataGrid_Sorting(object sender, DataGridSortingEventArgs e) { mbUpdateDataGridCheckBox = true; } private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) { } private void dataGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e) { } }
相关文章推荐
- [收藏]为DataGrid添加CheckBox控件
- DataGrid添加CheckBoxColumn绑定到Command自我实现
- 给DataGrid加CheckBox列并在表头添加全选、全选按钮、置零按钮
- iphone 开发 自定义UITableViewCell的子类 ,轻松添加图片文本信息等
- JavaScript实现DataGrid中添加CheckBox列(全选与否)
- JavaScript实现DataGrid中添加CheckBox列(全选与否)
- 添加删除、更新按钮的提示确认信息,以及DATAGRID的添加、插入、更新、删除操作。
- java给图片添加小图片和文本信息
- Flex中DataGrid中添加一列复选框(CheckBox)
- C# WPF打包部署时添加注册表信息实现开机启动
- flex 对datagrid列表添加图片文本 itemRender
- 为DataGrid添加CheckBox控件
- 为DataGrid添加CheckBox控件
- 为DataGrid自定义分页添加自定义导航和分页信息 (转)
- JavaScript实现DataGrid中添加CheckBox列(全选与否)
- 根据datagrid中checkbox的选中情况将数据添加到collection中
- 在DataGrid中添加checkbox,并用按钮实现同时全选动作
- JavaScript实现DataGrid中添加CheckBox列(全选与否)
- datagrid 文本溢出时候 鼠标经过出现提示信息tooltip
- TextView显示html信息、在文本下面添加下划线、中划线、设置图片