2010-10-11 2 views
0

У меня есть DataGridView и TextBox. Когда я нажимаю на ячейку DataGridView, значение должно быть скопировано в текстовое поле. Но это не всегда работает: оно работает только иногда.Значение datagridview в текстовом поле

Вот мой код:

private void gvProductos_CellContentClick(object sender, DataGridViewCellEventArgs e) 
{ 
    //DataGridViewRow row = new DataGridViewRow(); 

    //row = gvProductos.Rows[e.RowIndex]; 
    ////txtDescripcion.Text = string.Empty; 
    //txtDescripcion.Text = row.Cells[1].Value.ToString(); 

    txtDescripcion.Text = gvProductos.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString(); 
} 
+0

У вас есть ссылки/кнопки/LinkButton в вашей камере? Вам нужен элемент управления для запуска события! –

+0

@ user459057: CellContentClick запускается только при нажатии на часть содержимого ячейки, а не где-либо еще в ячейке. – JPReddy

ответ

1

Используйте CellClick событие. Он всегда работает.

private void dataGridView2_CellClick(object sender, DataGridViewCellEventArgs e) 
    { 
     if (dataGridView2.CurrentCell != null && dataGridView2.CurrentCell.Value != null) 
     textBox1.Text = dataGridView2.CurrentCell.Value.ToString(); 
    } 

Решение, которое у вас есть не работает, потому что CellContentClick срабатывает только при нажатии на содержательной части клетки. Если вы нажмете на другую область ячейки, где нет содержимого, она не будет запущена. Вот почему это событие не работает всегда. Попробуйте нажать на контент только тогда, когда вы это поймете.

0

можно сделать на стороне клиента. В то время как datagrid row-databound добавляет javascript-метод, который передает конкретный текст на клике. Таким образом, он будет работать быстрее, чем описанный выше метод, и возможно получить значение, которое в текстовом поле на стороне сервера Я использую скрытый летающий и присваивает то, что я должен передать в этом. стороны сервера код может быть, как это

protected void gvProductos_RowDataBound(object sender, GridViewRowEventArgs e) 
     { 
      if (e.Row.RowType == DataControlRowType.DataRow) 
      { 
       HiddenField lbl = (HiddenField)e.Row.FindControl("hdfAstID"); 
       e.Row.Attributes.Add("onclick", "addToTextBox('" + lbl.Value + "')"); 
      } 

     } 

На стороне клиента

function addToTextBox(Data) 
{ 
    document.getElementByID("<% textBox1.ClientID %>").value=Data; 
} 

Надеется, что это работает для вас

+0

Держитесь за Хари, он говорит о winforms, а не о веб-приложении. – JPReddy

0
private void grid_order_CellContentClick(
       object sender, 
       DataGridViewCellEventArgs e) 
{ 
    Textbox1.Text = Convert.ToString(Gridview.SelectedCells[0].Value);  
} 
0

CellContentClick работает для последующих выборов, но не заполняет текстовые поля, когда сначала отображается datagridview. Однако вы можете использовать отдельный метод для заполнения текстовых полей, проходящих в e.RowIndex. После отображения datagridview вызовите метод со значением строки начальной «записи».

  1. dgvExceptions.DataSource = ds.Tables [0];
  2. dgvExceptions.Columns [0] .HeaderText = "ID";
  3. dgvExceptions.Columns [0] .Width = 30;
  4. dgvExceptions.Columns [0] .DefaultCellStyle.Alignment =
  5. DataGridViewContentAlignment.MiddleRight;
  6. dgvExceptions.Columns [1] .Visible = false;
  7. dgvExceptions.Columns [2] .HeaderText = "Occured On";
  8. dgvExceptions.Columns [2] .Width = 70;
  9. dgvExceptions.Sort (dgvExceptions.Columns [2], ListSortDirection.Descending);
  10. dgvExceptions.Columns [3] .Visible = false;
  11. dgvExceptions.Columns [4] .Visible = false;
  12. dgvExceptions.Columns [5] .Visible = false;
  13. dgvExceptions.Columns [6] .Visible = false;
  14. dgvExceptions.Columns [7] .Width = 317;
  15. dgvExceptions.Columns [8] .Visible = false;
  16. dgvExceptions.Rows [0].Selected = true;
  17. SetUpDataGridView (0);
    18. 19.
  18. частная пустота dgvExceptions_CellContentClick (объект отправителя, DataGridViewCellEventArgs е)
  19. {
  20. SetUpDataGridView (e.RowIndex);
  21. } 24.
  22. частная пустота SetUpDataGridView (интермедиат р)
  23. {
  24. DataGridViewRow строка = dgvExceptions.Rows [р];
  25. txtExceptionId.Text = row.Cells [0] .Value.ToString();
  26. txtConnection.Text = row.Cells [1] .Value.ToString();
  27. txtExceptionType.Text = row.Cells [6] .Value.ToString();
  28. txtDateOccurred.Text = row.Cells [2] .Value.ToString();
  29. txtClass.Text = row.Cells [3] .Value.ToString();
  30. txtModule.Text = row.Cells [4] .Value.ToString();
  31. txtMethod.Text = row.Cells [5] .Value.ToString();
  32. txtMessage.Text = row.Cells [7] .Value.ToString();
  33. }
0

Я думаю, что вы хотите, чтобы очистить текстовое окно, прежде чем дать значению,

как этого

private void gvProductos_CellContentClick(object sender, DataGridViewCellEventArgs e) 
    { 
     if (dataGridView2.CurrentCell != null && dataGridView2.CurrentCell.Value != null) 
     { 
      txtDescripcion.Text = string.Empty; 
      textBox1.Text = dataGridView2.CurrentCell.Value.ToString(); 
     } 
    } 
Смежные вопросы