Имам 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), да покажа данните на потребителя, но без да е избран запис.
Надявам се това да помогне поне на никого!