private void Add(string St,string PlanCoil,string Coil,string Dt,string Row,string Out,string Lv)
        {
            
            DataTable dt = new DataTable();
            dt.Columns.Add("St", System.Type.GetType("System.String"));//直接为表创建一列
            dt.Columns.Add("PlanCoil", System.Type.GetType("System.String"));
            dt.Columns.Add("Coil", System.Type.GetType("System.String"));
            dt.Columns.Add("Dt", System.Type.GetType("System.String"));
            dt.Columns.Add("Row", System.Type.GetType("System.String"));
            dt.Columns.Add("Out", System.Type.GetType("System.String"));
            dt.Columns.Add("Lv", System.Type.GetType("System.String"));            
            //添加
            DataRow dr=dt.NewRow();
            dr["St"]=St;
            dr["PlanCoil"]=PlanCoil;
            dr["Coil"]=Coil;
            dr["Dt"]=Dt;
            dr["Row"]=Row;
            dr["Out"]=Out;
            dr["Lv"]=Lv;
            dt.Rows.Add(dr);            //排序            DataRow[] rows=dt.Select ("","PlanCoil");
            DataTable t = dt.Clone();
            t.Rows .Clear ();
            foreach (DataRow r in rows)
            {
                t.ImportRow(r);    
            } 
            dt=t;
            string[] str = new string[7];
            foreach (DataRow row in dt.Rows) 
            { 
                str[0] = row["St"].ToString(); 
                str[1] = row["PlanCoil"].ToString(); 
                str[2] = row["Coil"].ToString(); 
                str[3] = row["Dt"].ToString();
                str[4] = row["Row"].ToString(); 
                str[5] = row["Out"].ToString();
                str[6] = row["Lv"].ToString();
                ListViewItem item = new ListViewItem(str, 0); 
                this.lVw.Items.Add(item); 
            }
        }
private void Form1_Load(object sender, System.EventArgs e)
        {
            Add("2","7", "00106T", "01","1" ,"2" ,"2");
            Add("2","2", "00300T", "02","2" ,"2" ,"2");
}
想要显示结果应该显示
2 2 ....
2 7.....            但是没有排序成功,高人指教到底错在什么地方了

解决方案 »

  1.   


    DataView dv = dt.DefaultView; 
    dv.Sort = "PlanCoil";  
    这么写也没达到效果
      

  2.   

    这代码写的~~~~~DataTable dt = new DataTable();
    构造这个DataTable的时候
    不应该写在Add方法里
    而是应该定义个全局变量
    然后在FormLoad的时候
    构造这个dt
    在Add方法中只是对他进行操作
    而不是每次都重新构造再说了
    排序没有这样排的~~~~
    前几天的排序不是弄好了么?
    怎么又改成这样排了?
      

  3.   

    而且在添加到ListView的时候
    foreach (DataRow row in dt.Rows) 
    {
    .........
    }
    这样不是每次都会添加重复数据么?
    应该只添加一条记录
    你每次都会把所有的数据都添加一遍
      

  4.   

    因为你Add方法中每次都new
    那么在DataTable中只有一条数据
    所以在执行Select方法的时候根本就不存在排序
      

  5.   

    定义过全局的,但是为什么往里面Columns.Add就会出现:名为“St”的列属于次datatable
      

  6.   

    你这段代码问题太多了
    还是把需求说清楚吧
    到底是要给ListView排序还是怎么
    为什么不在数据源排序给ListView排序你可以使用ListView本身的排序功能
    或者先给数据源排序
    然后添加到ListView
    或者是像前几天那样添加的时候按照排序顺序添加到底你想要怎么样的方法?
      

  7.   

    dt.Columns.Add("St", System...........
    这句话拿到FormLoad中
    否则你每次都添加肯定有问题dt=t;
    这个赋值根本就没用~~~~
      

  8.   

    就是将数据添加到一个 datatable  中,并且让数据按照PlanCoil和St排序,让后将datatable  绑定到listview
      

  9.   


            DataTable dt = new DataTable();        private void Add(string St, string PlanCoil, string Coil, string Dt, string Row, string Out, string Lv)
            {            //添加
                DataRow dr = dt.NewRow();
                dr["St"] = St;
                dr["PlanCoil"] = PlanCoil;
                dr["Coil"] = Coil;
                dr["Dt"] = Dt;
                dr["Row"] = Row;
                dr["Out"] = Out;
                dr["Lv"] = Lv;
                dt.Rows.Add(dr);
            }        private void Form2_Load(object sender, EventArgs e)
            {
                dt.Columns.Add("St", System.Type.GetType("System.String"));//直接为表创建一列
                dt.Columns.Add("PlanCoil", System.Type.GetType("System.String"));
                dt.Columns.Add("Coil", System.Type.GetType("System.String"));
                dt.Columns.Add("Dt", System.Type.GetType("System.String"));
                dt.Columns.Add("Row", System.Type.GetType("System.String"));
                dt.Columns.Add("Out", System.Type.GetType("System.String"));
                dt.Columns.Add("Lv", System.Type.GetType("System.String"));            Add("2", "7", "00106T", "01", "1", "2", "2");
                Add("2", "2", "00300T", "02", "2", "2", "2");
                DataView dv = dt.DefaultView;
                dv.Sort = "PlanCoil";
                dt = dv.ToTable();
                string[] str = new string[7];
                foreach (DataRow row in dt.Rows)
                {
                    str[0] = row["St"].ToString();
                    str[1] = row["PlanCoil"].ToString();
                    str[2] = row["Coil"].ToString();
                    str[3] = row["Dt"].ToString();
                    str[4] = row["Row"].ToString();
                    str[5] = row["Out"].ToString();
                    str[6] = row["Lv"].ToString();
                    ListViewItem item = new ListViewItem(str, 0);
                    this.listView1.Items.Add(item);
                }
            }
    再试试吧
      

  10.   

     dt = dv.ToTable();别用这个,我的是03
      

  11.   

    DataTable dt = new DataTable();
    声明成全局的dt.Columns.Add("St", System.Type.GetType("System.String"));//直接为表创建一列
                dt.Columns.Add("PlanCoil", System.Type.GetType("System.String"));
                dt.Columns.Add("Coil", System.Type.GetType("System.String"));
                dt.Columns.Add("Dt", System.Type.GetType("System.String"));
                dt.Columns.Add("Row", System.Type.GetType("System.String"));
                dt.Columns.Add("Out", System.Type.GetType("System.String"));
                dt.Columns.Add("Lv", System.Type.GetType("System.String"));
    放到FormLoad中DataRow[] rows=dt.Select ("","PlanCoil");
    ---》
    DataRow[] rows=dt.Select ("","PlanCoil,St");t.Rows .Clear ();
    dt=t;
    去掉
     foreach (DataRow row in dt.Rows) 
    -----》
     foreach (DataRow row in t.Rows) 
    string[] str = new string[7];
    下面加上
    this.lVw.Items.Clear();你的这种做法非常不好
    因为每次添加都需要把数据重新添加到ListView
    为什么不添加数据完毕后排序
    或者添加过程中按照顺序添加呢?
    非要借助DataTable的排序??多此一举~~~~~
      

  12.   

    把排序的去掉,加上这句:
    dt.DefaultView.Sort="St,PlanCoil";
      

  13.   


    DataView dv = dt.DefaultView;
                dv.Sort = "PlanCoil";
                dt = dv.ToTable();