我有来自数据库的数据,格式为 DataSet
.然后我将其设置为 DataSource
在执行 DataBind()
之前的网格控件.我想对 DataSet
进行排序/DataTable
在一列上。该列在数据库中排序很复杂,但我希望我可以像对通用列表进行排序一样对它进行排序,即使用 deligate。
这是可能的还是我必须将它转移到不同的数据结构?
编辑 我认为这些答案中的任何一个都无法为我工作,我想是因为我正在使用 .Net 2.0。
最佳答案
由于 DataTable(和 DataView)排序的工作原理,您不能直接使用委托(delegate)方法。一种解决方法是向数据表中添加表示订单的列,并根据所需的顺序设置值(每行)。然后,您可以将排序添加到此新列的 View 中。例如(为了简洁起见,使用 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)
关于.net - 如何在执行 DataBind 之前对 DataSet 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/228875/