Как отобразить значение строки сетки в текстовом поле при событии SelectionChanged C #?

#c# #winforms #gridview #datagridview

#c# #winforms #просмотр сетки #datagridview

Вопрос:

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

  private void CRUD_SelectionChanged(object sender, EventArgs e)
    {

        txtBoxID.Text = CRUD.SelectedRows[0].Cells[0].Value.ToString();
        txtBoxStates.Text = CRUD.SelectedRows[1].Cells[1].Value.ToString();
        txtBoxName.Text = CRUD.SelectedRows[2].Cells[2].Value.ToString();
        txtBoxAddress.Text = CRUD.SelectedRows[3].Cells[3].Value.ToString();
        txtBoxCenter.Text = CRUD.SelectedRows[4].Cells[4].Value.ToString();
        txtBoxCity.Text = CRUD.SelectedRows[5].Cells[5].Value.ToString();
    }
  

Комментарии:

1. Как выглядят ваши данные в CRUD? Какое поведение вы видите? Получаете ли вы какие-либо исключения?

2. @FalcoGer мое имя в GridView — CRUD, и это просто записи обычного пользователя

3. мне кажется странным, что вы хотите использовать данные из разных строк и столбцов. вы уверены, что это то, что вы хотите?

4. @FalcoGer Братан, я просто хочу щелкнуть по строке, и это должно отобразить все значения строк в текстовых полях. Я что-то делаю не так.

5. Это winform? Пожалуйста, добавьте точный тег.

Ответ №1:

Вы индексируете выбранные строки. если у вас меньше 6 выбранных строк, то вы выйдете за границы. Вероятно, вы хотите извлекать данные только из одной строки. Проверьте, выбрана ли только одна строка, а затем используйте индекс 0. Убедитесь, что вы установили CRUD.MultiSelect = false

В качестве альтернативы используйте CRUD.CurrentRow который когда-либо даст вам только одну строку.

Form.Designer.cs:

 this.CRUD.SelectionChanged  = new System.EventHandler(this.CRUD_SelectionChanged);
  

Form.cs:

 private void CRUD_SelectionChanged(object sender, EventArgs e)
{
    txtBoxID.Text = CRUD.CurrentRow.Cells[0].Value.ToString();
    txtBoxStates.Text = CRUD.CurrentRow.Cells[1].Value.ToString();
    txtBoxName.Text = CRUD.CurrentRow.Cells[2].Value.ToString();
    txtBoxAddress.Text = CRUD.CurrentRow.Cells[3].Value.ToString();
    txtBoxCenter.Text = CRUD.CurrentRow.Cells[4].Value.ToString();
    txtBoxCity.Text = CRUD.CurrentRow.Cells[5].Value.ToString();
}