C# 如何根据输入字符串对dataview进行排序?

C# 如何根据输入字符串对dataview进行排序?,c#,sorting,dataview,C#,Sorting,Dataview,我有一个带有员工姓名的数据视图。当我在过滤框中输入“na”时,它会显示这个结果。按ASC顺序进行筛选和排序 Amina Anna Masud Rana Nasima 但我希望它按照我的输入字符串“na”排序。预期结果是这样的 Nasima Anna Amina Masud Rana thnx,如有任何建议:) 使用intellisense for Dataview中提供的扩展方法无法直接使用筛选器进行排序,在Dataview中,排序结果将仅按字母顺序出现, 然而,为了满足您的需求,我为Dat

我有一个带有员工姓名的数据视图。当我在过滤框中输入“na”时,它会显示这个结果。按ASC顺序进行筛选和排序

Amina
Anna
Masud Rana
Nasima
但我希望它按照我的输入字符串“na”排序。预期结果是这样的

Nasima
Anna
Amina
Masud Rana
thnx,如有任何建议:)

  • 使用intellisense for 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;
    }
    
  • 您的需求可以通过另一种方法来满足,并且在非常小的代码中使用Lambda表达式

    DataTable dt3 = table.Rows.Cast<DataRow>().OrderBy(s => Convert.ToString(s["ColumnName"]).IndexOf(txtSearchValue.Text)).CopyToDataTable();
    DataView dv = dt3.DefaultView;
    
    DataTable dt3=table.Rows.Cast();
    DataView dv=dt3.DefaultView;
    

  • 您是否知道使用排序方法<代码>this.GridView1.Sort(this.dataGridView1.Columns[“要对其进行排序的列名”],ListSortDirection.Ascending)是的,我用过这种。TransferEmployeeFilterView.Sort=“EmployeeName”;但这给了我按字母顺序排序的结果。这是我在这里提到的第一个结果。但我希望得到第二个结果,它不会仅对列进行asc/desc排序,而是根据我的筛选框中的输入字符串(“na”)进行排序。@AnupamRoy我认为对于这种排序,您必须在查询中使用“like”通配符,而不是DataView。请显示“搜索”查询…
    TransferEmployeeFilterView.RowFilter=“EmployeeName类似“%”+txtSearchValue.Text.ToUpper()+“%”“TransferEmployeeFilterView.Sort=“EmployeeName”
    这是我根据输入字符串(例如:“na”)获取筛选数据并对其进行排序所做的操作。但我希望排序取决于输入字符串,而不是一般的字母方式。
    DataTable dt3 = table.Rows.Cast<DataRow>().OrderBy(s => Convert.ToString(s["ColumnName"]).IndexOf(txtSearchValue.Text)).CopyToDataTable();
    DataView dv = dt3.DefaultView;