我动态创建了一个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();
}
答案 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();
}