使用AutoGenerateEditButton = true编辑gridview

时间:2013-08-26 17:53:56

标签: c# asp.net gridview

我动态创建了一个gridview并添加了AutoGenerateEditButton = true;属性,我看到它在将表加载到gridview时将编辑链接添加到所有字段。但是当我点击编辑按钮时,除了回发之外没有任何反应。我做错了什么?

        GridView gridData = new GridView();
        gridData.ID = "test";
        gridData.AutoGenerateEditButton = true;
        gridData.RowEditing += (sender, e) => grid_RowEditing(tbl, e, sender);
        gridData.DataSource = tbl;
        gridData.DataBind();

 protected void grid_RowEditing(DataTable tbl, GridViewEditEventArgs e, object sender)
    {
        ((GridView)sender).EditIndex = e.NewEditIndex;
        // call your databinding method here
        ((GridView)sender).DataSource = tbl ;
        ((GridView)sender).DataBind();
    }

2 个答案:

答案 0 :(得分:0)

我的猜测是,因为你通过重新创建它来覆盖每个回发网格,所以只是忽略了点击。

建议的方法是静态创建不可见的网格:

<asp:GridView .... Visible="false" />

然后在需要时让它可见。这种方法(与动态创建相反)将为您节省十几个问题,最有可能包括您面临的问题。

编辑:如果你真的想要按照自己的路线行进,那么我的猜测就是你没有指定你的数据键名,这样编辑点击就不会显示所点击行的信息。

gridData.DataKeyNames = new string[] { "ID" };

(如果您的主键列名称为ID

答案 1 :(得分:0)

我在客户端添加了a <p id="p" runat="server">并在此控件中添加了该网格。 这是我的代码。 我使用SqlDataSource而不是Datatable,你可以使用它中的任何一个。 希望它对你有用..

    protected void gridview()
    {               
        GridView gridData = new GridView();
        gridData.ID = "test";
        gridData.AutoGenerateEditButton = true;

        gridData.RowEditing += (sender, e) => grid_RowEditing(SqlDataSource1, e, sender);
        gridData.DataSource = SqlDataSource1;
        gridData.DataBind();
        p.Controls.Add(gridData);
    }

    protected void grid_RowEditing(SqlDataSource tbl, GridViewEditEventArgs e, object sender)
    {
        ((GridView)sender).EditIndex = e.NewEditIndex;
        // call your databinding method here
        ((GridView)sender).DataSource = tbl;
        ((GridView)sender).DataBind();
    }

2)我也尝试了datatable,并且正在努力。 这是我的代码。

    protected void gridview()
    {

        DataTable dt = new DataTable();            
        dt.Columns.Add("id");
        dt.Columns.Add("name");         
        for (int i = 0; i < 100; i++)
        {               
            dt.Rows.Add(i.ToString(),"v"+i.ToString());
        }

        GridView gridData = new GridView();
        gridData.ID = "test";
        gridData.AutoGenerateEditButton = true;
        gridData.RowEditing += (sender, e) => grid_RowEditing(dt, e, sender);
        gridData.DataSource = dt;
        gridData.DataBind();
        p.Controls.Add(gridData);
    }

    protected void grid_RowEditing(DataTable tbl, GridViewEditEventArgs e, object sender)
    {
        ((GridView)sender).EditIndex = e.NewEditIndex;
        // call your databinding method here
        ((GridView)sender).DataSource = tbl;
        ((GridView)sender).DataBind();
    }