vb.net dataTable / DataGridView搜索/排序

时间:2009-11-17 21:41:45

标签: .net vb.net datagridview sorting

所以我在表单上有一个dataGridView和一个文本框。我希望能够搜索dataGridView并将其与文本框中的字符串进行排序。例如:   我在文本框中键入“acv”,所有包含“acv”的字符串都排在最前面。 我正在通过一系列涉及datatable.select和一些清理和填充的体操来完成这项任务,但它很丑陋而且很慢。这样做的最佳做法/正确/正常方式是什么?

2 个答案:

答案 0 :(得分:3)

使用过滤的DataView,然后将DataGridView的BindingSource设置为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()

答案 1 :(得分:0)

看看this tutorial。我使用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');
})
}