Telerik RadGrid:无法选择项目索引

Telerik RadGrid : Cant have Selected Item Index

在我打开这个问题之前,我搜索了一下并没有找到像我这样的问题。 问题是,我正在构建一个 Web 应用程序并使用 telerik radgrid 查看记录。到这里查看没有问题,但是当我单击一行或 select 一行时,我想要行索引或 selected 项目索引不是 selectedIndexChanged 事件中的索引gridview 出现错误,如 "index was out of range"。在这里你可以看到下面的aspx部分和c#代码部分。

    <telerik:RadGrid ID="groupList" runat="server" AllowFilteringByColumn="True" AllowPaging="True" CellSpacing="0" GridLines="None" Skin="Metro" 
        OnSelectedIndexChanged="groupList_SelectedIndexChanged" MasterTableView-ClientDataKeyNames="Id" MasterTableView-DataKeyNames="Id">
        <ClientSettings EnablePostBackOnRowClick="True">
            <Selecting AllowRowSelect="True"  />
            <Scrolling AllowScroll="True" UseStaticHeaders="True" />
        </ClientSettings>
        <MasterTableView DataKeyNames="Id">
        <CommandItemSettings ExportToPdfText="Export to PDF"></CommandItemSettings>

        <RowIndicatorColumn Visible="True" FilterControlAltText="Filter RowIndicator column">
        <HeaderStyle Width="20px"></HeaderStyle>
        </RowIndicatorColumn>

        <ExpandCollapseColumn Visible="True" FilterControlAltText="Filter ExpandColumn column">
        <HeaderStyle Width="20px"></HeaderStyle>
        </ExpandCollapseColumn>

            <Columns>
                <telerik:GridButtonColumn ButtonType="ImageButton" CommandName="SelectRow" FilterControlAltText="Filter uniqueName column"
                      UniqueName="uniqueName">
                </telerik:GridButtonColumn>
            </Columns>

        <EditFormSettings>
        <EditColumn FilterControlAltText="Filter EditCommandColumn column"></EditColumn>
        </EditFormSettings>
        </MasterTableView>

        <FilterMenu EnableImageSprites="False"></FilterMenu>
    </telerik:RadGrid>

这是 c# 部分

protected void groupList_SelectedIndexChanged(object sender, EventArgs e)
{
    var dataItem = groupList.SelectedItems[0] as GridDataItem;
    if (dataItem != null)
    {
        var name = dataItem["Id"].Text;
    } 
}

这里我有错误。请帮助我解决这个问题并提前致谢。

您需要确定是要使用内置的 telerik "RowSelect" 功能,还是让他们按下命令栏按钮。两者都做没有意义。

RowSelect 将允许它们 select 行中的任何位置来触发 "groupList_SelectedIndexChanged" 事件。如果这就是你想要的,我会删除:

<telerik:GridButtonColumn ButtonType="ImageButton" CommandName="SelectRow" FilterControlAltText="Filter uniqueName column" UniqueName="uniqueName">
</telerik:GridButtonColumn>

并保留标记中的其他代码。如果仍然不起作用,您可以尝试更改访问 selected 数据的方式,例如:

protected void groupList_SelectedIndexChanged(object sender, EventArgs e)
{
    var dataItem = groupList.SelectedItems[0].OwnerTableView.DataKeyValues[groupList.SelectedItems[0].ItemIndex]["id"];
}

无论哪种方式,我都会在事件上设置断点,并且 "watch" 您尝试访问的数据,确保 "SelectedItems" 不为空。在调试时观察值将打开通往幸福与和平的大门。

仅供参考,我认为您不需要 "ClientDataKeyNames" 除非您使用 getDataKeyValue(colName) 方法从客户端获取值。但这不应该给你带来问题...