私はこの質問に数日間苦労していますが、まだ答えは見つかりませんでした。私は、ストアドプロシージャから動的に満たされている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を使用することもできません。この問題を解決するので、どんなアイディアも高く評価されます。
deptoListの種類は何ですか? – Alon
リスト deptoList =新しいリスト(); –
cyberac75