2014-08-27 6 views
0

В моей форме у меня есть вкладка с пятью вкладками. На каждой вкладке есть datagridview, привязанный к базам данных. Все данные заполнены правильно, но событие CellContentClick работает только на вкладке frist. Я пытаюсь retrive содержимого на выбранной ячейке с этим кодом:C# datagridview в tabpanel

//fristtabpag and datagrid1 
private void dgw1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
{ 
    text1.Text = dgw1.SelectedRows[0].Cells[0].Value.ToString(); 
} 
//second tabpag and datagrid1 
private void dgw2_CellContentClick(object sender, DataGridViewCellEventArgs e) 
{ 
    text1.Text = dgw2.SelectedRows[0].Cells[0].Value.ToString(); 
} 
//other.... 

И это работает только на Фристом TabPage.

Я использую тот же код, который правильно исправлен для другой страницы, но я получаю сообщение об ошибке для индекса. Как это исправить?

+0

пожалуйста, поделитесь своим кодом –

+0

исправил его на вопросительном столбе. – devilkkw

+0

_I использовать тот же код, который правильно установлен для других page_. Нет, наверное, нет. Удостоверьтесь, что у вас есть 5 различных методов каждый __hooked__ до событий CellContentClick из 5 DGV. Также обратите внимание, что событие CellContentClick делает то, что говорит его имя: он срабатывает только тогда, когда __content__ не при нажатии на пустые части ячейки. – TaW

ответ

1

Вы можете попробовать использовать DataGridViewCellEventArgs так:

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
    {      
     DataGridView dgv = sender as DataGridView;         
     text1.Text = dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.SafeToString(); 
    } 

В качестве альтернативы вы можете попробовать использовать CurrentCellChanged событие и получить значение из свойства CurrentCell:

private void dataGridView1_CurrentCellChanged(object sender, EventArgs e) 
    { 
     DataGridView dgv = sender as DataGridView; 
     if (dgv.CurrentCell != null) 
     { 
      text1.Text = ((DataGridView)sender).CurrentCell.Value.SafeToString(); 
     } 
    } 

(Метод SafeToString() это простой метод расширения, все, что он делает, это проверить, является ли объект нулевым до вызова ToString(). Если объект имеет значение null, он возвращает пустую строку)

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

+0

очень полезно, большое вам спасибо. работает отлично – devilkkw