【问题标题】:Multiple parameter in Row Filter行过滤器中的多个参数
【发布时间】:2013-03-03 13:53:06
【问题描述】:

我正在尝试将文本框作为 Rowfilter 放在 textchanged 事件下!

下面的代码用于 GRID 获取在文本框中输入的适当的Reg_Number Customer_Name

令人惊讶的事实是,这段代码直接采用了第二个参数

(即)
((DataTable)radGridView1.DataSource).DefaultView.RowFilter = "Reg_Number like '%" + radTextBoxControl1.Text + "%'";

试图换行,但无论我做什么,它都会忽略第一个并取第二个

我试图把 AND 放在一行中,bt 不起作用,请帮助我 frnzz!

private void radTextBoxControl1_TextChanged(object sender, EventArgs e)
{
    try
    {
        ((DataTable)radGridView1.DataSource).DefaultView.RowFilter =
            "Customer_Name like '%" + radTextBoxControl1.Text + "%'";
        ((DataTable)radGridView1.DataSource).DefaultView.RowFilter =
            "Reg_Number like '%" + radTextBoxControl1.Text + "%'";
    }
    catch (Exception) { }
}

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    这是因为第二个赋值替换了第一个

    myDataTable.DefaultView.RowFilter = "firstFilter";
    myDataTable.DefaultView.RowFilter = "secondFilter";
    // Now RowFilter is "secondFilter"
    

    您必须将这 2 个过滤器与逻辑 OR 组合,以获得满足这两个条件的结果:

    myDataTable.DefaultView.RowFilter = "firstFilter OR secondFilter";
    

    var view = ((DataTable)radGridView1.DataSource).DefaultView;
    string escapedText = radTextBoxControl1.Text.Replace("'", "''");
    view.RowFilter = "Customer_Name LIKE '%" + escapedText + "%' OR " +
                        "Reg_Number LIKE '%" + escapedText + "%'";
    

    String.Format 会变得更清晰:

    view.RowFilter = String.Format("Customer_Name LIKE '%{0}%' OR Reg_Number LIKE '%{0}%'",
                                   escapedText);
    

    或者,从 C# 7.0 开始,使用字符串插值:

    view.RowFilter =
        $"Customer_Name LIKE '%{escapedText}%' OR Reg_Number LIKE '%{escapedText}%'";
    

    另外,请确保用两个单引号替换单引号。这使 SQL 字符串能够包含引号并防止 SQL 注入:

    SELECT * FROM myTable WHERE Name = 'Andy''s Pub';
    

    您必须将这两个条件与OR 而不是AND 结合起来的原因是,用户将输入要么客户名称注册号(我们只有一个文本框)。

    或者,您可以检查条目的格式是否类似于注册号并应用适当的过滤器。在伪代码中:

    if (radTextBoxControl1.Text is formatted as reg_nr) {
        view.RowFilter = "Reg_Number LIKE '%" + escapedText + "%'";
    } else {
        view.RowFilter = "Customer_Name LIKE '%" + escapedText + "%'";
    }
    

    【讨论】:

    • 哇!这是一个简短的例子 :) 非常感谢 :)
    【解决方案2】:

    这应该可行:

    ((DataTable)radGridView1.DataSource).DefaultView.RowFilter =
        "Customer_Name like '%" + radTextBoxControl1.Text + "%' AND Reg_Number like '%" + radTextBoxControl1.Text + "%'";
    

    【讨论】:

      【解决方案3】:

      我认为您需要 OR 操作而不是 AND "Customer_Name like '%" + radTextBoxControl1.Text + "%' OR Reg_Number like '%" + radTextBoxControl1.Text + "%'";

      【讨论】:

        猜你喜欢
        • 2021-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-11
        • 2014-11-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多