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编辑时实时触发事件代码
C#实现 DataGridViewCheckBoxColumn CheckBox全选
C#DataGridView中DataGridViewCheckBox问题
Datagridview控件没有全选或取消全选的复选框,本资源用VB2015通过扩展DataGridViewColumnHeaderCell类,在列头绘制一个复选框checkbox控件,通过定义checkbox鼠标单击事件来实现行的全选或取消全选。checkbox还可以...
System.Windows.Forms.DataGridViewCheckBoxColumn, DataGridView 控件提供了多个可用来调整其单元格、行和列的外观和基本行为(外观和感受)的属性。但是,如果您有超出 DataGridViewCellStyle 类的功能之外的...
代码如下:/// /// 实现DataGridView控件中CheckBox列的使用 /// /// ”sender”> /// ”e”> private void dgvTradList_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.Column...
在C# WinForm下做过项目的朋友都知道,其中的DataGridView控件默认只支持DataGridViewButtonColumn、DataGridViewCheckBoxColumn、DataGridViewComboBoxColumn、DataGridViewImageColumn、DataGridViewLinkColumn和...
DataGridView里添加小图标DataGridView里添加小图标DataGridView里添加小图标
datagridview
实现datagridview与数据库的绑定 并添加comboxcolumn和checkboxcolumn。具有dgv行的复制、删除、上移、下移功能
DataGridView合并单元格,合并表头
DataGridView属性DataGridView属性DataGridView属性DataGridView属性DataGridView属性DataGridView属性DataGridView属性DataGridView属性
详细的介绍DataGridView 的使用方法
1.visual studio 2005开发平台 2.使用C#语言开发 3.功能:使用datagridview
本文实例讲述了C#中DataGridView常用操作。分享给大家供大家参考。具体如下: public void Binder1() { DataTable tableType = DataBase.SQLDBHelper.GetDataTable(select top 200 unit_code,unit_name from unit ...
3.2 DataGridViewCheckBoxColumn 19 3.3 DataGridViewImageColumn 19 3.4 DataGridViewButtonColumn 19 3.5 DataGridViewComboBoxColumn 20 3.5.1 DataError事件和ComboBox列 20 3.5.2 常见问题 20 3.6 ...
在窗体应用程序中,使用DataGridView中动态加入CheckBox列,并处理业务
DataGridView的数字排序是按字符串排列的,本资源帮你解决DataGridView按数字排序的问题