Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态使radgrid中的字段可单击_C#_Dynamic_Telerik_Radgrid_Buttonclick - Fatal编程技术网

C# 动态使radgrid中的字段可单击

C# 动态使radgrid中的字段可单击,c#,dynamic,telerik,radgrid,buttonclick,C#,Dynamic,Telerik,Radgrid,Buttonclick,我正在尝试创建一个radgrid,其中所有的值都是链接按钮。这是我到目前为止的代码,它使所有正确的值链接按钮,但当它们被单击时,单击事件不会触发,页面会发回,所有按钮都会消失。我在一个OnitemDataBound事件中有这段代码,当在页面加载中加载网格时会调用该事件 foreach (GridColumn col in gridOver.MasterTableView.RenderColumns) { if (col.UniqueName == "approved" || col.Un

我正在尝试创建一个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);

这是单击其中一个feild之前的样子:

这就是它之后的样子:

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


任何帮助都会很棒,谢谢

您正在动态添加链接按钮。在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中,所有选项都可用。如果您需要访问单元格文本以创建链接按钮,这可能会出现问题。

代码在哪里?页面加载?通常情况下,使用代码示例保持简洁是很好的,但我认为我们可能需要了解更多信息。当网格加载页面加载时调用它。还需要什么其他信息?
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++;
           }
        }
    }
}