Ответ 1
У меня была такая же проблема, и ничего не работало. Решение, которое сработало для меня, это установить свойство "Tabstop" для False и вызвать метод ClearSelection() сразу после привязки данных.
Итак, в основном первый столбец в первой строке всегда выбран, я не могу понять, как это сделать, поэтому в gridview нет выделенных ячеек. Любая помощь?
У меня была такая же проблема, и ничего не работало. Решение, которое сработало для меня, это установить свойство "Tabstop" для False и вызвать метод ClearSelection() сразу после привязки данных.
У меня были проблемы с этим. У меня есть пользовательский элемент управления с DataGridView, который заполняется загрузкой приложения/формы. Выбор первой строки, по-видимому, происходит после завершения привязки данных, и сетка заполняется/отображается. Событие загрузки пользовательского управления (и, предположительно, формирует нагрузку) срабатывает до этого - поэтому вызов gridView.ClearSelection() или обнуление gridView.CurrentCell в этих событиях загрузки не имеет никакого эффекта.
Что, наконец, для меня работало, вызывало .ClearSelection() из события DataBindingComplete самого DataGridView. Это работало как прелесть.
Установите для свойства DGV CurrentCell
значение null после привязки данных к DGV:
dataGridView1.CurrentCell = null;
Обратите внимание, что это не предотвратит запуск DGV-событий, связанных с отбором строк и ячеек; вам нужно будет добавить выбранные проверки строк или ячеек на события RowEnter, примерно так:
private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e) {
if (dataGridView1.SelectedRows.Count == 1) {
// Do stuff since a row is actually selected ...
}
}
Вы должны вызвать: ClearSelection после события: DataBindingComplete
после того, как ограничивающие данные просто вызовет
dataGridView.ClearSelection();
Я думаю, вы пытались вызвать его перед установкой данных в dataGrindView, если вы даже когда-либо пробовали его
ЕСЛИ я понимаю Q. Это предотвращает показ ячейки после привязки данных. Таким образом, задний цвет остается белым. Вы также можете редактировать столбцы и устанавливать их там.
DataGridView.DefaultCellStyle.SelectionBackColor = DataGridView.DefaultCellStyle.BackColor;
Мне также нужен DataGridView только для чтения, и в моем случае отдельный поток медленно получает данные и передает их в поток GUI через многопоточный список и таймер формы. В этом подходе поток GUI расширяет сетку данных при необходимости, позволяя просматривать.
С предложениями выше выбор может быть скрыт, но никто не может помешать ячейке получить reset, когда мой поток GUI вызывает dataGridView.Rows.Add() с выделенным. Это включает в себя подключение событий для предотвращения выбора и отключение режима редактирования.
Я нашел поведение, которое я хотел с помощью
dataGridView.AllowUserToAddRows = false;
Теперь у меня есть динамически настроенная асинхронно загруженная сетка данных, доступная только для чтения.
Мне не понравилось решение BackgroundWorker, потому что прогресс - это большая нагрузка на мой код загрузки. Мне также не нравилось требование перестроить новый DataTable при каждом обновлении сетки. Я не мог найти никаких подсказок по обновлению DataGridView с помощью одного DataTable, который создается, но похоже, что это должно быть возможно.
Убедитесь, что вы не вызываете метод для загрузки данных из конструктора формы. Если вы вызываете его из формы .load()
также после загрузки datagridview выполните это
DataGridView.Rows[0].Selected = false;
У меня была такая же проблема в моем случае, вместо того, чтобы установить видимость первой строки на false. Было бы лучше установить значение GridColor, чтобы избежать риска при событии SelectionChanged.
Поместите dgv.ClearSelection() в событие DataBindingComplete и установите GridColor в BackColor DataGridView.
Установите GridColor на видимый цвет (например: серый) на ваш метод заполнения/запуска.
В большинстве случаев это вызвано небольшой ошибкой, возможно, datagridview
устанавливается в поле группы. Если групп больше, тогда выбор будет остановлен в первом групповом поле, поэтому держите групповой блок по приоритету.
У меня была такая же проблема, и я решил ее переопределить событие OnPropertyChanged в GridView
protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
{
base.OnPropertyChanged(e);
this.ClearSelection();
}
Event _MasterRowExpanded(object sender, CustomMasterRowEventArgs e)
GridView gv = (sender as GridView).GetDetailView(e.RowHandle, e.RelationIndex) as
GridView;
gv.ClearSelection();