我试图创建一个radgrid,其中所有值都是链接按钮。这是我到目前为止的代码,它使所有正确的值链接按钮,但是当它们被点击时,click事件不会触发,页面回发并且所有按钮都消失了。我在OnitemDataBound事件中有这个代码,当在页面加载时加载网格时调用该事件。
foreach (GridColumn col in gridOver.MasterTableView.RenderColumns)
{
if (col.UniqueName == "approved" || col.UniqueName == "submitted"
|| col.UniqueName == "rejected" || col.UniqueName == "notSub")
{
GridDataItem dataItem = (GridDataItem)e.Item;
LinkButton btn = new LinkButton();
btn.ID = item.Cells[2].Text + "-" + x.ToString();
btn.Text = dataItem[col.UniqueName].Text;
btn.ForeColor = System.Drawing.Color.Black;
btn.Click += gridOver_Click;
dataItem[col.UniqueName].Controls.Add(btn);
x++;
}
}
我也试过这样做:
btn.Click += new EventHandler(gridOver_Click);
和
btn.Click += new System.EventHandler(gridOver_Click);
这是在点击其中一个游戏之前的样子:http://puu.sh/ckNyU/a2e570a8e4.png
这就是它之后的样子:http://puu.sh/ckNA2/acfe7f3455.jpg
所有字段都从按钮变为再次只是文本,事件不会触发。
任何帮助都会很棒,谢谢!
答案 0 :(得分:0)
您正在动态添加LinkButtons。在ASP.NET Web窗体中,必须在所有后续页面回发中重新创建动态控件。还必须使用相同的ID 重新创建它们。 ID对事件机制很重要。
根据telerik documentation:
网格绑定到数据时,ItemDataBound 事件仅触发 。
,而:
当网格绑定到数据并且网格从ViewState绑定时,每个页面回发 - 就在Load事件发生之前,会触发ItemCreated 事件。
我不确切知道您要尝试实现的目标,但为了让每个回发都显示链接按钮,我建议您将代码移到ItemCreated事件中:
protected void gridOver_ItemCreated(object sender, GridItemEventArgs e)
{
if (e.Item is GridDataItem)
{
// ... declare and init x somehow
foreach (GridColumn col in gridOver.MasterTableView.RenderColumns)
{
if (col.UniqueName == "rejected")
{
GridDataItem dataItem = (GridDataItem)e.Item;
LinkButton btn = new LinkButton();
btn.ID = dataItem.Cells[2].Text + "-" + x.ToString();
btn.Text = dataItem[col.UniqueName].Text;
btn.ForeColor = System.Drawing.Color.Black;
btn.Click += gridOver_Click;
dataItem[col.UniqueName].Controls.Add(btn);
x++;
}
}
}
}
请注意,在项目受数据绑定之前,ItemCreated会被触发。因此,细胞中仍然没有数据。文本或输入控件。在ItemDataBound中,所有都可用。如果您需要访问单元格,这可能是一个问题。文本以创建链接按钮。