locked
Bind Nested UserControl with a GridView to a parent GridView in an event RRS feed

  • Question

  • User1824003892 posted

    I found this SWEET piece of code that promise to simplify my Nested GridView I have a project that's making use of this strategy quite a bit (Nested GridView). It places the nested grid in a UserControl. My question is how to bind the GridView in the UserControl to the IList(Of T) DataSource. I'm thinking that I should Raise the event from within the DataBound event but i'm not sure. Your help would be much appreciated.

    <asp:GridView ID="gvJobs" runat="server" DataKeyNames="Id,JobNumber,StartDate" OnRowDataBound="gvJobs_RowDataBound">
    <Columns>
    <asp:TemplateField HeaderText="Job ID" InsertVisible="false">
    <ItemTemplate>
    <asp:Label ID="lblJobID" Text='<%# Eval("Id") %>' runat="server" />
    </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField>
    <ItemTemplate>
    <div id="div<%# Eval("id") %>">
    <uc1:EZPassesControl runat="server" ID="EZPassesControl1" Data='<%# Container.DataItem %>' />
    </div>
    </ItemTemplate>
    </asp:TemplateField>
    </Columns>
    </asp:GridView>

    Protected Sub gvJobs_RowDataBound(sender As Object, e As GridViewRowEventArgs)
    This Is how it gets done when the GridView Is nested directly in the Gridview
    Dim row As GridViewRow = e.Row
    Dim gv As GridView = New GridView()
    gv = CType(row.FindControl("GridView2"), GridView)
    gv.DataSource = ChildDataSource((CType(e.Row.DataItem, DataRowView))("startDate").ToString(), sortStr)
    gv.DataBind()

    This Is a sketchy code I tried in but it did'nt work.
    Dim gv As GridView = New GridView()
    gv = CType(row.FindControl("EZPassesControl1").FindControl("gvEZPasses"), GridView)
    gv.DataSource = ChildDataSource((CType(e.Row.DataItem, DataRowView))("startDate").ToString(), strSort)
    gv.DataBind()
    End Sub



    Thursday, May 14, 2020 1:55 PM

Answers

  • User-719153870 posted

    Hi Ruffone,

    Do you want to operate the GridView nested in userControl inside parent GridView control, for example to set its data source. If so, you can refer to the following example:

    demo.aspx:

    Hi,  Ruffone
    
            Do you want to operate the GridView nested in userControl inside parent GridView control, for example to set its data source. If so, you can refer to the following example:
    demo.aspx
    <%@ Register TagPrefix="uc" TagName="UserInfoBoxControl" Src="~/uControlDemo.ascx" %>
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="demo_Form" runat="server">
            <asp:GridView runat="server" ID="demoGV" AutoGenerateColumns="false" OnRowDataBound="demoGV_RowDataBound">
                <Columns>
                    <asp:TemplateField HeaderText="ID">
                        <ItemTemplate>
                            <asp:Label runat="server" Text='<%# Eval("id") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="userControl">
                        <ItemTemplate>
                            <div style="height: 150px; width: 300px;">
                                <uc:UserInfoBoxControl runat="server" ID="uControl"></uc:UserInfoBoxControl>
                            </div>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="TXT">
                        <ItemTemplate>
                            <asp:Label runat="server" Text='<%# Eval("txt") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
        </form>
    </body>
    </html>
    

    demo.aspx.cs

             demo.aspx.cs
    public partial class Demo : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    String conStr = "Server=.;Database=TestDB;Trusted_Connection=True;";
                    using (SqlConnection conn = new SqlConnection(conStr))
                    {
                        DataTable dt = new DataTable();
                        String sql = "select id,txt from demoDB";
                        SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
                        sda.Fill(dt);
                        demoGV.DataSource = dt;
                        demoGV.DataBind();
                    }
                }
    
            }
    
            protected void demoGV_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                String conStr = "Server=.;Database=TestDB;Trusted_Connection=True;";
                using (SqlConnection conn = new SqlConnection(conStr))
                {
                    DataTable dt = new DataTable();
                    String sql = "select id,txt from demoDB"; 
                    SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
                    sda.Fill(dt);
    
                    uControlDemo uControl = (uControlDemo)e.Row.FindControl("uControl");
                    if (uControl != null) {
                        GridView row = (GridView)uControl.FindControl("uc_GridView");
                        row.DataSource = dt;
                        row.DataBind();
                    }
                }
            }
        }
    

    uControlDemo.ascx

    <asp:TextBox runat="server" ID="uc_txt"></asp:TextBox>
    <asp:GridView ID="uc_GridView" runat="server" AutoGenerateColumns="false">
        <Columns>
            <asp:TemplateField HeaderText="uc_ID">
                <ItemTemplate>
                    <asp:Label runat="server" Text='<%# Eval("id") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="uc_TXT">
                <ItemTemplate>
                    <asp:Label runat="server" Text='<%# Eval("txt") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
    

    Result:

    If this is not the result you expect, please clearly state what you want to do and provide more information, mainly including:

    • Page sample code
    • userControl

    Hope it can help you.

    Best Regard,

    Yang Shen

    • Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
    Friday, May 15, 2020 9:01 AM