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

DataBoundItem はオブジェクトを返すため、Add_Edit のコンストラクター パラメーターをオブジェクト型に変更し、ナビゲーターを埋めるために使用される BindingSource に割り当てます。SelectedItem を直接設定することはできないため、その項目の BindingSource のインデックスを取得し、その Position プロパティを設定する必要があります。

public Add_Edit(object item) {
    InitializeComponent();

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