如何从DataGridViewRow填充文本框?

47

我在 Windows 窗体上有一个 DataGridViewSelectionmode: FullRowSelect)和一些文本框。我希望当用户单击或双击某一行时,该行的内容会显示在文本框中。

我尝试了这段代码:

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

还有很多其他的文本框,但主要问题是没有任何事件被触发。我应该使用哪个事件来解决这个问题,或者是DataGridView的某个属性设置错误了吗?


1
前往表单设计器并检查datagridview的Properties/Events。看到这里这些事件被绑定到了gridview。 - Talha
我确实在黄色闪电粗体图标下检查过了,这些事件都列在那里,并且有我上面提到的代码... - Samy S.Rathore
1
奇怪!设置断点并调试您的代码。 - Talha
2
иҜ·жЈҖжҹҘжӮЁзҡ„ DataGridView зҡ„ Enabled еұһжҖ§жҳҜеҗҰдёә TrueгҖӮ - Luis Quijada
@user1479153 当你无法直接查看代码和需要解决的问题时,很少有什么是显而易见的。不要忘记我们期待着帮助你。 - Luis Quijada
抱歉如果我冒犯了你,我并不是有意的......好吧,我进行了一些彻底的调试,似乎我的电脑出了点问题。我在表单上更改了一些控件,但在运行程序时它们没有反映出来..... - Samy S.Rathore
6个回答

69

如果您使用的是FullRowSelect选择模式,可以使用SelectionChanged事件。然后在处理程序内部,您可以访问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();
        //...
    }
}

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


但在我的情况下,DataGridView应该只显示一个列,即StudentName。但是当我在DataGridView上选择记录时,我应该使用其他输出控件来获取所有详细信息进行显示,例如姓名、RollNo、班级、地址等等...但是在数据库表中包含所有详细信息。请帮助我如何实现这一点? - Sanjeev4evr

22

你可以尝试这个点击事件

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

只是想指出,如果您手动或动态创建GridView列,则需要设置该列的“Name”属性才能使此方法起作用。 - cmartin

10

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

4
你应该检查你的设计文件。打开Form1.Designer.cs文件,找到这一行:
windows Form Designer Generated Code.  

展开此处,您将看到很多代码。因此,请检查datagridview1控件中是否存在此行,如果没有,则请添加。

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

我希望能对你有所帮助。

3

以下是简单的解决方案。这是vale解决方案的改进。

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。您可以扩展此功能,如果选择了两行以上,则会显示消息。


0

您可以使用SelectionChanged事件。 CurrentRow.DataBoundItem将提供绑定的项。

SelectionMode属性应该是完整行选择。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接