c# - 行过滤器中的多个参数

标签 c# winforms

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

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

令人惊讶的是,这段代码直接接受了第二个参数

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

试图切换线路,但无论我做什么,它都会忽略第一个并占用第二个

我试图将 AND 放在一行中,但是没有用,请帮帮我 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) { }
}

最佳答案

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

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

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

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 注入(inject):

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

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

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

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

关于c# - 行过滤器中的多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15186375/

相关文章:

c# - 为什么我在文本框中得到无效输出?

c# - 使用 C# 访问 GIF 帧

c# - 当 actionName 类似于 "/controllerName/action/"时,Html.ActionLink() 添加不需要的文件夹

vb.net - VB.NET:无法从资源加载音频

winforms - 流布局面板中控件的重新排序

c# - 反射和属性——移除?修改?或完全信任的 Windows 服务?

c# - 通过一笔交易选择并更新

C# MongoDB AutoGenerateId 不带属性

c# - 归并排序问题

c# - Autofac - 注册所有 Windows 窗体