日期:2014-05-19  浏览次数:20982 次

问一个winform下datagrid的问题
比如我有两列
a       b
1       1
2       2
3       3
...
我想修改了a的值后,b马上也跟着修改
我用了CurrentCellChanged事件.里面写了以下2句
int   row   =   this.dataGrid1.CurrentCell.RowNumber;
this.dataGrid1[row,   1]   =   this.dataGrid1[row,   0];
现在我按左右键可以搞定,但是按上下键不会变
我调试了一下,发现在事件里CurrentCell已经变成现在的了,所有前面的没有更新
请问有没有什么好方法实现
能有代码更好
谢谢高手先

------解决方案--------------------
for(,,)
{
}
------解决方案--------------------
现在我按左右键可以搞定,但是按上下键不会变
==========================================
按上下键会变!
------解决方案--------------------
没看明白什么上下键?
------解决方案--------------------
ding
------解决方案--------------------
用表达式,视图的表达式!
第二列的值=第一列的!
------解决方案--------------------
private void dataGrid1_CurrentCellChanged(object sender, EventArgs e)

{
int row = this.dataGrid1.CurrentCell.RowNumber;

this.dataGrid1[row, 1] = this.dataGrid1[row, 0];
}
楼主仔细看看这段代码,按上下键的话就换行了,原先修改的那行当然就不会变了,可以用个for循环,把所有的b都赋值为a
------解决方案--------------------
在rowvalidating()里也要进行修改
------解决方案--------------------
噢,好像datagrid没有rowvalidating,为什么还用datagrid??
------解决方案--------------------
复写个DataGridTextBoxColumn
然后放protected override void Paint事件里。

------解决方案--------------------
肯定可以的

太强了!
------解决方案--------------------
可以通过expression解决
------解决方案--------------------
假设数据源为MyDs
DataColumn col = Myds.Tables[0].Columns[1];
col.Expression= "a ";
this.DataGrid1.DataSource=MyDs.Tables[0];
------解决方案--------------------
先Mark下
呵呵