如何访问GridView ButtonField控件ID?

赫里拜兹

我正在处理GridView中的ButtonField列,该列的RowCommand处理程序不会在以下生命周期中触发。

这是Web上的一个常见问题,除其他外,SO帖子帮助我了解到,这是由网页的旧实例和新实例的控件树中控件ID的不同引起的。

剩下的事情:在Button_Click EventHandler中,在实例将被销毁之前,我需要将gridField的ButtonField的ID保存(存入Session中),然后将其传递给EventHandler,如下所示:

    protected GridView Create_GV(DataTable BetTable)
    {
        GridView GV = new GridView
        {
            DataSource = BetTable,
            HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Center
        };

        GV.Columns.Add(new ButtonField { Text = "+", CommandName = "Select" });
        GV.DataBind();
        GV.RowCommand += GV_RowCommand;

        //cycle the columns so that the buttonfield is the last one

        int ncol = BetTable.Columns.Count;
        for (int i = 0; i < ncol; i++) GV.HeaderRow.Cells[i].Text = GV.HeaderRow.Cells[i + 1].Text;
        GV.HeaderRow.Cells[ncol].Text = "Přidat";
        
        foreach (GridViewRow row in GV.Rows)
        {
            List<TableCell> columns = new List<TableCell>();
            foreach (DataControlField column in GV.Columns)
            {
                TableCell cell = row.Cells[0];
                row.Cells.Remove(cell);
                columns.Add(cell);
            }
            row.Cells.AddRange(columns.ToArray());
        }
        return GV;
    }

然后在Page_Init中,我需要重新创建GridView,并将ButtonField的ID重置为原始值。

我故意说出ButtonField的ID,因为我什至不知道是否存在一个或多个-无法找到。

如何获取/设置GridView的ButtonField ID?

住持Masaraure

您需要在代码中进行一些更改才能使它们正常工作。尝试的荣誉。你快到了。

  1. 您的行命令事件处理程序应该在databind调用之前添加。
  2. 将按钮字段的循环代码移至创建的行事件
  3. 初始化datagridview时,仅需通过存在检查来创建一个网格实例。

我使用ArrayList创建了一个示例工作解决方案。此处下载示例并对其进行修改以适合您的需求。

Aspx.cs

 using System.Collections.Generic;

 namespace WebApplication3
            {
public partial class WebForm1 : System.Web.UI.Page
{
    GridView GV = null;
    protected void Page_Load(object sender, EventArgs e)
    {

        //Dummy datasource
        ArrayList names = new ArrayList() { };
        names.Add(new Person { Age = 29, Name = "Abide", Surname = "Masaraure" });
        names.Add(new Person { Age = 28, Name = "Lopi", Surname = "Sewa" });
        Create_GV(names);


    }

    protected void Create_GV(ArrayList BetTable)
    {
        if (GV == null)
        {
            GV = new GridView
            {
                DataSource = BetTable,
                HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Center
            };

            GV.DataSource = BetTable;
            GV.Columns.Add(new ButtonField { Text = "+", CommandName = "Select" });

            GV.RowCommand += GV_RowCommand;
            GV.RowCreated += GV_RowCreated;

            GV.DataBind();
            GV.HeaderRow.Cells[BetTable.Capacity-1].Text = "Přidat";
            form1.Controls.Add(GV);
        }
    }



    protected void GV_RowCommand(object sender, GridViewCommandEventArgs e)
    {
          //this will fire
    }


    protected void GV_RowCreated(object sender, GridViewRowEventArgs e)
    {

        GridViewRow row = e.Row;
        // Intitialize TableCell list
        List<TableCell> columns = new List<TableCell>();
        foreach (DataControlField column in GV.Columns)
        {
            //Get the first Cell /Column
            TableCell cell = row.Cells[0];
            // Then Remove it after
            row.Cells.Remove(cell);
            //And Add it to the List Collections
            columns.Add(cell);
        }

        // Add cells
        row.Cells.AddRange(columns.ToArray());
    }


      }

class Person
{
    public string Name { get; set; }
    public string Surname { get; set; }
    public int Age { get; set; }
}
        }

标记

<html>
    <head runat="server">
    <title></title>
   </head>
      <body>
    <form id="form1" runat="server">
    <div>


    </div>
    </form>
   </body>
    </html>

您可能还考虑在标记上放置一个空的网格视图,这将节省您尝试手动创建网格的工作量,并且使连接事件处理程序更加容易。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在GridView控件中访问Boundfield

来自分类Dev

如何通过其ID访问控件

来自分类Dev

如何在gridview的ButtonField中调用JS函数?

来自分类Dev

访问GridView ItemTemplate控件ASP.NET

来自分类Dev

如何访问没有ID或名称的HTML控件?

来自分类Dev

如何访问控件?

来自分类Dev

如何访问DataTemplate的控件

来自分类Dev

如何从主页的javascript函数访问用户控件页面下拉列表控件ID?

来自分类Dev

在Gridview的Row DataBound事件中找到ButtonField

来自分类Dev

单击ButtonField时未触发Gridview RowCommand

来自分类Dev

如何访问嵌套的GridView

来自分类Dev

如何为每个gridview行中的每个控件设置不同的id

来自分类Dev

使用Javascript访问GridView页脚中的Label控件

来自分类Dev

如何为用户控件内的控件生成唯一的ID

来自分类Dev

如何为用户控件内的控件生成唯一的ID

来自分类Dev

如何从ViewModel访问View控件?

来自分类Dev

如何访问用户控件的项目

来自分类Dev

如何从ViewModel访问View控件?

来自分类Dev

如何使用JavaScript获取任何控件的ID?

来自分类Dev

如何使用JavaScript获取任何控件的ID?

来自分类Dev

如何在控制器的操作中访问下拉列表控件ID

来自分类Dev

使用复选框启用/禁用GridView的ButtonField

来自分类Dev

如何访问ID对象

来自分类Dev

您如何使用MVP访问表单的控件

来自分类Dev

如何访问DependencyService中的本机控件?

来自分类Dev

如何访问动态创建的用户控件的属性?

来自分类Dev

如何访问CodedUI控件的NativeElement项目?

来自分类Dev

如何从用户控件访问容器的事件?

来自分类Dev

如何从ViewModel的ICommand Execute()访问控件?

Related 相关文章

热门标签

归档