从选定的datagridview行获取数据以及哪个事件?

Sam*_*ore 38 c# datagridview winforms

我在Windows窗体上有一个DataGridView(Selectionmode:FullRowSelect)以及一些文本框,所以我想要做的是每当用户选择一行(可能是click或double_click)时,该行的内容必须显示在文本中箱,

我试过这个代码

private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
    MessageBox.Show("CEll Double_Click event calls");
    int rowIndex = e.RowIndex;
    DataGridViewRow row = dataGridView1.Rows[rowIndex];
    textBox5.Text = row.Cells[1].Value;
}

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    int rowIndex = e.RowIndex;
    DataGridViewRow row = dataGridView1.Rows[rowIndex];
    textBox5.Text = dataGridView1.Rows[1].Cells[1].Value.ToString();// row.Cells[1].Value;
}
Run Code Online (Sandbox Code Playgroud)

还有很多其他的文本框,但主要的问题是没有一个事件似乎被触发,我应该使用什么事件这样做,或者是否有一些我可能设置错误的datagrid属性?任何帮助,将不胜感激...:(

Val*_*ale 56

您可以使用SelectionChanged事件,因为您使用的是FullRowSelect选择模式.在处理程序内部,您可以访问SelectedRows属性并从中获取数据.例:

private void dataGridView_SelectionChanged(object sender, EventArgs e) 
{
    foreach (DataGridViewRow row in dataGridView.SelectedRows) 
    {
        string value1 = row.Cells[0].Value.ToString();
        string value2 = row.Cells[1].Value.ToString();
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)

您还可以遍历列集合而不是键入索引...


小智 13

您可以尝试此点击事件

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex >= 0)
    {
        DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex];
        Eid_txt.Text = row.Cells["Employee ID"].Value.ToString();
        Name_txt.Text = row.Cells["First Name"].Value.ToString();
        Surname_txt.Text = row.Cells["Last Name"].Value.ToString();
Run Code Online (Sandbox Code Playgroud)


小智 9

首先拿一个标签.将其可见性设置为false,然后在DataGridView_CellClick事件上写入此内容

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    label.Text=dataGridView1.Rows[e.RowIndex].Cells["Your Coloumn name"].Value.ToString();
    // then perform your select statement according to that label.
}
//try it it might work for you
Run Code Online (Sandbox Code Playgroud)