DataGridViewCheckBoxColumn小结
2014-02-11 18:52
435 查看
1. DataGridViewCheckBoxColumn多选。
默认情况下,DataGridViewCheckBoxColumn不是Winform下的CheckBox,只是一个显示图像,所以需要通过操作缓存数据控制界面显示。
覆写OnCellValuePushed和OnCellValueNeeded方法,或添加相应事件:CellValuePushed,CellValueNeeded
下例中,CellValuePushed用于将界面勾选情况刷进缓存,CellValueNeeded用于将缓存数据显示在界面上(通过设置DataGridViewCellValue),chechState用来保存每个单元格的勾选情况。
2. 编辑模式下提交界面数据至缓存。
只有当鼠标焦点离开勾选框后,勾选结果才会提交到数据缓存,假如勾选后直接点击列头进行列排序,因为勾选结果没有提交,排序后的多选界面相当混乱。
所以需要编辑模式下提交至缓存,使用到CurrentCellDirtyStateChanged事件。
3.单击整行即可选中DataGridViewCheckBoxColumn。
4.空行时不显示DataGridViewCheckBoxColumn。
空数据时,只画出边界和背景。
参考:http://stackoverflow.com/questions/7664115/c-sharp-datagridviewcheckboxcolumn-hide-gray-out
默认情况下,DataGridViewCheckBoxColumn不是Winform下的CheckBox,只是一个显示图像,所以需要通过操作缓存数据控制界面显示。
覆写OnCellValuePushed和OnCellValueNeeded方法,或添加相应事件:CellValuePushed,CellValueNeeded
下例中,CellValuePushed用于将界面勾选情况刷进缓存,CellValueNeeded用于将缓存数据显示在界面上(通过设置DataGridViewCellValue),chechState用来保存每个单元格的勾选情况。
private Dictionary<string, bool> m_checkState=new Dictionary<string, bool>(); protected override void OnCellValuePushed(DataGridViewCellValueEventArgs e) { if (!checkState.ContainsKey(checkField)) checkState.Add(checkField, Convert.ToBoolean(e.Value)); else checkState[checkField] = Convert.ToBoolean(e.Value); } protected override void OnCellValueNeeded(DataGridViewCellValueEventArgs e) { if (checkState.ContainsKey(checkField)) e.Value = checkState[checkField]; else e.Value = false; }
2. 编辑模式下提交界面数据至缓存。
只有当鼠标焦点离开勾选框后,勾选结果才会提交到数据缓存,假如勾选后直接点击列头进行列排序,因为勾选结果没有提交,排序后的多选界面相当混乱。
所以需要编辑模式下提交至缓存,使用到CurrentCellDirtyStateChanged事件。
this.CurrentCellDirtyStateChanged+=new EventHandler(GridView_CurrentCellDirtyStateChanged); private void GridView_CurrentCellDirtyStateChanged(object sender, EventArgs e) { if (this.IsCurrentCellDirty) { this.CommitEdit(DataGridViewDataErrorContexts.Commit); } }CommitEdit提交编辑内容时将先调用OnCellValueNeeded,再调用OnCellValuePushed。
3.单击整行即可选中DataGridViewCheckBoxColumn。
protected override void OnCellMouseDown(DataGridViewCellMouseEventArgs e) { //排除表头和复选框的所在列 if (e.RowIndex >= 0 && e.ColumnIndex > 0) { DataGridViewCheckBoxCell cell = (DataGridViewCheckBoxCell)this.Rows[e.RowIndex].Cells[0]; if ((bool)cell.FormattedValue) { cell.Value = false; cell.EditingCellFormattedValue = false; } else { cell.Value = true; cell.EditingCellFormattedValue = true; } } }
4.空行时不显示DataGridViewCheckBoxColumn。
空数据时,只画出边界和背景。
参考:http://stackoverflow.com/questions/7664115/c-sharp-datagridviewcheckboxcolumn-hide-gray-out
this.CellPainting+=new DataGridViewCellPaintingEventHandler(GridView_CellPainting); void GridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { if (e.ColumnIndex == 0) { //空行的复选框只画出边界和背景 if (e.RowIndex >= this.DataItems.Count) { e.Paint(e.ClipBounds, DataGridViewPaintParts.Border | DataGridViewPaintParts.Background); e.Handled = true; } } }
相关文章推荐
- C# Winform中DataGridView绑定后DataGridViewCheckBoxColumn无法显示的问题
- 取 DataGridViewCheckBoxColumn 的值
- winform中DataGridView使用DataGridViewCheckBoxColumn实现RadioBox单选功能
- DataGridViewCheckBoxColumn的勾选框勾上了,Value却是false
- DataGridViewCheckBoxColumn的问题
- DataGridViewDisableCheckBoxColumn
- DataGridView DataGridViewCheckBoxColumn编辑时实时触发事件
- CheckBox Header Column For DataGridView
- Winform中DataGridView的DataGridViewCheckBoxColumn使用方法(选中与选不中)
- 在DataGridView中获得DataGridViewCheckBoxColumn的状态
- 让DataGridViewCheckBoxColumn实现更复杂的选择方式
- 问题:全选后删除没有问题,DataGridViewCheckBoxColumn
- C# 对 DataGridViewCheckBoxColumn 操作时选中行状态更新问题
- C# Winform中DataGridView的DataGridViewCheckBoxColumn使用方法
- dataGridView添加各种列(DataGridViewComboBoxColumn、DataGridViewCheckBoxColumn、DataGridViewLinkColumn...)
- DataGridView的DataGridViewCheckBoxColumn使用方法
- c# DataGridView 中对 DataGridViewCheckBoxColumn 的操作
- dataGridView 的columnType设为DataGridViewCheckBoxColumn,当选择其他列进行排序时,DataGridViewCheckBoxColumn列值被还原
- DataGridViewDisableCheckBoxColumn
- winformDatagridviev dataGridViewCheckBoxColumn关于TrueValue的问题