【发布时间】:2020-11-29 11:47:57
【问题描述】:
我有两个 (int) 列的表:countSelected 和 globalCount。我想先按countSelected 降序排列表格,然后按globalSelected 降序排列。
我试过了:
DataTable dt = myTable;
if (dt.Rows.Count > 0)
{
dt = dt.AsEnumerable().OrderByDescending(x => x.Field<int>("countSelected")).ThenByDescending(x => x.Field<int>("GlobalCount"))
.Select(x => x)
.CopyToDataTable();
}
但它是bad:"System.InvalidCastException"。也许是因为一些单元格是空的。
我该如何解决这个问题?
【问题讨论】:
-
您确定数据类型吗?尝试添加“?”在 int 之后。您也可以检查 DBNull.value。
-
你尝试过像“Int.Parse(x.countSelected)”这样的简单转换吗?
-
如果您的 DataTable 用作某些控件的 DataSource:
myTable.DefaultView.Sort = "countSelected DESC, GlobalCount DESC";。控件使用 DataTable.DefaultView 作为数据源,因此数据将显示为已排序(而 DataTable 的行顺序保持不变)。如果没有绑定,又想生成一个新的DataTable,那么Sort和var dt = myTable.DefaultView.ToTable();。如果您的 DataTable 已绑定,我建议使用 BindingSource 作为 DataSource mediator 对象,并使用其 Sort 方法对数据进行排序。 -
谢谢!你的回答我成功了!