修改DataView的行标题问题
private void dX_CaidDataGridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.ColumnIndex == -1 && e.RowIndex != -1)
{
e.Handled = true;
e.PaintBackground(e.CellBounds, false);
ControlPaint.DrawCheckBox(e.Graphics, e.CellBounds, ButtonState.Normal);
}
}
我用上面这段代码将DataGridView的行标题改成了CheckBox,但我怎么获取CheckBox的状态呢?
用DataGridView[-1][i]时报下标不能为负数.
------解决方案--------------------首先楼主应该能知道这个状态信息是如何来的。
如果是放到一个数组中,且这个数组长度和DataGridView.Rows.Count是一样的。那么你可以直接从这个数组中取值来设置状态。
如果在数据源中已有了这个列来表示状态的,那么直接取这个数据源中相应列中的值就是了。
如果如没有上面的情况,那么你可以设置一个列表,比如Dictionary <int, bool> listChecked=new Diuctionary <int, bool> ();
那么可以通过listChecked.Add(rowIndex, true/false);来设置某一行是选中信息,可通过
listChecked[rowIndex] = true/false;来设置它是否为选中的。
------解决方案--------------------在CellPaint事件里通过对列表中的信息的读取来决定画出的CheckBox是选中的还是未选中的。
------解决方案--------------------另外,楼主可能在需要的时候调用这个方法来及时的更新CheckBox的状态:
this.dataGridView1.InvalidateCell(colIndex, rowIndex);
------解决方案--------------------DrawCheckBox中的参数ButtonState.Normal可以存储到一个数组或字典表中,通过e.RowIndex来检索。