【问题标题】:Gridview under Repeater control in asp.netasp.net中Repeater控件下的Gridview
【发布时间】:2012-10-29 17:14:04
【问题描述】:

我有一个中继器控件,其中包含基于数据库中的值的网格,例如,我在中继器控件中有 2 个网格,现在两个网格都包含一个具有向上和向下按钮的列,现在当用户单击按钮时从任何网格中,我如何检查从哪个网格调用按钮。 下面是我在RepeaterItemDataBound Event上填充网格的代码

GridView gvw = e.Item.FindControl("grid") as GridView;
gvw.DataSource = info.GetStories(sectionNames[e.Item.ItemIndex].Trim());
gvw.DataBind();

这里的部分名称包含部分的名称,根据部分的数量,我生成网格。 我的设计如下所示:

<asp:Repeater ID="rptGrids" runat="server" 
                        OnItemDataBound="rptGrids_ItemDataBound">
                        <ItemTemplate>
                            <asp:GridView ID="grid" runat="server" Width="100%" CellPadding="5" AllowPaging="true" ShowHeader="true" PageSize="10" AutoGenerateColumns="false" OnRowCommand="Stories_RowCommand">
                                <Columns>
                                    <asp:BoundField DataField="ArticleID" HeaderText="Article ID" ItemStyle-CssClass="center" />
                                    <asp:BoundField DataField="CategoryID" HeaderText="Category ID" ItemStyle-CssClass="center" />
                                    <asp:BoundField DataField="Title" HeaderText = "Article Title" />
                                    <asp:BoundField DataField="PublishDate" DataFormatString="{0:d}" HeaderText="Publish Date" ItemStyle-CssClass="center" />
                                    <asp:TemplateField HeaderText="Select Action" ItemStyle-CssClass="center">
                                        <ItemTemplate>
                                            <asp:ImageButton ID="btnMoveUp" runat="server" ImageUrl="/images/up.gif" CommandArgument="Up" CommandName='<%# Container.DataItemIndex + "," + DataBinder.Eval(Container.DataItem, "StoryType") %>' />
                                            <asp:ImageButton ID="btnMoveDown" runat="server" ImageUrl="/images/dn.gif" CommandArgument="Down" CommandName='<%# Container.DataItemIndex + "," + DataBinder.Eval(Container.DataItem, "StoryType") %>' />
                                            <asp:ImageButton ID="btnDelete" runat="server" ImageUrl="/images/deny.gif" CommandArgument="Delete" OnClientClick="return confirm('Are you sure you want to delete this article?');" CommandName='<%# Container.DataItemIndex %>' />
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:TemplateField Visible="false">
                                        <ItemTemplate>
                                            <asp:HiddenField ID="hdStoriesSortOrder" runat="server" Value='<%# Eval("SortOrder") %>' />
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                </Columns>
                            </asp:GridView>
                            <div class="blank"></div>
                        </ItemTemplate>
                    </asp:Repeater>

这是我的 gridviews row_command 事件

protected void Stories_RowCommand(object sender, GridViewCommandEventArgs e)
{
    int index = Convert.ToInt32(e.CommandName.Split(',')[0]);
    string section = e.CommandName.Split(',')[1].Trim().ToString();
    string command = e.CommandArgument.ToString();
    if (command.ToLower() == "up")
    {
        GridView grd = rptGrids.Items[1].FindControl("grid") as GridView; // If i specify the index here, i gets proper grid, but how to recognize at runtime.
        Response.Write(grd.Rows.Count);
    }
    else if (command.ToLower() == "down")
    {

    }
}

谁能告诉我如何从单击了哪个网格向上/向下按钮中获取信息。

【问题讨论】:

    标签: asp.net gridview repeater


    【解决方案1】:

    您可以使用命令参数来传递所需的值。 这是以类似方式使用 imagebutton 的示例:

                    <asp:ImageButton ID="btnView" runat="server" ToolTip="<% $resources:AppResource,Edit %>"
                        SkinID="EditPage" CommandName="myCommand" CommandArgument='<%# Eval("CustomerId") %>'
                        PostBackUrl='<%# "~/AdminPages/Customer.aspx?id=" + Eval("CustomerId").ToString() %>' />
    

    注意 CommandArgument 属性。您可以将其设置为表示中继器内部特定网格视图的值。

    这里是检查值的方法:

        protected void EntityGridViewContacts_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            //here you can check for command name...
            switch (e.CommandName)
            {
                case "myCommand":
                    //here you access command argument...
                    int customerId = Convert.ToInt32(e.CommandArgument.ToString());
                    break;
            }
    
            //here is how you access source gridview...
            GridView gridView = (GridView)sender;
            string controlId = gridView.ID;
        }
    

    您也可以使用这种方法设置 CommandArgument:

    CommandArgument='<%# GetMySpecialValue() %>'
    

    那么你应该在页面端声明这样的函数:

    public string GetMySpecialValue() 
    {
         return "some value";
    }
    

    【讨论】:

    • 感谢@Gregor Primar 的宝贵回复,您能告诉我如何在中继器内传递网格名称吗?在设计时我已将单个网格放置在中继器内,如何在命令参数中命名.
    • 实际上应该是 GridView.ClientID,因为按照我上面的示例,ID 将始终返回 Grid...无论如何非常感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    相关资源
    最近更新 更多