2011-06-14 123 views
2

我花了整整一個下午的時間嘗試使用CODE BEHIND來做到這一點,但沒有成功,所以我需要一些C#代碼。GridView和DetailsView代碼隱藏更新DetailsView

基本上,我有一個GV和DV在主/關係。 GV顯示ID和名稱。如果我點擊GV行上的選擇,我想在DV中看到它的ID,名稱和地址。我知道如何在aspx文件中以聲明方式工作。但在C#代碼後面,我不知道如何在這個函數着手:

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName.Equals("Select")) 
    { 

    // PLEASE GIVE ME THE CODE HERE TO BIND THE DETAILSVIEW. THANKS! 
    // I am using a sqldatasource if it makes any difference 

    } 
} 

回答

4

這裏有一個通用的解決方案向您展示如何實現這一點,請注意,這個解決方案不是非常錯誤安全的,但我假設你會得到它的精神。請留言,如果有什麼不清楚的地方。

代碼隱藏:

protected void gv_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName == "Select") 
    { 
     GridViewRow selected = gv.Rows[Convert.ToInt32(e.CommandArgument)]; 
     List<ThatClass> cList = new List<ThatClass>(); 
     cList.Add(new ThatClass(selected.Cells[0].Text, selected.Cells[1].Text)); 
     dv.DataSource = cList; 
     dv.DataBind(); 
    } 
} 

標記:

<asp:GridView ID="gv" runat="server" AutoGenerateColumns="false" OnRowCommand="gv_RowCommand"> 
    <Columns> 
     <asp:BoundField DataField="A" HeaderText="A"/> 
     <asp:BoundField DataField="B" HeaderText="B" /> 
     <asp:CommandField ShowSelectButton="true" /> 
    </Columns> 
</asp:GridView> 

<asp:DetailsView runat="server" ID="dv"> 
</asp:DetailsView> 

FYI:我使用綁定列表中GV:

protected void Page_Load(object sender, EventArgs e) 
{ 
    List<ThatClass> cList = new List<ThatClass>(); 
    cList.Add(new ThatClass("123", "abc")); 
    cList.Add(new ThatClass("456", "def")); 
    gv.DataSource = cList; 
    gv.DataBind(); 
} 
+0

謝謝你這麼多@Dennis。這正是我需要開始重寫我的代碼! – user776676 2011-06-14 15:49:44