我将数据查询出来,绑定到DataGridView中,界面显示的是1、2、3、4、5的顺序,可是导出的时候顺序就乱了(变成了2、1、5、4、3);
绑定代码  List<ScsjModel> listModel = new List<ScsjModel>();
           dataGridView2.DataSource = listModel;
List<ScsjModel> listModel是对2个DataTable循环取出来的值,ScsjModel类的排序也是安装1、2、3、4、5的方式排序,最郁闷的是,我电脑导出来是正常1、2、3、4、5的顺序,可是客户那边到出来的顺序不一样
     DataGridView生成Excel标题代码
       object[,] objData = new object[RowCount + 1, ColCount];
     //获取列标题
      foreach (DataGridViewColumn col in myDGV.Columns)
      {
              objData[RowIndex, ColIndex++] = col.HeaderText;
       }

解决方案 »

  1.   

           ScsjModel mod = new ScsjModel();
                foreach (DataRow dr in dt.Rows)
                {
                    foreach (DataRow drDeta in dtDetails.Rows)
                    {
                        if (dr["ztsfh"].ToString() == drDeta["ztsfh"].ToString())
                        {
                            mod = new ScsjModel()
                            {
                                FinishDate = Convert.ToDateTime(drDeta["FinishDate"]),
                                Pn = dr["pn"].ToString(),
                                Qty = Convert.ToInt32(dr["qty"]),
                                LineName = dr["lineName"].ToString(),
                                Szfh = dr["szfh"].ToString(),
                                Ztsfh = dr["ztsfh"].ToString(),
                                FinishRe = dr["FinishRe"].ToString(),
                                Complete = Convert.ToInt32(drDeta["Complete"])
                            };                        listModel.Add(mod);
                        }
                    }
                }
    这个是生成ScsjModel对象的方法    foreach (DataGridViewColumn col in dataGridView1.Columns)
                {                MessageBox.Show(col.HeaderText);
                }
    我用上面那个方法测试过,导出Excel的时候,我本机的DataGridView顺序是对的,但是客户那边顺序却是错误的,但是界面显示的顺序又是对的
      

  2.   

    直接放个Datatable与gridview绑定,然后导出,看顺序乱不乱。导出代码有问题吗?
      

  3.   

    我其他的报表查询,查询的列和DataGridView中的列是一致的,所以可以直接用dataGridView1.DataSource = dt绑定;导出的数据顺序也是正常的; 但是这个是用List<ScsjModel> listModel = new List<ScsjModel>();
      dataGridView2.DataSource = listModel;绑定的是List,但是这个应该也会安装ScsjModel对象中的顺序或者生成的时候顺序排列吧。
      

  4.   

     foreach (DataGridViewColumn col in myDGV.Columns当然会乱掉了.需要使用for,按顺序,从第一个开始到最后一个.
      

  5.   

    不是吧,我一直用的是foreach都没有出过问题,foreach循环并不是随机循环的,他是按照顺序循环的
      

  6.   

    已经找到解决办法了用这句话就行了:dataGridView1.AutoGenerateColumns = false;DataGridView中的列不管你是手动编辑列还是绑定数据源后自动生成的列  
    如果你是通过
    DataGridView.Columns[i].Name 来获得列的话,顺序会根据以下情况变更的
    1、如果没有实体类 则根据你的查询语句中的列的顺序是一样的
    2、如果有实体类,比如DataGridView数据源是List<Student>(Student是实体类)则得到的顺序和实体类中的属性的顺序一致。但是我还是很纠结,因为我的实体类是按照顺序排下来的,我本机导出是正常的,客户那边顺序确实错误的,莫非是要打什么补丁?我的蛋都快碎了
      

  7.   

    应该是GRIDVIEW有了排序但是数据源没有排序,导出的时候用的是数据源所有导致两者顺序不同 正常