2017-03-31 25 views
1

の中にDataGridがあります。このDataGridで私はButton "btnTest"を持っています。どのように識別するか(リピータのインデックス)DataGridItemCommandDataGridから。リピーター内のItemCommandから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 
} 

私を助けてください。

答えて

1

あなたはdtg_ItemCommandNamingContainerツリーをナビゲートする必要があります。

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

ありがとうございます、それは多くの情報を扱っています。 – KK5687445

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; 
} 
関連する問題