0
private void BindGridToppings()
    {

    }

这是来自asp页面的gridview

<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 和 SubSonic 作为后端,我两周前才开始使用数据库进行编程。所以访问它对我来说仍然是新的。

正如编译器告诉我的那样,我的 DB.Where...... 调用在 BindGridToppings 函数中的格式不正确。或者,当我尝试 foreach 循环和 .items.add 时,我的编译器告诉我,亚音速查询不是可以交互的类

关于如何绑定这个中继器的任何建议都会很可爱。

谢谢, 麦凯尔贝尔

4

2 回答 2

0

我不太明白你在说什么...

正如编译器告诉我的那样,我的 DB.Where...... 调用在 BindGridToppings 函数中的格式不正确。或者,当我尝试 foreach 循环和 .items.add 时,我的编译器告诉我,亚音速查询不是可以交互的类

我看没有来电BindGridToppings()?您是在尝试解决那些编译器错误(如果是这样,我们需要更多关于这些错误的信息),还是在 GridView 中为 Repeater 获取正确的绑定技术?

如果您的问题是如何解决在 GridView 中绑定中继器,试试这个。

像这样的 ASPX:

    <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>

像这样的代码隐藏:

    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();
        }
    }

我希望您的数据检索和 GridView1 数据绑定的工作方式略有不同,但关键是处理GridView1_RowDataBound事件以绑定中继器。

于 2012-05-22T21:22:40.917 回答
0

找到了解决办法。

    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())));
        }
    }
}

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

在前面

感谢您的帮助,尽管它使我得到了答案!

于 2012-05-24T13:05:58.533 回答