RadGrid从项目模板按钮获取选定的行索引

时间:2011-10-23 23:08:49

标签: c# asp.net telerik

我正在使用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 个答案:

答案 0 :(得分:8)

使用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];
}

答案 1 :(得分:3)

您可以使用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 :(得分:2)

查看Telerik documentation,看起来像你想要的那样:

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

你没有问过这篇文章,但我认为这段代码:

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

正在寻找麻烦。

虽然标记和代码隐藏总是高度耦合,但如果你问我,直接引用单个单元格就会产生代码味道。我猜你要从Button中的“ItemTemplate”中提取“选择”。

您可以为Button分配ID,并致电FindControl("buttonID")以获取所需的数据吗?这将有助于保持代码的可维护性和可读性。

答案 3 :(得分:1)

static void
timer_interrupt (struct intr_frame *args UNUSED)
{
  enum intr_level old_level;
  old_level = intr_disable ();

  ticks++;
  thread_tick ();

  struct list_elem* sl_elem;
  struct thread* sl_thread;
  while(!list_empty(&sleep_list))
  {
    sl_elem = list_front(&sleep_list);
    sl_thread = list_entry(sl_elem, struct thread, timer_elem);

    if (sl_thread->wake_tick > ticks)
    {
      break;
    }

    thread_unblock(sl_thread);
    list_remove(sl_elem);
  }

  intr_set_level (old_level);
}

答案 4 :(得分:0)

按钮点击事件中的

这样的事情应该起作用

        foreach (GridDataItem item in RadGrid1.SelectedItems)
        {
            GridDataItem item = (GridDataItem)RadGrid1.SelectedItems;
            var key = string.Empty;
            key = item.ItemIndex;
        }