43

我在 Windows 窗体上有一个 DataGridView (Selectionmode: 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;
}

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

4

6 回答 6

62

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

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

于 2012-07-02T12:11:17.557 回答
18

你可以试试这个点击事件

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();
于 2014-06-01T15:09:05.857 回答
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
于 2013-05-14T13:02:05.653 回答
4

您应该检查您的设计器文件。打开 Form1.Designer.cs 并找到这一行:

windows Form Designer Generated Code.  

展开这个,你会看到很多代码。所以检查这条线是否存在于datagridview1控件中,如果没有放置它。

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

我希望它有所帮助。

于 2013-02-01T05:26:09.880 回答
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 的工作选择模式。如果选择的行超过两行,您可以扩展它以提供消息。

于 2014-11-28T08:16:30.900 回答
0

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

SelectionMode 属性应该是全行选择。

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

于 2021-06-20T03:54:02.143 回答