/ / Предотвратяване на DataGridView от избора на първия елемент - .net, winforms, datagridview

Предотвратяване на DataGridView от избора на първия елемент - .net, winforms, datagridview

Имам WinForm DataGridView, че когато азя попълва с данни Първият елемент е избран по подразбиране. Не искам това да се случи, когато е избран елемент, събитие се задейства и някой код се изпълнява. Решенията, които имам за това, е да unhook-bind-rehook събитието или да има флаг, който се променя при първото събитие пожари след нова база данни.Въпреки това се чудех дали има нещо малко по-елегантно.

Отговори:

2 за отговор № 1

Аз нямам отворено приложение, което да тества, но аз съм любопитен, ако имате интерфейс BindingSource между вашите данни и datagridview? Ако е така, какво ще стане, ако зададете

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

Често ми е полезно да се намесвамОбект BindingSource между данните и потребителския интерфейс. Изглежда, че помага да се поправят много случайни проблеми, въпреки че съм по-навик да използвам обектите на DataTable като данни, а не като <> обекти.


2 за отговор № 2

Какво да кажем (съжалявам, VB.NET, но аз съм сигурен, че бихте могли да конвертирате):

myGrid.ClearSelection()

2 за отговор № 3

Имах подобен проблем (но не използвам събитието "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;

Като използвам това като основа, мисля, че е възможно да се справя с други събития, за да реагира при избора на потребителя. Надявам се това да помогне.


0 за отговор № 4

Използвайте нещо като следния пример:

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

Разбира се, проверете дали има редове, колони и т.н. Това е само пример.


0 за отговор № 5

Доста късно, но само по начина, по който го работих за мен (много текстови полета, ComboBoxes и т.н., свързани с моя DataGridView чрез BindingSource):

След като инициализирах DataBindings към моите контроли и зареждах данните в DataGridView, трябваше да прекратя връзката

bindingSource.SuspendBinding();

В моето събитие RowHeaderMouseClick проверих дали връзката е спряна. Ако е така, просто го възобновете:

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

По този начин мога да завърша натоварването и свързването на данните (в моя случай - BindingList), да покажа данните на потребителя, но без да е избран запис.

Надявам се това да помогне поне на никого!