Запрет DataGridView от выбора первого элемента - PullRequest
2 голосов
/ 09 июля 2009

У меня есть WinForm DataGridView, который, когда я заполняю его данными, первый элемент выбирается по умолчанию. Я не хочу, чтобы это происходило при выборе элемента, когда происходит событие и выполняется какой-то код. Решения, которые у меня есть для этого, - отцепить-привязать-повторно подключить событие или иметь флаг, который изменяется при первом запуске события после новой привязки данных. Однако мне было интересно, есть ли что-нибудь более элегантное.

Ответы [ 5 ]

2 голосов
/ 06 марта 2013

У меня была похожая проблема (но я не использую событие SelectionChanged), и это работает для меня:

В конструкторе после установки привязки добавьте обработчик к событию DataBindingComplete:

dgvCommandos.DataSource = systeemCommandos; // = my List<> of objects
dgvCommandos.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(dgvCommandos_DataBindingComplete);

Обработчик:

void dgvCommandos_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    dgvCommandos.ClearSelection();
}

Если вы намереваетесь выбрать строку (например, после добавления / вставки нового объекта), просто установите:

dgvCommandos.Rows[insertPos].Selected = true;

Используя это в качестве основы, я думаю, что можно обрабатывать другие события, чтобы реагировать на выбор пользователя. Надеюсь, это поможет.

2 голосов
/ 10 июля 2009

Как насчет (извините, VB.NET, но я уверен, что вы можете конвертировать):

myGrid.ClearSelection()
2 голосов
/ 09 июля 2009

У меня нет приложения winforms, открытого для тестирования, но мне любопытно, есть ли у вас промежуточный BindingSource между вашими данными и представлением данных? Если так, что если вы установите

List<Data> data = GetMyData();
BindingSource myBindingSource = new BindingSource();
myBindingSource.DataSource = data;
myBindingSource.position = -1;
myGrid.DataSource = myBindingSource;

Я часто нахожу полезным вмешать объект BindingSource между данными и пользовательским интерфейсом. Кажется, это помогает решить множество случайных проблем, хотя я больше привык использовать объекты DataTable в качестве данных, а не объекты List <>.

0 голосов
/ 01 апреля 2015

Довольно поздно, но единственный способ заставить меня работать (многие текстовые, комбинированные и т. Д. Привязаны к моему DataGridView через BindingSource):

После инициализации привязок данных к моим элементам управления и загрузки данных в DataGridView мне пришлось приостановить привязку

bindingSource.SuspendBinding();

В моем событии RowHeaderMouseClick я проверил, приостановлена ​​ли привязка. Если это так, просто возобновите это:

if(bindingSource.IsBindingSuspended)
    bindingSource.ResumeBinding();

Таким образом, я могу завершить загрузку и привязку данных (в моем случае сортируемый BindingList), показать данные пользователю, но без выбранной записи.

Надеюсь, это поможет хоть кому-нибудь!

0 голосов
/ 09 июля 2009

Используйте что-то вроде следующего примера:

        dataGridView.Columns[0].Selected = false;
        dataGridView.Rows[0].Selected = false;
        dataGridView.Rows[0].Cells[0].Selected = false;

Конечно, проверьте, есть ли строки, столбцы и так далее. Это просто пример.

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