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中却无法实时的完成排序。谁有良策,或着应该注意的地方,请指教,我都抓狂了。先谢过了

解决方案 »

  1.   

    实时的完成排序?
    不明白你的意思和最终的目的DataGridView默认是可以点击每列列头就可以自动排序了.
      

  2.   

    自定义数据源的话不能自动实现排序,请看这里
    http://www.cnblogs.com/wf225/archive/2007/08/10/850218.html
      

  3.   

    大家好,谢谢大家支持
    首先我详细描述一下我的问题
    将一个DataView绑定到DataGridView上面,此时的DataView是根据DataView中的orderN 列升序的。
    选中DataGridView中的某一行,然后在程序中更改此行绑定对像的orderN列的值,值改变之后,DataGridView不行立即按新序列排列。需要再点一下DataGridView其它行,才行重新排序。
    这就是我的问题所在。所幸,已经解决。下面是问题的解决方法:
             
    在更改orderN列的时候我是用如下方法改的:DataRowView drv=(DataRowView)dataGridView1.SelectedRows[0].DataBoundItem;
    获得当前DataGridView1选中行的绑定对象,得到一个行视图。drv["orderN"]=0;意义在于把此行置顶(升序)
    更改完成后,窗体中的值改变了,但是位置,没有变。我想因为是有选中的行以没变,后来,经实验,不选中某一行的时候会重新排序。
    但这不能满足我的需求,还得找方法。后来,我不改DataRowView了,我从绑定行视图之后,找到当前行的ID,我直接去DataTable中去改值。
    结果效果实现。
      

  4.   

     SqlDataAdapter da = new SqlDataAdapter("select Name,orderN from mb orderN asc", conn); 
                DataTable dt = new DataTable(); 
                da.Fill(dt); 
                dv = new DataView(dt); 
                //dv.Sort = "orderN asc"; 
                dataGridView1.DataSource = dv; 
    可能是没有其它方法了,你要这两个同步好像有点别扭,因为DataGridView可以动态排序的,难道你还要回溯到DV?如果要定位某一条记录的话,可以使用关键字进行查找
      

  5.   

    是有自动排序这个功能,但是你在选中一行的情况下,你改变了排序列的值,他不能第一时间的立即刷新排序,需要你换一下选中列。(当然我是指更改视图的情况下)。
    如果更改DataTable里面的数据就可以立即排序了。