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

时间:2012-06-29 11:19:16

标签: c# winforms datagridview

我在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;
}

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

6 个答案:

答案 0 :(得分:51)

您可以使用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();
        //...
    }
}

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

答案 1 :(得分:12)

您可以尝试此点击事件

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();

答案 2 :(得分:7)

首先拿一个标签。 将其可见性设置为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

答案 3 :(得分:4)

您应该检查您的设计器文件。打开Form1.Designer.cs和
找到这一行:windows Form Designer生成的代码。
展开这个,你会看到很多代码。因此,如果没有放置它,请检查datagridview1控件内是否存在此行。

this.dataGridView1.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellClick); 

我希望它有所帮助。

答案 4 :(得分:3)

简单的解决方案如下。这是来自谷的解决方案的改进。

private void dgMapTable_SelectionChanged(object sender, EventArgs e) 
{
    int active_map=0;
    if(dgMapTable.SelectedRows.Count>0)
        active_map = dgMapTable.SelectedRows[0].Index;
    // User code if required Process_ROW(active_map);
}

对于其他读者,请注意以上代码工作FullRowSelect应该使用datagridview的选择模式。如果选择了两行以上,您可以对此进行扩展以提供消息。

答案 5 :(得分:0)

您可以使用 SelectionChanged 事件。 CurrentRow.DataBoundItem 将给出绑定项。

SelectionMode 属性应该是全行选择。

var item = ([CastToBindedItem])dataGridLocations.CurrentRow.DataBoundItem; tbxEditLocation.Text = item.Name;