日期:2014-05-18  浏览次数:20974 次

修改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来检索。