0

我通过在 ItemDataBound 事件期间将 LinkBut​​ton 注入其中来自定义 Telerik RadGrid 上的组标题。该按钮呈现完美,但我无法让它击中任何事件处理程序。

下面是按钮创建的代码:

Private Sub rgWorkRequestItemCosts_ItemDataBound(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridItemEventArgs) Handles rgWorkRequestItemCosts.ItemDataBound

        If TypeOf e.Item Is GridGroupHeaderItem Then

            Dim oItem As GridGroupHeaderItem = DirectCast(e.Item, GridGroupHeaderItem)
            Dim lnkAdd As New LinkButton()
            lnkAdd.ID = "lnkAdd"
            lnkAdd.CommandName = "CustomAddWorkRequestItemCost"
            lnkAdd.CommandArgument = DirectCast(oItem.DataItem, DataRowView).Row("nWorkRequestItemID").ToString()
            lnkAdd.Text = String.Format("<img style=""border:0px"" alt="""" width=""12"" src=""{0}"" /> Add new cost", ResolveUrl(String.Format("~/App_Themes/{0}/Grid/AddRecord.gif", Page.Theme)))
            lnkAdd.Style("color") = "#000000"
            lnkAdd.Style("text-decoration") = "none"
            AddHandler lnkAdd.Click, AddressOf lnkAdd_Click
            Dim tcPlaceholder As GridTableCell = DirectCast(oItem.Controls(1), GridTableCell)
            Dim litText As New LiteralControl(String.Format("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{0}", tcPlaceholder.Text))
            tcPlaceholder.Text = String.Empty
            tcPlaceholder.Controls.Add(lnkAdd)
            tcPlaceholder.Controls.Add(litText)
     End If
End Sub

此代码为 LinkBut​​ton 显式添加了一个处理程序,但该处理程序永远不会被命中。我还尝试了 RadGrid 上的事件(ItemCommand、ItemEvent),但似乎没有一个被击中。

有没有人对其他活动有任何建议可以尝试,或者有什么方法可以做到这一点?

谢谢!

4

1 回答 1

1

我无法找到一个“好的”解决方案。最后我做了以下事情:

  1. 在 ItemCreated 事件处理程序中创建按钮,将其 CommandArgument 设置为一个计数器,该计数器为每个创建的组头递增
  2. 再次在 ItemDataBound 事件中创建按钮,再次将其 CommandArgument 设置为计数器值。此时,我向字典对象(存储在 ViewState 中)添加了一条记录,将计数器链接到组的实际值。
  3. 处理了按钮的点击事件,在viewstate中从字典中提取组值完成处理。

丑陋,但它的工作原理。

于 2010-04-19T06:26:50.003 回答