Aplicación web pequeña, agregando elementos de cuadrícula repetidores dinámicamente

private void BindGridToppings()
    {

    }

aquí está la vista de cuadrícula de la página ASP

<asp:GridView ID="gridv" runat="server" AutoGenerateColumns="false" EnableModelValidation="true" OnRowDataBound="Pizzas_RowBound">
    <Columns>
        <asp:TemplateField HeaderText="Edit">
            <ItemTemplate>
                <asp:ImageButton ImageUrl="~/images/edit.png" ID="btnEditPizza" runat="server" RowIndex='<%# Container.DisplayIndex %>' onClick="Pizzas_RowEditing" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Delete">
            <ItemTemplate>
                <asp:ImageButton ImageUrl="~/images/del.png" ID="btnDeletePizza" runat="server" RowIndex='<%# Container.DisplayIndex %>' OnClick="Pizzas_RowDeleting" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField  DataField="Name" HeaderText="Name" SortExpression="Name" />
        <asp:TemplateField HeaderText="Pizza ID" >
            <ItemTemplate>
                <asp:Label ID="lblID" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "ID").ToString() %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Crust">
            <ItemTemplate>
                <asp:Label ID="lblCrust" runat="server" Text='<%#GetNameByLookUpID(DataBinder.Eval(Container.DataItem, "Crust").ToString()) %>'>            </asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Cheese">
            <ItemTemplate>
                <asp:Label ID="lblCheese" runat="server" Text='<%#GetNameByLookUpID(DataBinder.Eval(Container.DataItem ,"Cheese").ToString()) %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" />
        <asp:BoundField DataField="Cost" HeaderText="Cost" SortExpression="Cost" DataFormatString="{0:C}" />
        <asp:TemplateField HeaderText="Toppings">
            <ItemTemplate>
                <asp:Repeater ID="rptList" Runat="server">                            
                </asp:Repeater>
            </ItemTemplate>                
        </asp:TemplateField>
    </Columns>                
</asp:GridView>

SQL y SubSonic se usan como backend, solo comencé a programar con una base de datos hace dos semanas. Así que acceder a él todavía es nuevo para mí.

O mi llamada DB.Where...... fue formateada incorrectamente en la función BindGridToppings como me dijo el compilador. O Una consulta subsónica no es una clase que se pueda interactuar, como me dijo mi compilador cuando probé un bucle foreach y .items.add

Cualquier consejo sobre cómo vincular este repetidor sería encantador.

Gracias Macaire Bell

preguntado el 22 de mayo de 12 a las 21:05

2 Respuestas

No entiendo muy bien lo que dices aquí...

O mi llamada DB.Where...... fue formateada incorrectamente en la función BindGridToppings como me dijo el compilador. O Una consulta subsónica no es una clase que se pueda interactuar, como me dijo mi compilador cuando probé un bucle foreach y .items.add

no veo ninguna llamada BindGridToppings()? ¿Está tratando de resolver esos errores del compilador (de ser así, necesitamos un poco más de información al respecto) u obtener la técnica de enlace correcta para un repetidor dentro de un GridView?

Si su problema es cómo resolver el enlace de un repetidor dentro de un GridView, intente esto.

ASPX así:

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" onrowdatabound="GridView1_RowDataBound">
        <Columns>
            <asp:BoundField HeaderText="Foo1" DataField="Foo1" />
            <asp:TemplateField HeaderText="FooFive">
                <ItemTemplate>
                    <asp:Repeater ID="Repeater1" runat="server">
                        <ItemTemplate>
                            <asp:Label ID="Label1" runat="server" Text='<%# Eval("FooFive") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:Repeater>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

Código subyacente como este:

    protected void Page_Load(object sender, EventArgs e)
    {
        List<object> foo1Objects = new List<object>();
        foo1Objects.Add(new { Foo1 = "Hello" });
        foo1Objects.Add(new { Foo1 = "World" });

        GridView1.DataSource = foo1Objects;
        GridView1.DataBind();
    }

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        Repeater rep1 = e.Row.FindControl("Repeater1") as Repeater;
        if (rep1 != null)
        {
            List<object> fooFiveObjects = new List<object>();
            fooFiveObjects.Add(new { FooFive = "Apple" });
            fooFiveObjects.Add(new { FooFive = "Orange" });
            fooFiveObjects.Add(new { FooFive = "Banana" });

            rep1.DataSource = fooFiveObjects;
            rep1.DataBind();
        }
    }

Esperaría que la recuperación de datos y el enlace de datos de GridView1 funcionen de manera un poco diferente, pero la clave es manejar el GridView1_RowDataBound evento para enlazar el repetidor.

contestado el 22 de mayo de 12 a las 22:05

encontré una solución.

    protected void Pizzas_RowBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            int pizzaID = Convert.ToInt32(((Label)e.Row.FindControl("lblID")).Text);
            BulletedList bltTopping = ((BulletedList)e.Row.FindControl("bltTopping"));
            ToppingsCollection toppings = ToppingsMembers.RetriveByPizzaID(pizzaID);
            bltTopping.Items.Clear();
            foreach (Toppings topping in toppings)
            {
            bltTopping.Items.Add(new ListItem(GetNameByLookUpID(topping.ToppingID.ToString())));
        }
    }
}

con

            <asp:TemplateField HeaderText="Toppings">
                <ItemTemplate>                
                    <asp:BulletedList ID="bltTopping" Runat="server">                            
                    </asp:BulletedList>
                </ItemTemplate>                
            </asp:TemplateField>

al frente

¡Gracias por su ayuda, aunque me llevó a mi respuesta!

contestado el 24 de mayo de 12 a las 14:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.