.net - 如何在执行 DataBind 之前对 DataSet 进行排序?

标签 .net data-binding sorting .net-2.0 dataset

我有来自数据库的数据,格式为 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/

相关文章:

arrays - Swift 4 排序多维数组

C 编程根据 4 个字符串对结构数组进行排序

c# - 根据构建常量修改配置文件

c# - 使用变量查找资源文件

c# - 更改 ListBox 的选择会更改其他 ListBox 的选择。这是怎么回事?

c# - 在 MVVM 世界中更改 CollectionViewSource 源

c# - 您会推荐什么开源二维码生成器?

c# - 隐藏在设计模式下使用它的页面中的母版页内容

data-binding - UI5中更新模型,使用formatter时双向数据绑定(bind)变成单向

c# - DataGridView 重新加载后保存过滤