0

在我的 winforms 应用程序中,我有一个文本框,可以在输入时过滤数据网格(输入时搜索),这很好用,我还有另一个按钮可以通过两个组合框应用过滤器。

此按钮将连接到 datagridview 的数据表复制为数据源,并将 datagridviews 数据源更改为数据表的副本。

当通过按钮应用此过滤器时,我使另一个按钮可见(称为 btnRemoveFilterFserie),以通过将数据源更改回原始数据表来“删除”过滤器。

当 btnRemoveFilterFserie.Visible == true 时,表示应用了其他过滤器,我想在 DS1Filter3 数据表上键入时应用搜索,但它返回一个错误,即在此行上找不到 [Description] 列

DataRow[] result = DS1Filter.Select(outputInfo);

我希望理解我的解释不会令人困惑。

这是我使用的代码。

private void txtFserieSearch_KeyUp(object sender, KeyEventArgs e)
    {
        string outputInfo = "";
        string[] keyWords = txtFserieSearch.Text.Split(' ');

        foreach (string word in keyWords)
        {
            if (outputInfo.Length == 0)
            {
                outputInfo = "(Description LIKE '%" + word + "%' OR `Function Value` LIKE '%" +
                    word + "%')";
            }
            else
            {
                outputInfo += " AND (Description LIKE '%" + word + "%' OR `Function Value` LIKE '%" +
                    word + "%')";
            }
        }

        if (btnRemoveFilterFserie.Visible == true)
        {
            //Applies the filter to the DataView
            DataRow[] result = DS1Filter.Select(outputInfo);
            DataTable DS1Filter3 = DS1Filter.Clone();
            foreach (DataRow row in result)
            {
                DS1Filter3.ImportRow(row);
            }
            dataGridFserie.DataSource = DS1Filter3;
        }
        else if (btnRemoveFilterFserie.Visible == false)
        {
            DataRow[] result = DS1.Select(outputInfo);
            DataTable DS1Filter2 = DS1.Clone();
            foreach (DataRow row in result)
            {
                DS1Filter2.ImportRow(row);
            }
            dataGridFserie.DataSource = DS1Filter2;
        }
    }
4

0 回答 0