【问题标题】:sorting datatable based on column index not name of column基于列索引而不是列名对数据表进行排序
【发布时间】:2012-12-07 11:24:04
【问题描述】:

我有一个包含 10 列的 DataTable,我想按列索引 10 从最大到最小对表进行排序。我知道这对某些人来说应该很容易,但这是我第一次使用这样的 DataTable

我发现的所有网站都说你必须知道列名,但我没有,我想通过列的索引值来引用列。这应该对该数据表中的所有行进行排序

【问题讨论】:

  • 您到底有什么问题?到目前为止,您尝试了什么但失败了?
  • 我发现哪个曾经坐过总是只引用列名并且数据不会自行排序。
  • 试试 DataTable dt = new DataTable(); //然后填充值DataView dv = dt.AsDataView(); dv.Sort = dv.Table.Columns[index].ColumnName + "DESC";
  • 发布您的代码,以便我们查看您的尝试
  • 是一次性对数据进行排序还是将排序后的数据保存在同一个数据表中

标签: c# datatable


【解决方案1】:

您可以使用 DefaultView 和 ColumnName 进行排序。

dataTable.DefaultView.Sort = dataTable.Columns[9].ColumnName + " DESC";

工作示例:

    DataTable dt = new DataTable();
    //Define columns to DataTable 
    dt.Columns.Add("Id");
    dt.Columns.Add("Name");


    //Adding rows to DataTable 
    DataRow row1 = dt.NewRow();
    row1["ID"] = 1;
    row1["Name"] = "Jack";
    dt.Rows.Add(row1);


    DataRow row2 = dt.NewRow();
    row2["ID"] = 2;
    row2["Name"] = "Fruit";
    dt.Rows.Add(row2);

    DataRow row3 = dt.NewRow();
    row3["ID"] = 3;
    row3["Name"] = "Ball";
    dt.Rows.Add(row3);

    dt.DefaultView.Sort = dt.Columns[1].ColumnName + " ASC";

    foreach (DataRowView drv in dt.DefaultView)
    {
        for (int i = 0; i < dt.Columns.Count; i++)
            Console.WriteLine(drv[i]);
    }

【讨论】:

  • 这是否会对数据行进行排序
  • 它对 DefaultView 中的行进行排序
【解决方案2】:

试试

DataTable dt = new DataTable(); 
//Then fill values 
DataView dv = dt.AsDataView(); // DataView dv = dt.DefaultView();
dv.Sort = dv.Table.Columns[index].ColumnName + " DESC";
dt = dv.Table;

【讨论】:

  • 错误信息找不到列
  • @JimBrad 而不是DataView dv = dt.AsDataView(); 试试DataView dv = new DataView(); dv = dt.DefaultView();
  • 现在它运行程序没有任何问题,但它仍然没有对数据进行排序
猜你喜欢
  • 2019-03-31
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
  • 2015-07-25
  • 2017-03-24
  • 1970-01-01
  • 2012-07-19
  • 1970-01-01
相关资源
最近更新 更多