我有一个DataGridView和一个TextBox。当我单击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 :(得分: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。如果单击单元格中没有内容的其他区域,则不会被触发。这就是为什么这个事件总是不起作用的原因。尝试点击内容然后你才会意识到。
答案 1 :(得分:0)
可以在客户端进行。虽然数据网格行数据绑定发生时添加了一个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;
}
希望这对你有用
答案 2 :(得分:0)
private void grid_order_CellContentClick(
object sender,
DataGridViewCellEventArgs e)
{
Textbox1.Text = Convert.ToString( Gridview.SelectedCells[0].Value);
}
答案 3 :(得分:0)
CellContentClick适用于后续选择,但不会填充首次显示datagridview时的文本框。但是,您可以使用单独的方法填充文本框,并传入e.RowIndex。显示datagridview后,使用初始“record”的行值调用方法。
答案 4 :(得分: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();
}
}