动态地使radgrid中的字段可单击

本文关键字:字段 单击 radgrid 动态 | 更新日期: 2023-09-27 18:27:16

我试图创建一个radgrid,其中所有值都是链接按钮。这是我到目前为止的代码,它使所有正确的值链接按钮,但当它们被点击时,点击事件不会触发,页面会返回,所有按钮都会消失。我在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

所有字段都从按钮变为文本,并且事件不会触发。

任何帮助都会很棒,谢谢!

动态地使radgrid中的字段可单击

您正在动态添加LinkButtons。在ASP.NET Web窗体中,必须在所有后续页面回发时重新创建动态控件。还需要使用相同ID的重新创建它们。ID对于事件机制非常重要。

根据telerik文件:

ItemDataBound事件仅在网格绑定到数据时触发。

而:

ItemCreated事件在网格绑定到数据时以及在网格从ViewState绑定时触发,因此在每个页面回发之后,刚好在Load事件发生之前。

我不知道你到底想实现什么,但为了让你的链接按钮出现在每个回发中,我建议将你的代码移动到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中,所有项都可用。如果您需要访问单元格的文本以创建链接按钮,这可能是一个问题。