GridView 动态绑定控件 OnRowCommand事件触发
2013-06-30 00:24
375 查看
主题:GridView动态生成的控件不能触发OnRowCommand事件,且点击控件按钮后,控件的值会消失。
案例,
由于公司需要绑定的数据列顺序是动态生成的,且有的数据列需要绑定Button控件。所以需要动态绑定TemplateField。
问题,不能触发OnRowCommand事件和点击控件按钮后,控件的列值会消失。
不能触发OnRowCommand代码如下:
View Code
最终解决方法,
1.用BoundField替代TemplateField方法,代码如下。
2.重新写OnInit方法。在OnInit上绑定TemplateField,可以触发OnRowCommand事件。
2,
动态绑定控件不能触发的估计原因是:
1)用TemplateField动态绑定的控件不是服务器端控件,不在ViewState记录,所以刷新页面后,这些列的值会消失,OnRowCommand事件自然也不会触发。
2)而用BoundField,会记录ViewState,所以刷新页面后,就会触发事件OnRowCommand。
3)在OnInit上绑定控件,首先会初始化绑定控件和事件(OnRowCommand重新绑定了)。这样OnRowCommand事件也会触发。
案例,
由于公司需要绑定的数据列顺序是动态生成的,且有的数据列需要绑定Button控件。所以需要动态绑定TemplateField。
问题,不能触发OnRowCommand事件和点击控件按钮后,控件的列值会消失。
不能触发OnRowCommand代码如下:
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { } TemplateField customField = new TemplateField(); customField.ShowHeader = true; customField.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "动态添加列"); GridViewTemplate gvt = new GridViewTemplate(DataControlRowType.DataRow, "lbtn", "Name"); customField.ItemTemplate = gvt; ContactsGridView.Columns.Add(customField);//添加编辑按钮到gridview DataTable dt = new System.Data.DataTable(); dt.Columns.Add("data1"); dt.Columns.Add("ContactID"); DataRow dr = dt.NewRow(); dr["data1"] = "test"; dr["ContactID"] = "ContactID"; dt.Rows.Add(dr); DataRow dr2 = dt.NewRow(); dr2["data1"] = "test2"; dr2["ContactID"] = "ContactID"; dt.Rows.Add(dr2); ContactsGridView.DataSource = dt; ContactsGridView.DataBind(); }
View Code
最终解决方法,
1.用BoundField替代TemplateField方法,代码如下。
ButtonField adup = new ButtonField(); adup.ButtonType = ButtonType.Link; adup.HeaderText = "广告上架"; adup.Text = "test"; adup.CommandName = "shangjia"; ContactsGridView.Columns.Add(adup);//添加编辑按钮到gridview
2.重新写OnInit方法。在OnInit上绑定TemplateField,可以触发OnRowCommand事件。
protected override void OnInit(EventArgs e) { TemplateField customField = new TemplateField(); customField.ShowHeader = true; customField.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "动态添加列"); GridViewTemplate gvt = new GridViewTemplate(DataControlRowType.DataRow, "lbtn", "Name"); customField.ItemTemplate = gvt; ContactsGridView.Columns.Add(customField);//添加编辑按钮到gridview }
2,
动态绑定控件不能触发的估计原因是:
1)用TemplateField动态绑定的控件不是服务器端控件,不在ViewState记录,所以刷新页面后,这些列的值会消失,OnRowCommand事件自然也不会触发。
2)而用BoundField,会记录ViewState,所以刷新页面后,就会触发事件OnRowCommand。
3)在OnInit上绑定控件,首先会初始化绑定控件和事件(OnRowCommand重新绑定了)。这样OnRowCommand事件也会触发。
相关文章推荐
- asp.net C#动态添加创建生成button按钮控件没有触发执行响应click绑定事件处理
- DataGrid中DropDownList的动态绑定和触发DropDownList事件
- 动态生成表格呈现还是将表格直接绑定gridview等控件呈现的开发方式选择依据
- ScrollView动态添加控件,并设定绑定事件
- EXTJS 4.2 资料 控件之Grid 行编辑绑定下拉框,并点一次触发一次事件
- 菜鸟学Asp.Net——GridView控件之RowDataBind事件中如何获取已绑定的数据
- 请教如何在数据绑定时不让combox控件触发SelectedIndexChanged事件,
- gridview自定义button事件 ,无法触发 onrowcommand
- Android开发学习笔记:为动态添加的EditText控件绑定值改变监听事件
- gridview控件自定义绑定,响应模板列按钮事件
- Android开发学习笔记:为动态添加的Spinner控件绑定数据源以及监听事件
- 如何在GridView的OnRowCommand事件 用FindControl找到模版控件?
- 动态生成控件-绑定事件(VB.NET/C#)
- 安卓中通过循环动态添加了一堆自定义的控件,怎么给这些控件绑定事件?
- gridview绑定checkbox控件后,通过单击CheckedChanged事件获取当前选择行的数据
- 总结了一下 GridView控件的常用事件触发时序
- 用JavaScript获取Gridview中某个触发事件控件的ID
- C#中控件动态添加事件绑定的时机详解
- jquery动态添加元素无法触发绑定事件的解决方案
- Android 动态创建Android控件、绑定事件处理的新方法