2013-04-29 2 views
0

У меня есть dataview с именем Employee. Когда я ввожу «na» в поле фильтрации, это приводит к такому результату. отфильтрованный и отсортированный порядок ASC.Как сортировать dataview в соответствии со строкой ввода?

Amina 
Anna 
Masud Rana 
Nasima 

Но я хочу, чтобы это отсортировано в соответствии с моей входной строкой «na». Ожидаемый результат что-то вроде этого

Nasima 
Anna 
Amina 
Masud Rana 

Thnx для любого предложения :)

+0

знаете ли вы об использовании метода сортировки.? 'this.GridView1.Sort (this.dataGridView1.Columns [" Имя столбца, которое вы хотите сортировать "], ListSortDirection.Ascending);' – MethodMan

+0

да, я использую этот вид. TransferEmployeeFilterView.Sort = "EmployeeName"; Но это дает мне результат, отсортированный по алфавитному методу. Это дает мне первый результат, который я упомянул здесь. Но я хотел бы получить второй результат, который не будет сортировать столбец просто asc/desc, а зависит от строки ввода («na») в окне фильтра. –

+0

@AnupamRoy Я думаю, что для такого рода сортировки вы должны использовать «как» подстановочный знак в своем запросе вместо DataView.May вы PLZ показать ваш запрос «Поиск» ... – Rahul

ответ

0
  1. Сортировка с фильтром не представляется возможным непосредственно с помощью метода расширения, предусмотренного в IntelliSense для 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; 
    } 
    

    это будет сортировать данные с помощью параметра фильтра (в вашем случае «на»)

    //ColumnName is EmployeeName In your Case and filter text is txtSearchValue.Text 
    DataTable dt2 = table.Sort("ColumnName", txtSearchValue.Text); 
    DataView dv = dt2.DefaultView; 
    
  2. Ваше требование может б встречен другим способом, и в очень небольшом коде с помощью лямбда-выражения,

    DataTable dt3 = table.Rows.Cast<DataRow>().OrderBy(s => Convert.ToString(s["ColumnName"]).IndexOf(txtSearchValue.Text)).CopyToDataTable(); 
    DataView dv = dt3.DefaultView; 
    
Смежные вопросы