DataGridView первый столбец, первая строка, выбран на загрузке, я не хочу этого - PullRequest
21 голосов
/ 08 октября 2010

Таким образом, в основном всегда выбирается самый первый столбец в первой строке, я не могу найти способ его получить, чтобы в сетке не было выделенных ячеек.Любая помощь?

Ответы [ 12 ]

24 голосов
/ 25 февраля 2011

У меня с этим было немало проблем. У меня есть пользовательский элемент управления с DataGridView, который заполняется при загрузке приложения / формы. Кажется, что выбор первой строки происходит после того, как привязка данных завершена и сетка заполнена / визуализирована. Событие загрузки пользовательского элемента управления (и, по-видимому, также и загрузка формы) запускается до этого - поэтому вызов gridView.ClearSelection () или обнуление gridView.CurrentCell в этих событиях загрузки не имеет никакого эффекта.

То, что в итоге сработало для меня, - это вызов .ClearSelection () из события DataBindingComplete самого DataGridView . Это сработало как шарм.

19 голосов
/ 29 марта 2012

У меня была такая же проблема, и ничего не работало. Решением, которое работало для меня, было присвоение свойству «Tabstop» значения False и вызов метода ClearSelection () сразу после привязки данных.

4 голосов
/ 08 октября 2010

Установите для свойства 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 ...
    }
}
1 голос
/ 13 марта 2014

Вы должны вызвать: ClearSelection после события: DataBindingComplete

0 голосов
/ 01 февраля 2019
Event _MasterRowExpanded(object sender, CustomMasterRowEventArgs e)
GridView gv = (sender as GridView).GetDetailView(e.RowHandle, e.RelationIndex) as 
GridView;
gv.ClearSelection();
0 голосов
/ 18 декабря 2016

В большинстве случаев это вызвано небольшой ошибкой, возможно, datagridview установлено в групповом поле.Если групповых блоков больше, выбор остановится на первом групповом блоке, поэтому сохраняйте групповой блок по приоритетам.

0 голосов
/ 21 ноября 2016

У меня была такая же проблема в моем случае, вместо того, чтобы установить видимость первой строки в false. Было бы лучше установить значение GridColor, чтобы избежать риска для события SelectionChanged .

  1. Поместите dgv.ClearSelection () в Событие DataBindingComplete и установите для GridColor значение DataCridView BackColor.

  2. Установите для GridColor видимый цвет (например, серый) для вашего метода заполнения / события обжига.

0 голосов
/ 01 ноября 2015

Убедитесь, что вы не вызываете метод для загрузки данных из конструктора формы. Если вы вызываете это из form.load ()

также после загрузки datagridview сделайте это

DataGridView.Rows[0].Selected = false;
0 голосов
/ 14 июля 2015

У меня была такая же проблема, и я решил ее, переопределив событие OnPropertyChanged GridView

protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
{
  base.OnPropertyChanged(e);
  this.ClearSelection();
}
0 голосов
/ 26 февраля 2015

Я также хотел использовать DataGridView только для чтения, и в моем случае отдельный поток медленно получает данные и передает их в поток GUI через многопоточный список и таймер формы. При таком подходе поток GUI расширяет сетку данных по мере необходимости, позволяя просматривать.

С предложениями выше, выбор может быть скрыт, но ни один не может помешать сбросу ячейки, когда мой поток GUI вызывает dataGridView.Rows.Add () с выбором. Это включает в себя перехват событий для предотвращения выбора и отключение режима редактирования.

Я нашел поведение, которое хотел с

dataGridView.AllowUserToAddRows = false;

Теперь у меня есть динамически изменяемая асинхронно загружаемая сетка данных, доступная только для чтения.

Мне не понравилось решение BackgroundWorker, потому что прогресс является довольно обременительным для моей загрузки кода. Мне также не нравилось требование перестраивать новый DataTable при каждом обновлении сетки. Я не смог найти никаких подсказок по обновлению DataGridView с помощью одного DataTable, который создается, но, похоже, это должно быть возможно.

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