您的位置:程序门 -> .net技术 -> c#



求助:老问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


求助:老问题
发表于:2007-01-20 10:08:12 楼主
form1里有一个datagridview(简称da)与数据库绑定,双击da某一行,弹出form2就显示当前行的内容。
我开始是这么做的
public   delegate   void   myinvoke;
public   static   datarow   row;
定义一个委托用来在改变form2文本框的时候,da的行的值也变
定义一个row用来把da的当前行传给form2,
row1   =   datagridview1.currentrow;
i   =   datagridview1.currentrow.index;
form2   frm2   =   new   form2(new   myinvoke(datagridview));
frm2.showdialog(this);

在form2的load事件中
textbox1.text   =   frm2.row.itemarray[0].tostring();
这样来显示da当前行的值

在委托回调的时候
ds.tables[0].rows[i][0]   =   item0;       (item0是回调的一个值,即form2的文本框里的值)
更新form1的dataset的值,最后更新给数据库
其中那个i就是确定dataset(简称ds)的行

可是现在的问题是刚开始运行程序的时候,da和表绑定了,在填充ds的时候,ds和da的行是一一对应的,可是一旦单击da上面的排序(da自带的排序功能)顺序就打乱了。在da里的第0行不是ds里的第0行了。
我要是通过获取da的行来操作
textbox1.text   =   form1.da.cells[0].value.tostring();
即使排序后双击da的某一行也不会出现错误
可是在回调的时候就有问题了,
如果用这个ds.tables[0].rows[i][0]   =   item0;  
最后更新数据库就能成功,可是因为顺序乱了,不能把i作为ds的行索引了
而如果datagridview1.rows[i].cells[0].value   =   item0;
那么即使顺序乱了也没什么,照样可以正确的更改da的值,可是在更新数据库的时候就失败了,因为通过代码对da的复职不等于对ds的复职

说得有点罗嗦,希望大家能认真看,并希望能给出些代码
(我在绑定的时候没有用bindingsource)


快速检索

最新资讯
热门点击