vb.net dataTable / DataGridView поиск / сортировка - PullRequest
3 голосов
/ 18 ноября 2009

Итак, у меня есть dataGridView и текстовое поле на форме. Я хочу иметь возможность искать через dataGridView и сортировать его по сравнению со строкой в ​​текстовом поле. например: Я набираю «acv» в текстовом поле, и все строки, содержащие «acv», сортируются в начало. Я выполняю это с кучей гимнастики, включающей datatable.select и некоторую очистку и заполнение, но это ужасно и медленно. Каков наилучший метод / правильный / нормальный способ сделать это?

Ответы [ 2 ]

3 голосов
/ 18 ноября 2009

Используйте отфильтрованный DataView, а затем установите BindingSource вашего DataGridView на Filtered DataView. Если пользователь очищает условие фильтра, просто верните BindingSource к исходному виду по умолчанию. Я рекомендую вам сохранить вид перед сортировкой, чтобы вы могли легко вернуться к исходному виду данных. Я использую это сейчас для быстрой сортировки, и это прекрасно работает. Замените имена столбцов вашими. Вы должны иметь возможность изменить представление данных из исходного DataGridView и применить фильтр без повторного связывания. Просто привяжите свой DataGridView к DataView в начале, затем извлеките DataView (т.е. DataSource) и измените. Я не уверен, используете ли вы BindingNavigator или нет. Удачи.

Dim myDataTable As DataTable = myDataSet.Tables(0)
Dim myDataView As New DataView(myDataTable)

myDataView.RowFilter = "CompanyName LIKE '%" & ddlAlpha.SelectedItem.Text & "%'"
myDataView.Sort = "ContactName"
dataGridView1.DataSource = myDataView
dataGridView1.DataBind()
0 голосов
/ 18 ноября 2009

Взгляните на этот урок . Я использовал ту же идею, что и для фильтрации таблиц с использованием jQuery, и у меня все получилось. Вот что я использовал:

$(document).ready(function() 
{    
$('#filter').keyup(function(event) 
{
    //if esc is pressed or nothing is entered        
    if (event.keyCode == 27 || $(this).val() == '') 
    {
        //if esc is pressed we want to clear the value of search box
        $(this).val('');

        //we want each row to be visible because if nothing
        //is entered then all rows are matched.
        $('tbody tr').removeClass('visible').show().addClass('visible');
    }
    else 
    {
        // drill down and find the ONE table out of many.
        var theTable = $('div.rgDataDiv').find('table.rgMasterTable').find('tbody tr');

        //if there is text, lets filter
        filter(theTable, $(this).val());
    }
});    
});


//filter results based on query
function filter(selector, query) 
{
query =    $.trim(query); //trim white space
query = query.replace(/ /gi, '|'); //add OR for regex

$(selector).each(function() 
{
    ($(this).text().search(new RegExp(query, "i")) < 0) ? $(this).hide().removeClass('visible') : $(this).show().addClass('visible');
})
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...