DataGridView获取行值

时间:2015-10-27 01:19:25

标签: c# datagridview

我正在尝试获取我单击的行的单元格值。

这是我的代码..

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        txtFullName.Text = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();
        txtUsername.Text = dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString();
        txtPassword.Text = dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString();
    }

工作正常..但是当我点击行(UserID的左侧)和用户ID列时它不起作用...当我点击列标题时它也会给我一个错误。我该如何修复该错误,并希望它也点击row和userid列。

enter image description here

3 个答案:

答案 0 :(得分:4)

您使用的是错误的事件:试试这个

    private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
    {
        if (e.RowIndex > -1)
        {
            var val = this.dataGridView1[e.ColumnIndex,  e.RowIndex].Value.ToString();
        }
    }

答案 1 :(得分:2)

使用SelectionChanged的{​​{1}} eventhandler和CurrentRow属性,这些属性专为您的目的而设计

DataGridView

并将void DataGridView1_SelectionChanged(object sender, EventArgs e) { DataGridView temp = (DataGridView)sender; if (temp.CurrentRow == null) return; //Or clear your TextBoxes txtFullName.Text = dataGridView1.CurrentRow.Cells[0].Value.ToString(); txtUsername.Text = dataGridView1.CurrentRow.Cells[2].Value.ToString(); txtPassword.Text = dataGridView1.CurrentRow.Cells[3].Value.ToString(); } 设置为SelectionMode

FullRowSelection

答案 2 :(得分:0)

为避免点击列标题时出错,您必须检查e.RowIndex是否为0或更多:

void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex == -1) { return; }
    txtFullName.Text = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();
    txtUsername.Text = dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString();
    txtPassword.Text = dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString();
}

要在点击行标题上设置事件,您必须向RowHeaderMouseClick事件注册事件处理程序。

dataGridView1.RowHeaderMouseClick += dataGridView1_RowHeaderMouseClick;