Проверить выбранные элементы в CheckedListBox и показать / скрыть столбцы на основе выбранных значений - PullRequest
0 голосов
/ 19 мая 2018

Я использую C # и мне нужна помощь.У меня есть DataGridView, который я хотел бы отфильтровать (показать / скрыть столбцы) на основе выбора пользователя из CheckedListBox.Внутри CheckedListBox я перечислил несколько элементов, и это имена столбцов из DataGridView: все эти столбцы по умолчанию скрыты. CheckedListBox items

Теперь, если пользователь выбирает THERMAL, я бы хотел показать THERMAL Column в DataGridView.Если пользователь отменит выбор THERMAL, я хотел бы скрыть THERMAL Column в DataGridView.Если пользователь выбирает / отменяет выбор нескольких элементов, я хотел бы показать / скрыть все эти элементы из DataGridView.Я надеюсь, что это имеет смысл.

Вот код, который у меня есть:

private void CLB_SHOW_HIDE_SelectedIndexChanged(object sender, EventArgs e)
{
    string col = "";
    for (int i = 0; i < CLB_SHOW_HIDE.CheckedItems.Count; i++)
    {
        if (col == "")
        {
            col = CLB_SHOW_HIDE.GetItemText(CLB_SHOW_HIDE.CheckedItems[i]);
            this.DGV_FEATURE.Columns[col].Visible = true;
        }
        else
        {
            col += ", " + CLB_SHOW_HIDE.GetItemText(CLB_SHOW_HIDE.CheckedItems[i]);
            this.DGV_FEATURE.Columns[col].Visible = false;
        }
    }
}

Вот проблема ... Если я удаляю оператор else, я могу показать все столбцы только правильноесли я пойду снизу вверх (см. мою фотографию выше).Если я пойду сверху вниз, будет показан только первый элемент.Тогда мне придется отменить выбор этого элемента и выбрать другой для его отображения.

Если я добавлю еще оператор, как в приведенном выше коде, я получу это Ошибка

Кто-нибудь может пролить свет на это, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Вы ищете событие ItemCheck.

Например, допустим, вы добавили несколько столбцов в DataGridView.Затем вы можете настроить checkedListBox и добавить к нему имена столбцов.Также добавьте обработчик события для обработки события ItemCheck:

foreach (DataGridViewColumn c in dataGridView1.Columns)
    checkedListBox1.Items.Add(c.Name);
checkedListBox1.ItemCheck += CheckedListBox1_ItemCheck;

Затем обработайте событие ItemCheck, чтобы отобразить или скрыть столбцы:

private void CheckedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
    var item = checkedListBox1.GetItemText(checkedListBox1.Items[e.Index]);
    dataGridView1.Columns[item].Visible = e.NewValue == CheckState.Checked ? true : false;
}
0 голосов
/ 19 мая 2018

Только что выяснил ... Для тех, кто может искать решение, подобное этому, вот код:

private void CLB_SHOW_HIDE_SelectedIndexChanged(object sender, EventArgs e)
    {
        int f = 0;
        string qry = "";
        for (int i = 0; i < CLB_SHOW_HIDE.Items.Count; i++)
        {
            if (CLB_SHOW_HIDE.GetItemChecked(i))
            {
                if (f == 1)
                {
                    qry = CLB_SHOW_HIDE.Items[i].ToString();
                    this.DGV_FEATURE.Columns[qry].Visible = true;
                }
                if (f == 0)
                {
                    qry = CLB_SHOW_HIDE.Items[i].ToString();
                    f = 1;
                    this.DGV_FEATURE.Columns[qry].Visible = true;
                }
            }
            else
            {
                qry = CLB_SHOW_HIDE.Items[i].ToString();
                this.DGV_FEATURE.Columns[qry].Visible = false;
            }
        }
    }
...