2011-08-04 82 views
1

我有一個DataGridView從類似於this設置的夫妻表中提取數據。它效果很好。好帖子和答案。繼續該帖子中的示例,我現在要創建一個篩選器,該帳戶通過在帳戶說明中使用LIKE參數生成適用於特定帳戶的所有DataGridView事務。在DataGridView中篩選相關數據

我有一個解決方案,通過檢查帳戶表的描述和獲得IDAccount值,然後使用DataGridView過濾器中的值,但我希望有一個更自動化的方式使用綁定。

任何想法?謝謝你的建議。

編輯: 假如我有一個TextBox控件調用AccountDescriptionBox,我希望能夠做到像

dataGridView1.Filter = string.Format("{0} LIKE '{1}'", "IDAccount", AccountDescriptionBox.Text); 

顯然,這將無法正常工作IDAccount是一個整數,不一個字符串。我上面提到的解決方案是

string filter = string.Empty; 
Regex searchTerm = new Regex(Regex.Escape(AccountDescriptionBox.Text).Replace('\\', '.'), RegexOptions.IgnoreCase); 
var accts = from acct in dataSet1.Accounts 
      let matches = searchTerm.Matches(acct.Description) 
      where matches.Count > 0 
      select acct.ID; 
for (int i; i < accts.Count() - 1; i++) 
{ 
    filter += string.Format("IDAccount = {0} OR ",accts.ElementAt(i)); 
} 
filter += string.Format("IDAccount = {0}",accts.Last()); 
dataGridView1.Filter = filter; 

這個工作,但很麻煩。如果有辦法,我寧願通過綁定來完成。

+0

代碼片段來說明你試圖完成什麼可能有幫助 – Coops

+0

我也一直在嘗試如何過濾datagridviews。在我的情況下,他們由linq填充。我現在使用的解決方案是簡單地使用linq查詢作爲過濾器,因此過濾發生在行最終在datagridview中之前。根據你的情況,你可能會爲你工作。 – DavveK

+0

@CodeBlend,看我的編輯。 – gregsdennis

回答

-1

我不認爲有一種方法可以直接與數據綁定進行此操作。我在@ CodeBlend的評論中發佈瞭解決方案作爲編輯。

1

檢出DataView類。它允許您排序和篩選記錄,並執行簡單的類似SQL的操作。

+0

謝謝,但我已經設計了這樣一個界面,我不想改變它。當需要升級軟件時,我會查看其他控件。 – gregsdennis

+0

如果您重新訪問您的代碼,請重做您的解決方案以節省頭痛。 DataView是正確的解決方案,應該標記爲這樣。查看[DataView的MSDN文檔](http://msdn.microsoft.com/zh-cn/library/system.data.dataview.rowfilter.aspx) – Merlin