SqlDataAdapter da = new SqlDataAdapter("select Name,orderN from mb", conn);
DataTable dt = new DataTable();
da.Fill(dt);
dv = new DataView(dt);
dv.Sort = "orderN asc";
dataGridView1.DataSource = dv;用此种方法指定了数据源,和排序列,但是在已后的操作中,会更改orderN列中的数据,但是在DataGridView中却无法实时的完成排序。谁有良策,或着应该注意的地方,请指教,我都抓狂了。先谢过了
DataTable dt = new DataTable();
da.Fill(dt);
dv = new DataView(dt);
dv.Sort = "orderN asc";
dataGridView1.DataSource = dv;用此种方法指定了数据源,和排序列,但是在已后的操作中,会更改orderN列中的数据,但是在DataGridView中却无法实时的完成排序。谁有良策,或着应该注意的地方,请指教,我都抓狂了。先谢过了
不明白你的意思和最终的目的DataGridView默认是可以点击每列列头就可以自动排序了.
http://www.cnblogs.com/wf225/archive/2007/08/10/850218.html
首先我详细描述一下我的问题
将一个DataView绑定到DataGridView上面,此时的DataView是根据DataView中的orderN 列升序的。
选中DataGridView中的某一行,然后在程序中更改此行绑定对像的orderN列的值,值改变之后,DataGridView不行立即按新序列排列。需要再点一下DataGridView其它行,才行重新排序。
这就是我的问题所在。所幸,已经解决。下面是问题的解决方法:
在更改orderN列的时候我是用如下方法改的:DataRowView drv=(DataRowView)dataGridView1.SelectedRows[0].DataBoundItem;
获得当前DataGridView1选中行的绑定对象,得到一个行视图。drv["orderN"]=0;意义在于把此行置顶(升序)
更改完成后,窗体中的值改变了,但是位置,没有变。我想因为是有选中的行以没变,后来,经实验,不选中某一行的时候会重新排序。
但这不能满足我的需求,还得找方法。后来,我不改DataRowView了,我从绑定行视图之后,找到当前行的ID,我直接去DataTable中去改值。
结果效果实现。
DataTable dt = new DataTable();
da.Fill(dt);
dv = new DataView(dt);
//dv.Sort = "orderN asc";
dataGridView1.DataSource = dv;
可能是没有其它方法了,你要这两个同步好像有点别扭,因为DataGridView可以动态排序的,难道你还要回溯到DV?如果要定位某一条记录的话,可以使用关键字进行查找
如果更改DataTable里面的数据就可以立即排序了。