从Repeater中的ItemCommand中识别DataGrid

时间:2017-03-31 21:12:24

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

我在DataGrid内有一个Repeater。在此DataGrid我有一个Button“btnTest”。如何从DataGrid ItemCommand中的DataGrid中识别哪个(转发器的索引)<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:

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
}

ASPX.CS:

moment-duration-format

请帮帮我。

2 个答案:

答案 0 :(得分:1)

您可以在“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;
}

答案 1 :(得分:1)

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

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