//希望得到一个行数组,按某列数据值从小到小排序,
//frmQuery.DataRows 是一个行数组。
DataRow Tmpdrs = ds.Tables["s_production"].NewRow();   //增加一行对象
for (int i = 0; i < frmQuery.DataRows.Length; i++)
 {
  for (int j = i + 1; j < frmQuery.DataRows.Length; j++)
  {
  if ((int)frmQuery.DataRows[i].ItemArray[55] > (int)frmQuery.DataRows[j].ItemArray[55])  
//比较行中一列(序号),按从小大的顺序排列。
   {              Tmpdrs[0] = frmQuery.DataRows[i];
              frmQuery.DataRows[i] = frmQuery.DataRows[j];
             frmQuery.DataRows[j] = Tmpdrs[0];
    }
   }
  }整个过程,不会报错,只是得不到我想要结果。希望高手能给出好的方法,指明原因!谢谢!

解决方案 »

  1.   

    if ((int)frmQuery.DataRows[i].ItemArray[55] > (int)frmQuery.DataRows[j].ItemArray[55])  Tmpdrs[0] = frmQuery.DataRows[i];
                  frmQuery.DataRows[i] = frmQuery.DataRows[j];
                 frmQuery.DataRows[j] = Tmpdrs[0];看着有点别扭··········
    二维数组比较,每次拿 各行的56项来比较····
    然后根据 各行的 第 56 项来为行排序······如果你的确是这个意思的话,这个方法没错  ······         - -不过 i < frmQuery.DataRows.Length  这里好像要 -1 吧~~~~~   最后不要和自己比较吗???!!!
      

  2.   

    Tmpdrs.ItemArray = frmQuery.DataRows[i].ItemArray;
                  frmQuery.DataRows[i].ItemArray = frmQuery.DataRows[j].ItemArray;
                 frmQuery.DataRows[j].ItemArray = Tmpdrs.ItemArray;
      

  3.   

    可以借用 dataview 的 Sort  属性 用来排序
      

  4.   

    楼主,你的写法可以优化:DataTable dt = new DataTable();// 第3行移到第0行
    DataRow dr=dt.Rows[3];
    dt.Rows[3].Delete();
    dt.Rows.InsertAt(dr, 0);
      

  5.   

    要自己写冒泡吗?很多控件都有sort的?这个sort也比自己写的冒泡快很多。。
      

  6.   

    小到大    for (int i = 0; i < frmQuery.DataRows.Length; i++) 
            {
                for (int j = 0; j < frmQuery.DataRows.Length - i; j++) 
                { 
                        string a = frmQuery.DataRows[j];
                        frmQuery.DataRows[j] = frmQuery.DataRows[j + 1];
                        frmQuery.DataRows[j + 1] = a;
                }
            }
      

  7.   

    粗略看了下代码
    楼主这么做,每次找到的是最小的
    但你i和j的取值范围有问题啊想不通的是居然没报错?
    i < frmQuery.DataRows.Length,i最后的值是frmQuery.DataRows.Length-1,数组从0开始算,其实这时候i已经是数组最后一个元素位置了,j=i+1,这跑到哪去了,居然没提示你数组越界?
      

  8.   


    j < frmQuery.DataRows.Length
    确实没进入循环...
      

  9.   

    Tmpdrs[0] = frmQuery.DataRows[i]; Row赋值给Cell 你确定是这样吗?
      

  10.   

    datatable.select("order by somecolumn desc or asc ")
      

  11.   

    //希望得到一个行数组,按某列数据值从小到小排序,
    //frmQuery.DataRows 是一个行数组。
    DataRow Tmpdrs = ds.Tables["s_production"].NewRow();   //增加一行对象
    for (int i = 0; i < frmQuery.DataRows.Length; i++)
     {
      for (int j = i + 1; j < frmQuery.DataRows.Length; j++)
      {
      if ((int)frmQuery.DataRows[i].ItemArray[55] > (int)frmQuery.DataRows[j].ItemArray[55])  
    //比较行中一列(序号),按从小大的顺序排列。
       {              //Tmpdrs[0] = frmQuery.DataRows[i];
                  Tmpdrs = frmQuery.DataRows[i];
                  frmQuery.DataRows[i] = frmQuery.DataRows[j];
                 //frmQuery.DataRows[j] = Tmpdrs[0];
                  frmQuery.DataRows[j] = Tmpdrs;
        }
       }
      }
      

  12.   


    //Tmpdrs[0]   =   frmQuery.DataRows[i]; 
                                Tmpdrs   =   frmQuery.DataRows[i]; 
                                frmQuery.DataRows[i]   =   frmQuery.DataRows[j]; 
                              //frmQuery.DataRows[j]   =   Tmpdrs[0]; 
                                frmQuery.DataRows[j]   =   Tmpdrs;