您的位置:首页 > 编程语言 > ASP

ASP.NET 2.0 中动态添加 GridView 模板列的例子

2006-09-13 09:37 537 查看
动态添加列,关键是实现 ITemplate.InstantiateIn 方法。下面是一个添加 GridView 模板列的例子。

C#代码




<%...@ Page Language="C#" %>




<%...@ Import Namespace="System.Data" %>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">






<script runat="server">...


ICollection CreateDataSource()




...{


DataTable dt = new DataTable();


DataRow dr;


dt.Columns.Add(new DataColumn("id", typeof(Int32)));


dt.Columns.Add(new DataColumn("text", typeof(string)));


for (int i = 0; i < 6; i++)




...{


dr = dt.NewRow();


dr[0] = i;


dr[1] = "列表项目 " + i.ToString();


dt.Rows.Add(dr);


}


DataView dv = new DataView(dt);


return dv;


}




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 = columnName;


container.Controls.Add(lc);


break;


case DataControlRowType.DataRow:


DropDownList drr = new DropDownList();


drr.ID = "dropdown";


drr.AppendDataBoundItems = true;


drr.Items.Add(new ListItem("-----请选择------",""));


drr.Items.Add(new ListItem("AA", "a"));


drr.Items.Add(new ListItem("BB", "b"));


drr.Items.Add(new ListItem("CC", "c"));


container.Controls.Add(drr);


break;


default:


break;


}


}


}





protected void Page_Load(object sender, EventArgs e)




...{


if (!IsPostBack)




...{


TemplateField customField = new TemplateField();


customField.ShowHeader = true;


customField.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "动态添加列");


customField.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, "");


GridView1.Columns.Add(customField);


GridView1.DataSource = CreateDataSource();


GridView1.DataBind();


}


}




protected void GridView1_RowDataBound( object sender, GridViewRowEventArgs e )




...{


if (e.Row.RowType == DataControlRowType.DataRow)




...{


//可以在这里访问数据库的其它字段的值,可以设置默认选择项,具体应用,看自己的发挥了。


//下面只是例子,举一反三,不再费话了


DataRowView gv = (DataRowView)e.Row.DataItem;


int itemSeleted = Int32.Parse(gv.Row["id"].ToString()) > 3 ? 0 : Int32.Parse(gv.Row["id"].ToString());


DropDownList dr = (DropDownList)e.Row.FindControl("dropdown");


dr.SelectedIndex = itemSeleted;


}


}


</script>




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


<head id="Head1" runat="server">


<title>GridView动态添加模板列的例子</title>


</head>


<body>


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


<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"


OnRowDataBound="GridView1_RowDataBound">


<Columns>


<asp:BoundField HeaderText="标题" DataField="text"/>


</Columns>


</asp:GridView>


</form>


</body>


</html>



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: