动态生成TemplateField无法触发模板内的RowCommand

LEOlws 2010-07-05 06:27:02
我Grid的列是动态生成的TemplateField,其中TemplateField中是创建的按钮并设置了按钮的CommandName属性
但是在页面上触发按钮时,由于控件的状态未保存,无法回传到RowCommand事件

请问大家,如何保存动态生成的TemplateField的状态,或者有更好的触发RowCommand事件的方法。谢谢

我给分从来不吝啬,望大家不吝赐教

代码如下:

ASPX页面

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="SystemManagement_SmartForms_Default2" %>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">
<title>TemplateField</title>
</head>

<body>

<form id="form1" runat="server">

<div>

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="id"
DataSourceID="SqlDataSource1" OnRowCommand="GridView1_RowCommand">

</asp:GridView>
<asp:Button ID="Button1" runat="server" Text="Button" />

</div>

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:default %>"
ProviderName="<%$ ConnectionStrings:default.ProviderName %>" SelectCommand="SELECT [id], [name] FROM [SmartFormsTest]"></asp:SqlDataSource>

</form>

</body>

</html>




CS页面

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class SystemManagement_SmartForms_Default2 : System.Web.UI.Page {

protected void Page_Load(object sender, EventArgs e) {

}

protected override void OnInit(EventArgs e) {
if (!IsPostBack) {

//宣告TemplateField
TemplateField customField;

//產生一個新的TemplateField
customField = new TemplateField();

//設定TemplateField的Header
customField.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "編號");

//設定TemplateField的Data
customField.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, "id");

//加入TemplateField到GridView
this.GridView1.Columns.Add(customField);

customField = new TemplateField();
customField.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "名稱");
customField.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, "name");
this.GridView1.Columns.Add(customField);


}
base.OnInit(e);
}



protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) {
string commandString = string.Empty;
if (e.CommandName == "DeleteCommand") {
commandString = "删除";
}
this.Page.ClientScript.RegisterStartupScript(Page.GetType(), "alert", "alert('" + "这是得到的Command" + commandString + "')", true);
}
}

public class GridViewTemplate : ITemplate {

private DataControlRowType templateType;
private string columnName;

public GridViewTemplate(DataControlRowType type, string colname) {
templateType = type;
columnName = colname;
}

public void InstantiateIn(System.Web.UI.Control container) {
switch (templateType) {
case DataControlRowType.Header:

Literal lc = new Literal();

lc.Text = "<B>" + columnName + "</B>";

container.Controls.Add(lc);

break;

case DataControlRowType.DataRow:

Button data = new Button();
data.Text = "click me";
data.CommandName = "DeleteCommand";


data.DataBinding += new EventHandler(data_DataBinding);

container.Controls.Add(data);

break;


default:

break;
}
}

private void data_DataBinding(object sender, EventArgs e) {
Button l = (Button)sender;

GridViewRow row = (GridViewRow)l.NamingContainer;

l.Text = DataBinder.Eval(row.DataItem, columnName).ToString();
}
}




...全文
206 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
LEOlws 2010-07-06
  • 打赏
  • 举报
回复
嗯,解决了,我之前在pageload中只是动态创建了栏,但是没有绑定数据,数据是在触发按钮之后才绑定的,可能正因这些,我在之后刷新页面时,所有的内容都不见了
我现在Pageload中加上Grid的DataBind事件,问题就得到了解决。只不过查询条件是1<>1 这也是业务要求这样,首之进来不显示数据。
感谢楼上二位
jm_qinqin 2010-07-05
  • 打赏
  • 举报
回复
那是在Load事件中去写的,不需要在你的方法写啊!
LEOlws 2010-07-05
  • 打赏
  • 举报
回复
为嘛我加到项目中就不行呢,我还得试试
阿非 2010-07-05
  • 打赏
  • 举报
回复
if (!IsPostBack) {

去掉

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧