【问题标题】:DataGridView filtering method does not work correctly when a button is clicked单击按钮时,DataGridView 过滤方法无法正常工作
【发布时间】:2011-07-25 03:25:00
【问题描述】:

我知道我已经多次问过这个问题,但我没有得到可以帮助我的答案。

请需要建议,我已经尝试了 1 周或更长时间。

我有一个用户控件,我的DataGrid 在哪里。有一个toolBar 带有一个按钮,该按钮打开一个Find 表单,该表单有一个按钮和一个textBox。点击这个按钮,我像这样调用方法Search():

private void btnFind_Click_1(object sender, EventArgs e)
{
    Inventory i = new Inventory();
    i.Search(txtFind.Text);
}

这就是Search 方法的工作原理:

public void Search(string searchWord) 
{
    AcidDBDataContext db = new AcidDBDataContext();
    var q = db.ProcSearch(searchWord);
    dgvInventory.DataSource = q;
}

此方法在库存中运行良好,但是当我单击 btnFind 时,它什么也没做,我使用调试器并看到查询正在正确执行并从表中获取行。

问题出在这一行:dgvInventory.DataSource = q;

我正在使用 C# WinForms 和 SQL Server 2008

【问题讨论】:

    标签: c# winforms data-binding datagridview datasource


    【解决方案1】:

    您是否尝试过 dgvInventory.ResetBindings()?

    [编辑:错误地表述为 .Refresh 而不是 .ResetBindings]

    【讨论】:

    • 我现在试过了,但是不行。对其他表单的 datagridview 不起作用
    • 实际上它是ResetBindings() 我在想上面cdel 提到的。我认为 Refresh 是针对 UI 表示的。
    【解决方案2】:

    你可以使用 BindingSource

    BindingSource bs = new BindingSource();
    

    然后在搜索中(字符串搜索词)

    //dgvInventory.DataSource = q;
    bs.DataSource = q;
    if (dgvInventory.DataSource == null)
        dgvInventory.DataSource = bs;
    else
        bs.ResetBindings(false);
    

    【讨论】:

    • 它不起作用。我什至无法从另一个表单中隐藏 datagrid 列
    猜你喜欢
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 2023-01-23
    • 1970-01-01
    • 2013-11-11
    • 2022-08-22
    相关资源
    最近更新 更多