如何根据外部gridview选择填充内部gridview(ASP.NET / C#)

时间:2010-04-05 16:32:27

标签: c# asp.net gridview nested objectdatasource

我有2个GridView,InnerGridView嵌套在我的OuterGridView的TemplateField中。 每个GridView都有一个ObjectDataSource(ODS)。我希望InnerGridView显示唯一的数据 到OuterGridView中列出的GroupName。我已经谷歌搜索了几个星期, 看到基于RowDataBound和ODS选择事件的各种想法。

我不认为RowDataBound是答案,因为InnerGridView ODS的Selecting事件 在为OuterGridView调用RowDataBound时已经调用过。

所以,我需要向ODS发送一个参数给InnerGridView:

protected void ProductDataSource_Selecting( object sender, ObjectDataSourceSelectingEventArgs e ) {
        e.InputParameters["productGroup"] = <here I need to access the GroupName from the OuterGridView>;
}

注意:此方法分配给InnerGridView ODS的Selecting事件。

我的问题是:当我处理InnerGridView时,如何从OuterGridView访问GroupName。 这是一个不起作用的例子:OuterGridView.SelectedRow.FindControl(“GroupName”).ToString();

我听说可以通过搜索某个层次结构从Selecting事件中找到任何控件。 但我不知道如何使用“e”或“sender”parms访问该层次结构。 如果我能找到各种对象和控件的解释......以及它们具有有效范围的位置 以及他们如何被访问...这将是有帮助的。

非常感谢,保罗

3 个答案:

答案 0 :(得分:0)

如果您将发送方对象强制转换为gridview对象,那么请使用此处的SelectedRow并获取组名?

答案 1 :(得分:0)

如果要将内部GridView与外部GridView的GroupName绑定,请执行以下步骤

1)if(!IsPostBack)绑定外部GridView。 2)在外部GridViews RowDataBound事件中通过检查条件查找内部GridView   if(e.Row.RowType == DataControlRowType.DataRow)     {        DataRowView drv =((DataRowView)e.Row.DataItem);        GridView InnerGridView =(GridView)e.Row.FindControl(“InnerGridView”);        if(InnerGridView!= null)          {               string GroupName = drv [“GroupName”]; //获取GropName。               InnerGridView.DataSource =“查询WRT组名”;               InnerGridView.DataBind();          }     }

答案 2 :(得分:0)

希望以下帮助

ASPX页面:

    <asp:ObjectDataSource ID="ODS1" runat="server"></asp:ObjectDataSource>
    <asp:GridView ID="GV1" runat="server" DataKeyNames="productGroup" 
        onrowdatabound="GV1_RowDataBound">
        <Columns>
            <asp:TemplateField>

                <ItemTemplate>
                    <asp:ObjectDataSource ID="ODS2" runat="server">
                    </asp:ObjectDataSource>
                    <asp:GridView ID="GV2" runat="server">
                    </asp:GridView>
                </ItemTemplate>

            </asp:TemplateField>
        </Columns>
    </asp:GridView>

代码背后:

protected void GV1_RowDataBound(object sender, GridViewRowEventArgs e)
{
      if(e.Row.RowType == DataControlRowType.DataRow)
      {
         string productgroup = ((GridView)sender).DataKeys[e.Row.RowIndex]["productGroup"].ToString();
         ObjectDataSource objDS = (ObjectDataSource)e.Row.FindControl("ODS2");
         objDS.SelectParameters["productGroup"].DefaultValue = productgroup;
      }

}

请注意使用数据键来保存产品组详细信息。

显然,您需要配置对象数据源,并根据需要将它们连接到网格视图。

这是使用SQL数据源从this article概述嵌套网格视图改编的,但页面生命周期应该相同。