Невозможно выбрать строки в представлении данных - PullRequest
1 голос
/ 26 мая 2011

У меня есть метод, который выбирает строки в сетке данных и изменяет значение checkboxcolumn:

foreach (DataGridViewRow gridRow in dataGridView1.Rows)
            {
                if (_selectedIDs != null)
                    foreach (long id in _selectedIDs)
                    {

                        gridRow.Selected = false;
                        if ((long)((DataRowView)gridRow.DataBoundItem)["ObjectD"] == id)
                            gridRow.Selected = true;
                    }

                if (_checkedIDs != null)
                    foreach (long id in _checkedIDs)
                    {

                        ((DataRowView)gridRow.DataBoundItem)["Choosen"] = 0;
                        if ((long)((DataRowView)gridRow.DataBoundItem)["ObjectD"] == id)
                            ((DataRowView)gridRow.DataBoundItem)["Choosen"]=true;
                    }
            }
            dataGridView1.Refresh();

Когда я отлаживаю этот код, я вижу, что он входит в строки

gridRow.Selected = true;

и

((DataRowView)gridRow.DataBoundItem)["Choosen"]=true;

и в QuickWatch я вижу, что свойства этих строк изменены.

Но после выполнения этого кода у меня остается только одна выбранная строка

Кто-нибудь знает, что не так с этим кодом?

Ответы [ 2 ]

2 голосов
/ 26 мая 2011

В дополнение к MultiSelect вы можете убедиться, что класс, к которому вы привязываете данные, реализует интерфейс INotifyPropertyChanged.
Вы также можете установить selected = false перед началом цикла, или вы будете перезаписывать свой выбор каждый раз ...

        foreach (DataGridViewRow gridRow in dataGridView1.Rows)
        {
            if (_selectedIDs != null)
                // *****
                gridRow.Selected = false;
                // *****
                foreach (long id in _selectedIDs)
                {

                    if ((long)((DataRowView)gridRow.DataBoundItem)["ObjectD"] == id)
                        gridRow.Selected = true;
                }

            if (_checkedIDs != null)
                foreach (long id in _checkedIDs)
                {

                    ((DataRowView)gridRow.DataBoundItem)["Choosen"] = 0;
                    if ((long)((DataRowView)gridRow.DataBoundItem)["ObjectD"] == id)
                        ((DataRowView)gridRow.DataBoundItem)["Choosen"]=true;
                }
        }
1 голос
/ 26 мая 2011

Убедитесь, что для свойства DataGridView.MultiSelect установлено значение true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...