2017-02-12 10 views
0

У меня есть DataGridView на форму, которая, когда я нажимаю, дает мне индекс правильной строки/столбца щелкнул: enter image description hereКак получить правильный DataGridView индекс действительный строк/столбцов в MdiParent в C#

При нажатии на кнопку на проверить [третий столбец, первая строка, дает выше]. Но когда эта форма вызываются из родителей MDI, нажав на thesame третьего столбца, строка один (Проверка) дает следующее: enter image description here

Ниже зад код формы:

var result = new DAO().RetrieveAllProjects().Select(r => new { r.Name }).ToList(); 

dataGridView1.DataSource = result; 
DataGridViewButtonColumn btn = new DataGridViewButtonColumn(); 
btn.HeaderText = ""; 
btn.Text = "View/Edit"; 
btn.Name = "edit"; 
btn.UseColumnTextForButtonValue = true; 

DataGridViewButtonColumn btn2 = new DataGridViewButtonColumn(); 
btn2.HeaderText = ""; 
btn2.Text = "Verify"; 
btn2.Name = "verify"; 
btn2.UseColumnTextForButtonValue = true; 

dataGridView1.Columns.Add(btn); 
dataGridView1.Columns.Add(btn2); 

dataGridView1.Columns[0].Width = 290; 
dataGridView1.AutoSize = true; 
dataGridView1.CellClick += dataGridView1_CellClick; 

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    MessageBox.Show(string.Format("ColumnIndex:{0}, RowIndex: {1}", e.ColumnIndex, e.RowIndex));   
} 

И это вызывается из МДИ родителя таким образом:

projectsListForm pLF = new projectsListForm(); 
pLF.MdiParent = this; 
pLF.Show(); 

Как я могу убедиться, что правильная строка/столбец выделен на МДИ родителя

+0

Есть ли какой-то причине вы должны установить родительскую форму, 'MdiParent', поскольку это, похоже, проблема с индексированием столбцов в дочерней форме. Почему индексирование неверно, я не знаю. – JohnG

ответ

1

по какой-либо причине [s] при использовании MdiParent два цикла привязки данных происходят в dataGridView1 (событие DataGridView DataBindingComplete). Столбец «Имя» становится ненужным удаленным и добавленным (события DataGridView ColumnAdded и ColumnRemoved). Для того, чтобы остановить это поведение я отключил колонки автоматического поколения после седений DataSource:

dataGridView1.DataSource = ...; 
dataGridView1.AutoGenerateColumns = false; 

Более безопасный вариант для работы с колоннами по именам, а не по показателям