Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# RadGrid“从项目模板获取选定行索引”按钮_C#_Asp.net_Telerik - Fatal编程技术网

C# RadGrid“从项目模板获取选定行索引”按钮

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控件进行一个项目。我试图找出如何在ItemTemplate按钮单击事件上获取选定的行索引,如下面的标记所示:

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