GridView和DetailsView代码后面更新DetailsView

时间:2011-06-14 00:09:53

标签: c# asp.net gridview code-behind detailsview

我花了整个下午尝试使用CODE BEHIND做这件事但没有成功,所以我要求一些C#代码。

基本上,我在主/细节关系中有一个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

    }
 }

1 个答案:

答案 0 :(得分: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>

仅供参考:我使用List绑定了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();
}