我正在使用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控件的等价物是什么?
答案 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;
}