【问题标题】:Identify the DataGrid from ItemCommand inside Repeater从 Repeater 内的 ItemCommand 识别 DataGrid
【发布时间】:2017-08-26 06:14:06
【问题描述】:

我在Repeater 中有一个DataGrid。在这个DataGrid 我有一个Button“btnTest”。如何从ItemCommand 中识别DataGrid 中的哪个(中继器索引)DataGrid

ASPX:

<asp:Repeater ID="ProdList" OnItemDataBound="ProdList_ItemDataBound" OnItemCommand="ProdList_ItemCommand" runat="server">
    <ItemTemplate>
        <div style="padding: 5px;">
            <asp:DataGrid ID="dtg" OnItemDataBound="dtg_ItemDataBound" OnItemCommand="dtg_ItemCommand" runat="server" AutoGenerateColumns="False" DataSource='<%# DataBinder.Eval(Container.DataItem, "ProductItems") %>'>
                <Columns>
                    <asp:BoundColumn HeaderText="ProdName" DataField="ProdName"></asp:BoundColumn>
                    <asp:TemplateColumn>
                        <ItemTemplate>
                            <asp:Button ID="btnTest" runat="server" CommandName="Test" Text="Test" />
                        </ItemTemplate>
                    </asp:TemplateColumn>
                </Columns>
            </asp:DataGrid>
            <asp:TextBox ID="txtSearch" runat="server" style="width:250px;" CssClass="txtSearch" autocomplete="off"></asp:TextBox>
            <asp:Button ID="btnSearch" runat="server" Text="Search" CssClass="btnSearch" onclick="btnSearch_Click" />
            <asp:Button ID="btnCheckAvailability" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ProdId") %>' CssClass="button" CommandName="CheckAvailability" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ProdId") %>' />
        </div>
    </ItemTemplate>
</asp:Repeater>

ASPX.CS:

protected void ProdList_ItemDataBound(Object Sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {

    }
}

protected void ProdList_ItemCommand(Object Sender, RepeaterCommandEventArgs e)
{

}

protected void dtg_ItemDataBound(object sender, DataGridItemEventArgs e)
{

}

protected void dtg_ItemCommand(object source, DataGridCommandEventArgs e)
{
    // I want to identify DataGrid here
}

请帮帮我。

【问题讨论】:

    标签: c# asp.net datagrid repeater asp.net-2.0


    【解决方案1】:

    您必须在dtg_ItemCommand 中向上导航NamingContainer 树。

    //get the current datagrid item from the sender
    DataGridItem gridIitem = (DataGridItem)(((Control)e.CommandSource).NamingContainer);
    
    //the index of the griditem if needed
    int gridItemIndex = gridIitem.ItemIndex;
    
    //then the datagrid from the underlying datagriditem
    DataGrid grid = (DataGrid)gridIitem.NamingContainer;
    
    //then the repeateritem from the underlying datagrid
    RepeaterItem repeaterItem = (RepeaterItem)grid.NamingContainer;
    
    //now you can get the index of the repeateritem
    int repeaterIndex = repeaterItem.ItemIndex;
    

    【讨论】:

      【解决方案2】:

      能否请您在“dtg_ItemCommand”中尝试这个未经测试的代码。

      protected void dtg_ItemCommand(object source, DataGridCommandEventArgs e)
      {
          //Get the reference of the datagrid.
          DataGrid dg= (source as DataGrid);
      
          //Get the Repeater Item reference
          RepeaterItem item = dg.NamingContainer as RepeaterItem;
      
          //Get the repeater item index
          int index = item.ItemIndex;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-03
        • 2012-04-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多