Reputation: 13
I've a DataGrid
inside a Repeater
. In this DataGrid
I've a Button
"btnTest". How to identify which (Index of the Repeater) DataGrid
from ItemCommand
in 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
}
Please help me.
Upvotes: 1
Views: 712
Reputation: 35514
You have to navigate up the NamingContainer
tree in 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;
Upvotes: 1
Reputation: 12731
Could you please try this untested code in your "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;
}
Upvotes: 1