2013-03-03 133 views
5

我想把一个文本框作为一个Rowfilter在textchanged事件下!行过滤器中的多个参数

下面的代码是用来GRID能得到相应的Reg_NumberCustomer_Name这是在文本框中输入!

笏的令人惊讶的事实是,这个代码直接将第二个参数

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

试图切换线,但无论我做什么,它忽略了一日一和采取第二

我试图把和两个在一个单一的行,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) { } 
} 

回答

6

这是因为第二次分配将替换第一个

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-注射:

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 + "%'"; 
} 
+0

哇!这是一个简短的例子:)非常感谢:) – user2128912 2013-03-24 12:07:42

2

这应该工作:

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

我试了一下:)谢谢 – user2128912 2013-03-24 12:07:24

1

我认为你需要或运算,而不是与"Customer_Name like '%" + radTextBoxControl1.Text + "%' OR Reg_Number like '%" + radTextBoxControl1.Text + "%'";

+0

非常感谢你:) – user2128912 2013-03-24 12:07:06