在datagridview和windows窗体之间进行通信

时间:2012-09-21 12:43:22

标签: c# datagridview

我有一个datagridview,显示来自mysql数据库的数据。我还有一个显示相同信息的表单,但此表单使用绑定导航器来显示每条记录。我希望当我双击datagridview中的一行时,会显示带有相关行的绑定导航器表单。我在网上看到了一些代码,它将一个参数传递给了表单的构造函数,但这对我没用,这是我到目前为止在datagridview表单上的内容。

if (this.dataGridView1.CurrentCell != null)
        { 
            DataGridViewRow r = dataGridView1.CurrentRow;
            Add_Edit ae = new Add_Edit(r);
            ae.Show();
        }

这是在这个绑定导航器表单

private DataGridViewRow row;    
    public Add_Edit(DataGridViewRow row)
    {

        InitializeComponent();
        this.row = row;
    }

提前致谢

1 个答案:

答案 0 :(得分:0)

您不应该将DataGridViewRow传递给其他表单,因为它不应该知道您正在使用DataGridView(但这是一个高级编程主题)。请改用绑定到DataGridViewRow的对象。

private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e) {
    object item = dataGridView1.Rows[e.RowIndex].DataBoundItem;
    Add_Edit ae = new Add_Edit(item);
    ae.Show();
}

将Add_Edit的构造函数参数更改为类型对象,因为DataBoundItem将返回一个,并将其分配给用于填充导航器的BindingSource。因为您无法直接设置SelectedItem,所以必须获取该项的BindingSource索引并设置它的Position属性。

public Add_Edit(object item) {
    InitializeComponent();

    bindingSource1.Position = bindingSource1.IndexOf(item);
}