0

我有一个显示来自 mysql 数据库的数据的 datagridview。我还有一个显示相同信息的表单,但此表单使用绑定导航器来显示每条记录。我希望当我双击 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;
    }

提前致谢

4

1 回答 1

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 的构造函数参数更改为 object 类型,因为 DataBoundItem 将返回一个,并将其分配给用于填充导航器的 BindingSource。因为您不能直接设置 SelectedItem,所以您必须获取该项目的 BindingSource 索引并设置它的 Position 属性。

public Add_Edit(object item) {
    InitializeComponent();

    bindingSource1.Position = bindingSource1.IndexOf(item);
}
于 2012-09-21T13:18:43.397 回答