2013-12-07 21 views
-1
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; 
+1

讓我猜。一個或多個文本框的文本中有單引號? – Steve

+0

轉換(地址,'System.String')像'「+ textBoxAddress.Text.Replace(@」'「,」''「)+」%'「 – user2506894

+0

是的,可以工作 – Steve

回答

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

你錯過了一些類似的地方%

+0

沒有問題, – user2506894

1

有可能是在一個或一個以上的單引號你的文本框。這可能會破壞字符串連接邏輯並混淆嘗試應用Filter屬性的代碼。
你需要調用string.Replace方法作爲DataColumn.Expression財產

User-defined values may be used within expressions to be compared with column values. String values should be enclosed within single quotation marks (and each single quotation character in a string value has to be escaped by prepending it with another single quotation character). .....

但是我發現可疑調用轉換功能,至少在領域firstName在MSDN解釋每一個引號字符的文本框的值內翻番,lastNameaddress。這很可能是他們已經在數據庫端的字符串,所以沒有必要調用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);