我有来自数据库的数据,格式为DataSet
。然后我将其设置为DataSource
在执行之前的网格控件DataBind()
。我想排序DataSet
/DataTable
在一列上。该列在数据库中排序太复杂,但我希望可以像对通用列表进行排序一样对其进行排序,即使用 deligate。
这是可能的还是我必须将其转移到不同的数据结构?
Edit我无法得到任何适合我的答案,我想因为我正在使用.Net 2.0。
由于 DataTable(和 DataView)排序的工作原理,您不能直接使用委托方法。一种解决方法是在数据表中添加一列来表示顺序,并根据所需的顺序设置值(每行)。然后,您可以向该新列的视图添加排序。例如(为了简洁,使用 LINQ 进行排序):
var sorted = table.Rows.Cast<DataRow>().OrderBy(row => your code);
int sequence = 0;
foreach(var row in sorted)
{
row["sequence"] = sequence++;
}
(如果您有类型化数据集,那么我认为您不需要 Cast 步骤,否则您将使用类型化 DataRow 子类)
[编辑以包含 2.0]
在 2.0 中(即没有 LINQ 等)你可以使用List<T>
进行排序 - 有点啰嗦,但是:
List<DataRow> sorted = new List<DataRow>();
foreach(DataRow row in table.Rows)
{
sorted.Add(row);
}
sorted.Sort(delegate(DataRow x, DataRow y) { your code });
int sequence = 0;
foreach(DataRow row in sorted)
{
row["sequence"] = sequence++;
}
(同样,如果您使用的是类型化数据集,请替换 DataRow)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)