基于行选择的Datagridview SelectionChanged事件

8

我在一个TabPage上有一个DataGridView。当用户点击一行时,会出现第二个DGV。每一行都与自己的填充数据的DGV相关联。我希望当用户从一行转移到另一行时,DataGridView也会发生变化。到目前为止,我尝试了SelectionChanged事件,但我不希望在用户单击同一行中的其他单元格时重新加载DGV。非常感谢您的任何帮助。

void dgv1_CellClick(object sender, DataGridViewCellEventArgs e)           
{    
    int rowIndex = dgv1.Rows[e.RowIndex].Index;

    if (dgv1 == null)
        return;
    if (dgv1.Rows[e.RowIndex].Cells[rowIndex].Selected == true);
    {
        dgv2.Size = new Size(dgv2.Width + 800, dgv2.Height);
        dgv2.Location = new Point(0, 500);   

        tp.Controls.Add(dgv2);

        Console.WriteLine("Row clicked");
    }
}

-Tatiana


1
你可以创建一个属性来表示当前选择的行,然后检查新选择的行是否相同吗? - dursk
实际上,当前选定行有一个属性,即dgv.CurrentRow,问题在于如何检查新选择的行。其次,CurrentRow是DataGridViewRow类型,无法转换为int类型,因此在尝试将其与任何int进行比较时会出现错误。 - Tatiana Laurent
1
DataGridViewRow有一个Index属性,所以它应该是dgv.CurrentRow.Index。MSDN:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.datagridviewrow_properties%28v=vs.110%29.aspx - dursk
在rowenter和rowleave事件中使用e.rowIndex。它们会在你向上或向下导航到一行时触发(不需要进入该单元格/行的编辑模式)。注意,如果使用dgv.currentRow,它将给出先前的行,这可能会让你感到困惑。请确保使用来自事件的e.rowIndex。 - bh_earth0
2个回答

15
    int curRow = -1;

    private void dgv1_SelectionChanged(object sender, EventArgs e)
    {
        if (dgv1.CurrentRow.Index != curRow)
        {
            curRow = dgvPatientDetail.CurrentRow.Index;        
        }

8
当点击同一行时,设置dgv1.SelectMode = FullRowSelect;不应触发SelectionChanged事件。 - Mario The Spoon

3
我知道这篇文章有些旧了,但是对于其他读者: 设置.. DataGridView1.FullRowSelect = true 可以解决这个问题。

3
你的意思是 dgv1.SelectionMode = FullRowSelect,这在之前已经提到过了吗? - Wowdude

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