`
wangcaiwq
  • 浏览: 7836 次
文章分类
社区版块
存档分类
最新评论

DataGridViewCheckBoxColumn小结

 
阅读更多

1. DataGridViewCheckBoxColumn多选。

默认情况下,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;
		}
	}
}


分享到:
评论

相关推荐

    DataGridView DataGridViewCheckBoxColumn编辑时实时触发事件代码

    当你需要处理包含复选框列(`DataGridViewCheckBoxColumn`)的数据时,实时触发事件是提高用户体验和实现动态功能的关键。`DataGridViewCheckBoxColumn`允许用户通过点击来选择或取消选择一个条目,而实时触发事件则...

    C# DataGridViewCheckBoxColumn CheckBox全选

    在C#编程中,`DataGridView`控件是用于显示数据表格的一种常见组件,而`DataGridViewCheckBoxColumn`则是其中一种列类型,专门用于显示复选框。当你需要在`DataGridView`中实现复选框的全选功能时,这通常涉及到用户...

    DataGridView 复选框全选。

    DataGridViewCheckBoxColumn checkboxColumn = new DataGridViewCheckBoxColumn(); checkboxColumn.HeaderText = "全选"; checkboxColumn.Name = "chkSelect"; dataGridView1.Columns.Insert(0, checkboxColumn); //...

    C#DataGridView自定义控件的列,提供源代码!

    System.Windows.Forms.DataGridViewCheckBoxColumn, DataGridView 控件提供了多个可用来调整其单元格、行和列的外观和基本行为(外观和感受)的属性。但是,如果您有超出 DataGridViewCellStyle 类的功能之外的...

    DataGridView标头CheckBox全选反选

    在.NET框架中,`DataGridView`控件是一种常用的用于显示和编辑数据的组件,它提供了丰富的功能,如排序、分页和自定义显示等。而在这个特定的场景中,我们需要实现一个增强的功能:在`DataGridView`的列头添加一个`...

    C#DataGridView中DataGridViewCheckBox问题.doc

    在C#编程中,`DataGridView`控件是一个非常实用的组件,用于展示表格数据并允许用户进行交互。在处理带有复选框(`DataGridViewCheckBox`)的`DataGridView`时,通常需要实现全选和全取消的功能,以及根据单个复选框...

    创建DataGridView checkbox 列

    当需要在`DataGridView`中添加可选的复选框列时,我们可以使用`DataGridViewCheckBoxColumn`类来实现这一功能。这个类提供了创建带有复选框的列的能力,允许用户对每一行进行选择或确认。下面我们将详细探讨如何创建...

    在DataGridView中添加复选框

    DataGridViewCheckBoxColumn checkBoxColumn = new DataGridViewCheckBoxColumn(); checkBoxColumn.HeaderText = "选择"; checkBoxColumn.Width = 50; dataGridView1.Columns.Add(checkBoxColumn); ``` 为了响应...

    Winform中DataGridView中加checkBox列的用法

    DataGridViewCheckBoxColumn checkBoxColumn = new DataGridViewCheckBoxColumn(); checkBoxColumn.HeaderText = "选择"; checkBoxColumn.Name = "IsSelected"; // 不设置DataPropertyName,因为复选框通常不绑定到...

    C#winform DataGridView checkbox复选框 实现单选效果

    C#winform DataGridView checkbox复选框 实现单选效果,系统默认的是界面中多选,下午没事,做个单选的效果,同时复习下datagridview的常用知识,包含dantGridVIew的常用操作内容,注意事项,代码有点乱,学习。

    实现datagridview与数据库的绑定 并添加comboxcolumn和checkboxcolumn

    DataGridViewCheckBoxColumn checkBoxColumn = new DataGridViewCheckBoxColumn(); checkBoxColumn.DataPropertyName = "YourDatabaseFieldName"; dataGridView.Columns.Add(checkBoxColumn); ``` 通过以上步骤...

    datagridview点击复选框删除

    DataGridViewCheckBoxColumn checkboxColumn = new DataGridViewCheckBoxColumn(); dataGridView.Columns.Add(checkboxColumn); ``` 或者,在设计视图中直接添加并设置列的名称和显示位置。 2. **事件处理** -...

    winform DataGridView表头带CheckBox全选

    在Windows Forms(Winform)开发中,`DataGridView`控件是一种常用的数据展示工具,它可以方便地展示表格数据并提供交互功能。在这个特定的场景中,我们关注的是如何在`DataGridView`的表头添加一个`CheckBox`,以便...

    datagridview使用方法集结

    DataGridViewCheckBoxColumn checkCol = new DataGridViewCheckBoxColumn(); dataGridView1.Columns.Add(checkCol); ``` 还可以通过编程方式改变单个单元格的值,或者根据用户的选择执行相应的操作。 3. **时间...

    VB.NET为DataGridView添加CheckBox实现全选全不选复选框

    Datagridview控件没有全选或取消全选的复选框,本资源用VB2015通过扩展DataGridViewColumnHeaderCell类,在列头绘制一个复选框checkbox控件,通过定义checkbox鼠标单击事件来实现行的全选或取消全选。checkbox还可以...

    Winforms里判断DatagridView里面的CheckBox是否选中

    DataGridViewCheckBoxColumn checkBoxColumn = new DataGridViewCheckBoxColumn(); dataGridView.Columns.Add(checkBoxColumn); ``` 判断`DataGridView`中的`CheckBox`是否选中,可以通过遍历所有行并检查每个`...

    datagridview打勾

    DataGridViewCheckBoxColumn checkboxColumn = new DataGridViewCheckBoxColumn(); dataGridView.Columns.Add(checkboxColumn); ``` 2. **设置列属性** - 设置列的名称、显示样式等属性,例如Width、HeaderText...

    带CheckBox列头有全选择功能的DataGridView

    DataGridViewCheckBoxColumn chkColumn = new DataGridViewCheckBoxColumn(); dgv.Columns.Insert(0, chkColumn); ``` 2. **设置CheckBox列头**:创建一个自定义的DataGridViewHeaderCell,包含一个CheckBox。 ...

    winform DataGridView checkbox列单选

    DataGridViewCheckBoxColumn checkBoxColumn = new DataGridViewCheckBoxColumn(); checkBoxColumn.HeaderText = "选择"; checkBoxColumn.Name = "IsSelected"; checkBoxColumn.Width = 50; // 设置列宽 ...

    datagridviewcombox.zip

    1. 同样,首先需要创建一个CheckBoxColumn实例,如:`DataGridViewCheckBoxColumn checkboxColumn = new DataGridViewCheckBoxColumn();` 2. 可以设置一些基本属性,如Width、Name等,以适应界面需求。 3. 添加到...

Global site tag (gtag.js) - Google Analytics