2016-10-05 2 views
0

私はcheckedListBoxを使って自分のdataGridViewをフィルタリングするこのコードを持っています。ユーザーがcheckedListBox内のボックスをチェックするたびに、dataGridViewは自動的に更新され、チェックされた名前に関連するデータのみが表示されます(check name = "John"でフィルタリングされます)。CheckedListBox内の複数の項目をチェックしてdataGridViewをフィルタリングするにはどうすればよいですか?

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) 
    { 
       DataTableCollection tables = myDatabaseDataSet.Tables; 
       DataView view = new DataView(tables[0]); 
       BindingSource source = new BindingSource(); 
       source.DataSource = view; 
       dataGridView1.DataSource = source; 
       source.Filter = "myColumnName ='" + checkedListBox1.Text.Replace("'", "''") + "'"; 
     } 

は今の質問は、私が作ることができるどのようにCheckedListBoxで、それので、複数の項目がチェックさ名前だけを示すことによって確認し、ターンのDataGridViewの更新にされている(例えばにCheckedListBox内の名前は「ジョン」と「ジェーンですがチェック")?すべてのヘルプは高く評価され

Desired outcome

:私が達成したい何

Code Above

は、この(嘲笑写真)である。

上記のコードは私に次のような結果になります。

+0

名前はジョン**と*ジェーンなるカント。 OR – Plutonix

+0

ジョン(JohnとJaneで等しく並べ替えることはできません)が1次ソートである必要があります。あなたが何をしているのですか? –

+0

私が探しているのは、すべての名前がフィルタリングされているが、checkedListBoxにチェックマークが付いている名前でdatagridviewを持つことです。上記のコードは、一度に1つの名前を持ちます。私は一度に複数の名前が必要です。 –

答えて

0

このように、checkedListBoxを設定するために、「データベースとは別の名前を選択する」という結果になるデータベースがあります。だから今のような何かを追加する必要があります:

List<string> names = new List<string>(); 
for (int i = 0; i < checkedListBox.Items.Count; i++) 
{ 
    CheckState st = checkedListBox.GetItemCheckState(checkedListBox.Items.IndexOf(i)); 
    if(st == CheckState.Checked) 
    { 
     int selected = checkedListBox.SelectedIndex; 
     if (selected != -1) 
     { 
      names.Add(checkedListBox.Items[selected].ToString()); 
     } 
    } 
} 

結果はcheckedListBoxでチェックされる項目のリストになります。あなたはそれを前にフィルタリングしたコードで使用することができます。ハードコードされた名前を、チェックされたリスト文字列に置き換えてください。

string filterString = ""; 
int count = 0; 
foreach (name in names) 
{ 
    if (count != 0) 
    { 
     filterString += " OR Responsible = '" + name + "'"; 
    } 
    else 
    { 
     filterString += "Responsible = '" + name + "'"; 
    } 
    count += 1; 
} 

今、あなたはデータビューを作成するためのフィルタとして使用できる文字列を持っています。後は対照的に、それチェックボックスに基づいて、DataViewになったときに

DataView view = new DataView(tables[0], filterString, "Responsible Desc", DataViewRowState.CurrentRows); 

これは、テーブルをフィルタリングする必要があります状態。

最終イベント:

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) 
{ 
    DataTableCollection tables = myDatabaseDataSet.Tables; 

    // 
    // Place all my code here 
    // 

    BindingSource source = new BindingSource(); 
    source.DataSource = view; 
    dataGridView1.DataSource = source; 
} 
+0

アイデアは、エンドユーザがcheckedListBoxを使用して必要に応じて名前でテーブルをフィルタリングするようにすることです。名前のリストはAccessの内容によって異なりますので、リストに名前をハードコードすることはできません。 –

+0

@ P.C更新を確認してください – Hank

+0

更新された質問を確認してください。私は、順番に、データグリッドビューをフィルタリングするボックスをチェックするためにエンドユーザが必要です。 –

関連する問題