C# RadGrid“从项目模板获取选定行索引”按钮
我正在使用Telerik控件进行一个项目。我试图找出如何在ItemTemplate按钮单击事件上获取选定的行索引,如下面的标记所示:C# RadGrid“从项目模板获取选定行索引”按钮,c#,asp.net,telerik,C#,Asp.net,Telerik,我正在使用Telerik控件进行一个项目。我试图找出如何在ItemTemplate按钮单击事件上获取选定的行索引,如下面的标记所示: <telerik:RadGrid ID="RadGrid1" runat="server" AllowFilteringByColumn="True" DataSourceID="cusGrid" GridLines="None" Skin="Default" AllowPaging="True" DataKeyValue="CustomerID"
<telerik:RadGrid ID="RadGrid1" runat="server" AllowFilteringByColumn="True"
DataSourceID="cusGrid" GridLines="None" Skin="Default" AllowPaging="True" DataKeyValue="CustomerID"
PageSize="500" AllowMultiRowSelection="True" ShowStatusBar="true" >
<MasterTableView AutoGenerateColumns="False" DataKeyNames="CustomerID" DataSourceID="cusGrid">
<RowIndicatorColumn>
<HeaderStyle Width="20px"></HeaderStyle>
</RowIndicatorColumn>
<ExpandCollapseColumn>
<HeaderStyle Width="20px"></HeaderStyle>
</ExpandCollapseColumn>
<Columns>
<telerik:GridTemplateColumn UniqueName="CheckBoxTemplateColumn">
<ItemTemplate>
<asp:Button runat="server" Text="Select" OnClick="SelRecord" />
</ItemTemplate>
</telerik:GridTemplateColumn>
...
Telerik控件的等效功能是什么?类似于按钮单击事件的功能应该可以工作
foreach (GridDataItem item in RadGrid1.SelectedItems)
{
GridDataItem item = (GridDataItem)RadGrid1.SelectedItems;
var key = string.Empty;
key = item.ItemIndex;
}
通过查看,您似乎想要:
var gRow = ((sender as Button).NamingContainer as GridItem).Selected;
你没有问过这篇文章,但我认为这段代码:
if (gRow != null) { key = gRow.Cells[0].Text; }
他在自找麻烦
尽管标记和代码隐藏总是高度耦合的,但如果你问我的话,直接引用单个单元格是一种代码味道。我猜您想从ItemTemplate
中的ASP按钮中拉出“Select”
您能否为您的按钮指定一个ID,并调用FindControl(“buttonID”)
获取所需的数据?这将有助于使代码更易于维护和可读。使用CommandArgument
,并使用OnCommand
而不是OnClick
来获取行索引:
<asp:Button ID="Button1" runat="server" CommandArgument='<%#Container.ItemIndex%>' OnCommand="Button1_Command" ... />
您可以使用CommandName=”“
而不是OnClick
同时将onitemdatabound=“RadGrid1\u ItemDataBound”
添加到主telerik:RadGrid标签中
然后在代码背后:
protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e)
{
if (e.Item is GridDataItem)
{
GridDataItem dataItem = e.Item as GridDataItem;
int selectedRowIndex = dataItem.RowIndex;
}
}
同意这种方法,这是目前为止最简单的方法。注意转换为int try:RadGrid1.Items[int.parse((e.CommandArgument.ToString())];我知道这是例外的答案,但您能解释一下这是如何解决问题的吗?谢谢,这是我一直在寻找的…在不更改代码的情况下执行相同的操作:)
protected void Button1_Command(object sender, CommandEventArgs e)
{
GridDataItem item = RadGrid1.Items[(int)e.CommandArgument];
}
protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e)
{
if (e.Item is GridDataItem)
{
GridDataItem dataItem = e.Item as GridDataItem;
int selectedRowIndex = dataItem.RowIndex;
}
}
<telerik:GridTemplateColumn UniqueName="IndexRow" HeaderText="#">
<ItemTemplate>
<%#Container.ItemIndex + 1%>
</ItemTemplate>
</telerik:GridTemplateColumn>