2017-04-06 6 views
0

私はこの質問に数日間苦労していますが、まだ答えは見つかりませんでした。私は、ストアドプロシージャから動的に満たされているToolStripMenu配列作成:リストアコンテンツを使用してデータグリッドビューをフィルタリングするC#

ToolStripMenuItem[] itemsDepto = null; 
itemsDepto = new ToolStripMenuItem[data.Tables[0].Rows.Count]; 
for (int i = 0; i <= data.Tables[0].Rows.Count - 1; i++) 
{ 
    itemsDepto[i] = new ToolStripMenuItem(); 
    itemsDepto[i].Tag = data.Tables[0].Rows[i].ItemArray[0]; 
    itemsDepto[i].Text = data.Tables[0].Rows[i].ItemArray[1].ToString(); 
    itemsDepto[i].CheckOnClick = true; 
    itemsDepto[i].Checked = true; 
    itemsDepto[i].Click += DeptoFilter_Click; 
    deptoList.Add(data.Tables[0].Rows[i].ItemArray[1].ToString()); 
} 
tsmiDepartamento.DropDownItems.AddRange(itemsDepto); 

をそして私が達成しようとしていることは、デフォルトでは、ユーザーのためのフィルタコントロールとしてこのToolStripMenuを使用するときに、ユーザーチェックを解除ので、チェックされますメニューでは、チェックされていない内容の行をフィルタリングする必要があります。私は追加し、次の例に見ることができるように、メニューボタンの状態に応じて、リストから値を削除するクリックイベントで

private void DeptoFilter_Click(object sender, EventArgs e) 
{ 
    ToolStripMenuItem temp = new ToolStripMenuItem(); 
    temp = (ToolStripMenuItem)sender; 
    BindingSource bind = new BindingSource(); 
    bind.DataSource = dgvPersonalTotal.DataSource; 
    if (temp.CheckState == CheckState.Checked) 
    { 
     deptoList.Add(sender.ToString()); 
    } 
    else 
    { 
     deptoList.Remove(sender.ToString()); 
    } 
    bind.Filter = "Departamento NOT IN (" + /*LIST*/"" + ")"; 
    dgvPersonalTotal.DataSource = bind; 
    //foreach (string x in deptoList) 
    //{ 
    //} 
} 

しかし、大きな問題Iあなたがコードで見ることができるように、リストを使用してバインディングソースをフィルタリングする方法はありますか?リストを使用することはできません。また、foreachのBindingSource.Filterを使用することもできません。この問題を解決するので、どんなアイディアも高く評価されます。

+0

deptoListの種類は何ですか? – Alon

+0

リスト deptoList =新しいリスト(); – cyberac75

答えて

0
bind.Filter = "Departamento NOT IN (" + string.Join(",", deptoList.ToArray()) + ")"; 
+0

これはアイデアのおかげで私の人にとってはうまくいった:bind.Filter = "Departamento IN(" + string.Join( "、" deptoList.Select(x => "'" + x + "'"))+ ")" – cyberac75

+0

私は投票することはできませんが、私はあなたに正しい回答を与えますが、このコードを使用したい人は、これが正解ではないことを知る必要があります。例外:スローされた例外: 'System.Data.SyntaxErrorException' System.Data.dllで、上記のコメントに投稿された回答を使用してください – cyberac75

関連する問題