我有一个带有员工姓名的数据视图。当我在过滤框中输入“na”时,它会得到这个结果。过滤和排序的 ASC 顺序。
Amina
Anna
Masud Rana
Nasima
但我希望它根据我的输入字符串“na”进行排序。预期的结果是这样的
Nasima
Anna
Amina
Masud Rana
谢谢任何建议:)
使用智能感知中为Dataview提供的扩展方法无法直接使用过滤器进行排序,在DataView中排序结果将仅按字母顺序排列,但是,为了满足您的要求,我为DataTable创建了自己的扩展方法
public static DataTable Sort(this DataTable dt, string ColumnName, string param)
{
DataTable dtCopy = new DataTable();
List<DataRow> list = dt.Rows.Cast<DataRow>().ToList();
list.Sort((x, y) => Convert.ToString(x[ColumnName]).ToLower().IndexOf(param).CompareTo(Convert.ToString(y[ColumnName]).ToLower().IndexOf(param)));
dtCopy = list.CopyToDataTable();
return dtCopy;
}
这将使用过滤器参数对数据进行排序(在您的情况下为“na”)
//ColumnName is EmployeeName In your Case and filter text is txtSearchValue.Text
DataTable dt2 = table.Sort("ColumnName", txtSearchValue.Text);
DataView dv = dt2.DefaultView;
您的要求可以通过另一种方法来满足,并且使用 Lambda 表达式在非常小的代码中,
DataTable dt3 = table.Rows.Cast<DataRow>().OrderBy(s => Convert.ToString(s["ColumnName"]).IndexOf(txtSearchValue.Text)).CopyToDataTable();
DataView dv = dt3.DefaultView;