BindingSource bs = new BindingSource();
bs.DataSource = dataGridViewShowPeople.DataSource;
bs.Filter = " Convert(ID, 'System.String') like '" + textBoxId.Text + "%' AND Convert(lastName, 'System.String') like '%" + textBoxLastName.Text + "%' AND Convert(firstName, 'System.String') like '" + textBoxFirstName.Text + "%' AND Convert(address, 'System.String') like '" + textBoxAddress.Text + "%'";
dataGridViewShowPeople.DataSource = bs;
答案 0 :(得分:1)
您的一个或多个文本框中可能只有一个引号。这可能会破坏字符串连接逻辑并混淆尝试应用Filter属性的代码
您需要调用string.Replace
方法将文本框值中的每个引号char加倍,如MSDN中DataColumn.Expression属性
用户定义的值可以在要与之比较的表达式中使用 列值。字符串值应该包含在单个值中 引号(以及字符串值中的每个单引号字符 必须通过在另一个单引号前加上它来逃避 字符)即可。 .....
但是我发现对CONVERT函数的调用很可疑,至少对于字段firstName
,lastName
和address
。它们很可能已经是数据库端的字符串,因此无需调用CONVERT函数
string ID = textBoxId.Text.Replace("'", "''");
string last = textBoxLastName.Text.Replace("'","''");
string first = textBoxFirstName.Text.Replace("'", "''");
string address = textBoxAddress.Text.Replace("'", "''");
BindingSource bs = new BindingSource();
bs.DataSource = dataGridViewShowPeople.DataSource;
bs.Filter = string.Format("Convert(ID, 'System.String') like '{0}%' AND " +
"lastName like '%{1}%' AND firstName like '{2}%' AND " +
"address like '{2}%'", ID, last, first, address);
答案 1 :(得分:0)
bs.Filter = " Convert(ID, 'System.String') like '%" + textBoxId.Text + "%' AND Convert(lastName, 'System.String') like '%" + textBoxLastName.Text + "%' AND Convert(firstName, 'System.String') like '%" + textBoxFirstName.Text + "%' AND Convert(address, 'System.String') like '%" + textBoxAddress.Text + "%'";
你在某些地方错过了%