//希望得到一个行数组,按某列数据值从小到小排序,
//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];
}
}
}整个过程,不会报错,只是得不到我想要结果。希望高手能给出好的方法,指明原因!谢谢!
frmQuery.DataRows[i] = frmQuery.DataRows[j];
frmQuery.DataRows[j] = Tmpdrs[0];看着有点别扭··········
二维数组比较,每次拿 各行的56项来比较····
然后根据 各行的 第 56 项来为行排序······如果你的确是这个意思的话,这个方法没错 ······ - -不过 i < frmQuery.DataRows.Length 这里好像要 -1 吧~~~~~ 最后不要和自己比较吗???!!!
frmQuery.DataRows[i].ItemArray = frmQuery.DataRows[j].ItemArray;
frmQuery.DataRows[j].ItemArray = Tmpdrs.ItemArray;
DataRow dr=dt.Rows[3];
dt.Rows[3].Delete();
dt.Rows.InsertAt(dr, 0);
{
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;
}
}
楼主这么做,每次找到的是最小的
但你i和j的取值范围有问题啊想不通的是居然没报错?
i < frmQuery.DataRows.Length,i最后的值是frmQuery.DataRows.Length-1,数组从0开始算,其实这时候i已经是数组最后一个元素位置了,j=i+1,这跑到哪去了,居然没提示你数组越界?
j < frmQuery.DataRows.Length
确实没进入循环...
//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;
}
}
}
//Tmpdrs[0] = frmQuery.DataRows[i];
Tmpdrs = frmQuery.DataRows[i];
frmQuery.DataRows[i] = frmQuery.DataRows[j];
//frmQuery.DataRows[j] = Tmpdrs[0];
frmQuery.DataRows[j] = Tmpdrs;