2012-09-21 76 views
0

我有一個datagridview顯示來自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; 
    } 

在此先感謝

回答

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); 
} 
相關問題