RadGrid Получить выбранный индекс строки из кнопки шаблона элемента - PullRequest
8 голосов
/ 24 октября 2011

Я работаю над проектом с использованием элементов управления 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>
    ...

Обычно с GridView я бы просто сделал что-то вроде:

protected void SelRecord(object sender, EventArgs e)
{
    var gRow = (GridViewRow)(sender as Control).Parent.Parent;
    var key = string.Empty;
    if (gRow != null) { key = gRow.Cells[0].Text; }
}

Что эквивалентно контролю Telerik?

Ответы [ 5 ]

8 голосов
/ 29 октября 2011

Используйте CommandArgument и используйте OnCommand вместо OnClick, чтобы получить индекс строки:

<asp:Button ID="Button1" runat="server" CommandArgument='<%#Container.ItemIndex%>' OnCommand="Button1_Command" ... />

Кодовый код:

protected void Button1_Command(object sender, CommandEventArgs e)
{
    GridDataItem item = RadGrid1.Items[(int)e.CommandArgument];
}
3 голосов
/ 31 октября 2011

Вы можете использовать CommandName="" вместо OnClick.

Также добавьте onitemdatabound="RadGrid1_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;
    }
}
2 голосов
/ 28 октября 2011

Просматривая документацию Telerik , она выглядит так, как вы хотите:

var gRow = ((sender as Button).NamingContainer as GridItem).Selected;

Вы не спрашивали об этой части, но я думаю, что этот код:

if (gRow != null) { key = gRow.Cells[0].Text; }

требует неприятностей.

Хотя разметка и выделение кода всегда тесно связаны, прямая ссылка на отдельные ячейки - это запах кода, если вы спросите меня.Я предполагаю, что вы хотите вытащить «Выбрать» из ASP Button в вашем ItemTemplate.

Можете ли вы назначить идентификатор для Button и позвонить FindControl("buttonID"), чтобы получитьданные вам нужны?Это поможет сделать ваш код более понятным и понятным.

1 голос
/ 13 февраля 2016
 <telerik:GridTemplateColumn UniqueName="IndexRow" HeaderText="#">
                            <ItemTemplate>
                                <%#Container.ItemIndex + 1%>
                            </ItemTemplate>
                        </telerik:GridTemplateColumn>
0 голосов
/ 28 октября 2011

что-то вроде этого в событии нажатия кнопки должно работать

        foreach (GridDataItem item in RadGrid1.SelectedItems)
        {
            GridDataItem item = (GridDataItem)RadGrid1.SelectedItems;
            var key = string.Empty;
            key = item.ItemIndex;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...