日期:2014-05-18  浏览次数:20443 次

动态生成GridView,模板列中Button触发RowCommand问题
生成GridView的函数:
GridView GridView1 = new GridView();
  GridView1.ID = "gv";
  GridView1.AutoGenerateColumns = false;
  GridView1.RowCommand += new GridViewCommandEventHandler(GridView1_RowCommand);
  GridView1.EnableViewState = true;
GridView1.DataSourceID = "SqlDataSource2";

TemplateField audi = new TemplateField();
  audi.ShowHeader = true;
  audi.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "");
  audi.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, "");
  GridView1.Columns.Add(audi);

  BoundField name = new BoundField();
  name.HeaderText = "单位";
  name.DataField = "name";
  GridView1.Columns.Add(name);

string[] aa = { "id" };
  GridView1.DataKeyNames = aa;
  viewPanel.Controls.Add(GridView1);
  GridView1.DataBind();
  GridView_DataBind(GridView1);

为模板列里的按钮添加属性的函数:
Button bt = (Button)(GridView1.Rows[i].Cells[0].FindControl("state"));
  bt.Text = "未审核";
  bt.Enabled = true;
  bt.CommandName = dr[1].ToString();
  bt.CommandArgument = GridView1.DataKeys[i].Value.ToString();

没有触发RowCommand,请高手帮忙
顺便说一下,用LinkButton也不行

------解决方案--------------------
是在GridView事件触发的.不是你添加的Button事件中.
------解决方案--------------------
把你的按钮事件在GridView的RowCreat事件中绑定就可以了。
听起来也许有点绕,多读两遍就明白了。
------解决方案--------------------
以前也遇到过类似的问题,不过GridView不是动态加载的,
只有各行的部分格子里面的控件是动态生成的,
为他们绑定事件的时候必须要在RowCreat事件中触发。
建议搂主把完整代码发出来,大家也好帮忙解决。
------解决方案--------------------
GridView1.RowCommand += new GridViewCommandEventHandler(GridView1_RowCommand); 
要写在页面添加GridView1的后面
如:
 form1.Controls.Add(gdv);
gdv.RowCommand += new GridViewCommandEventHandler(gdv_RowCommand);