我试图在textchanged事件下将文本框作为Rowfilter放置!
下面的代码用于GRID以获取相应的Reg_Number 或 Customer_Name在文本框中输入的代码!
wat的令人惊讶的事实是,这段代码直接采用了第二个论证
(即)
((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) { }
}
Run Code Online (Sandbox Code Playgroud)
这是因为第二个分配取代了第一个分配
myDataTable.DefaultView.RowFilter = "firstFilter";
myDataTable.DefaultView.RowFilter = "secondFilter";
// Now RowFilter is "secondFilter"
Run Code Online (Sandbox Code Playgroud)
您必须将2个过滤器与逻辑OR组合以获得满足以下两个条件的结果:
myDataTable.DefaultView.RowFilter = "firstFilter OR secondFilter";
Run Code Online (Sandbox Code Playgroud)
var view = ((DataTable)radGridView1.DataSource).DefaultView;
string escapedText = radTextBoxControl1.Text.Replace("'", "''");
view.RowFilter = "Customer_Name LIKE '%" + escapedText + "%' OR " +
"Reg_Number LIKE '%" + escapedText + "%'";
Run Code Online (Sandbox Code Playgroud)
它变得更加清晰String.Format:
view.RowFilter = String.Format("Customer_Name LIKE '%{0}%' OR Reg_Number LIKE '%{0}%'",
escapedText);
Run Code Online (Sandbox Code Playgroud)
或者,从C#7.0开始,使用字符串插值:
view.RowFilter =
$"Customer_Name LIKE '%{escapedText}%' OR Reg_Number LIKE '%{escapedText}%'";
Run Code Online (Sandbox Code Playgroud)
另外,请确保用两个单引号替换单引号.这使SQL字符串能够包含引号并防止SQL注入:
SELECT * FROM myTable WHERE Name = 'Andy''s Pub';
Run Code Online (Sandbox Code Playgroud)
究其原因,你必须结合了这两个条件OR,而不是AND是,用户将进入任何一个客户名称或注册号(我们只有一个文本框).
或者,您可以检查条目是否格式化为注册号,并应用适当的过滤器.在伪代码中:
if (radTextBoxControl1.Text is formatted as reg_nr) {
view.RowFilter = "Reg_Number LIKE '%" + escapedText + "%'";
} else {
view.RowFilter = "Customer_Name LIKE '%" + escapedText + "%'";
}
Run Code Online (Sandbox Code Playgroud)