向GridView动态增加一列,DropDownList控件及Header
2007-04-22 19:30
344 查看
google_ad_client = "pub-2048279401139630";google_ad_slot = "8856771542";google_ad_width = 728;google_ad_height = 90;document.write("");
因为在做项目的时候需要在gridview动态增加一列,也就是带有操作列表的DropDownList。现在将我的方法说出来和大家分享一下,如果有好的方法,希望能告诉我。
首先在网站项目里添加一个新项,就是web窗体default.aspx。前台代码如下:
<%...@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script language="javascript" type="text/javascript">...
//<!CDATA[
这段代码就是重置DropDownList控件
如果需要执行选定的动作,需要弹出确认窗口,否则就将选择的项
重置到第一个项
**/
function ResetDDL(obj)
...{
if(obj.selectedIndex==0)
...{
window.alert("请选择您需要的操作!");
this.focus();
return;
}
bool=confirm('您确定执行此操作吗?');
if(!bool)
...{
obj.selectedIndex=0;
}
}
//]]>
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<asp:GridView ID="gvUser" runat="server" AllowPaging="True" AutoGenerateColumns="False"
CellPadding="4" ForeColor="#333333" GridLines="None" OnDataBound="gvUser_DataBound"
OnPageIndexChanging="gvUser_PageIndexChanging" OnRowCreated="gvUser_RowCreated">
<FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
<Columns>
<asp:BoundField DataField="Id" HeaderText="用户ID" />
<asp:BoundField DataField="UserName" HeaderText="姓名" />
<asp:BoundField DataField="Sex" HeaderText="性别" />
<asp:BoundField DataField="Addr" HeaderText="详细地址" />
</Columns>
<RowStyle BackColor="#E3EAEB" />
<EditRowStyle BackColor="#7C6F57" />
<SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />
<PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
<HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>
</form>
</body>
</html>
接下来是关键,也就是后台代码,default.aspx.cs的代码如下:
/**//****************************************************
*Author:水若寒
*QQ:49940396
*Date:2007-04-22
****************************************************/
using System;
using System.Data;
using System.Configuration;
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;
using System.Collections.Generic;
using System.Collections;
public partial class _Default : System.Web.UI.Page
...{
protected void Page_Load(object sender, EventArgs e)
...{
if (!IsPostBack)
...{
Bind();//此处就是首次加载页面的时候绑定GridView
}
}
protected void Bind()
...{
this.gvUser.DataSource = CreateDataSource();
this.gvUser.DataBind();
}
protected void gvUser_PageIndexChanging(object sender, GridViewPageEventArgs e)
...{
this.gvUser.PageIndex = e.NewPageIndex;
Bind();
}
/**//// <summary>
/// 此处创建数据源,用户可以根据需要创建自己的数据源。
/// </summary>
/// <returns>返回一个实现ICollection的DataView数据源</returns>
protected ICollection CreateDataSource()
...{
DataTable dtUser = new DataTable();
DataColumn dc;
DataRow dr;
Random r;
//Create a new datacolumn whose name is ID
dc = new DataColumn("ID", typeof(System.Int32));
dc.AutoIncrement = true;
dc.AutoIncrementSeed = 1;
dtUser.Columns.Add(dc);
dc = new DataColumn("UserName", typeof(System.String));
dtUser.Columns.Add(dc);
dc = new DataColumn("Sex", typeof(System.String));
dtUser.Columns.Add(dc);
dc = new DataColumn("Addr", typeof(System.String));
dtUser.Columns.Add(dc);
r = new Random(1000);
for (int i = 0; i < 1000; i++)
...{
dr = dtUser.NewRow();
switch (i % 3)
...{
case 0:
dr["UserName"] = "水若寒" + r.Next(100, 200).ToString();
dr["Sex"] = "男";
dr["Addr"] = "北京市朝阳区";
break;
case 1:
dr["UserName"] = "Eyis" + r.Next(300, 400).ToString();
dr["Sex"] = "男";
dr["Addr"] = "北京市通州区";
break;
case 2:
dr["UserName"] = "Juics" + r.Next(500, 600).ToString();
dr["Sex"] = "女";
dr["Addr"] = "北京市朝阳区赵公村";
break;
}
dtUser.Rows.Add(dr);
}
return dtUser.DefaultView;
}
/**//// <summary>
/// 在RowCreated事件中动态添加DropDownList以及Header
/// 思路如下:
/// 首先,通过创建一个TableCell对象作为DropDownList对象的容器
/// 接着,创建DropDownList控件,根据需要对其项进行初始化
/// 然后,将DropDownList对象的AutoPostBack属性打开,这样可以自动回发
/// 添加对DropDownList的OnSelectedIndexChanged的时间委托
/// 然后,将DropDownList控件添加到刚才的TableCell对象中
/// 最后,通过e.Row.RowType为DataRow时将TableCell对象添加到GridView的列中
/// 接下来,就是添加GridView的Header的值方法类似
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void gvUser_RowCreated(object sender, GridViewRowEventArgs e)
...{
if (e.Row.RowType == DataControlRowType.DataRow)
...{
TableCell tc = new TableCell();
DropDownList ddlOP = new DropDownList();//创建一个DropDownList对象
ListItem[] ltc = ...{
new ListItem("-----请选择-----","0"),
new ListItem("从展厅入库","1"),
new ListItem("从展厅撤出", "2"),
new ListItem("从库房借出", "3"),
new ListItem("从库房入库", "4")
};//创建一个ListItem的数组,并且初始化值,可以根据实际需要进行修改
ddlOP.Items.AddRange(ltc);
ddlOP.ID = "OP";
ddlOP.AutoPostBack = true;
ddlOP.EnableViewState = true;
ddlOP.Attributes.Add("onchange", "ResetDDL(this);");//通过添加自定义的js函数来确定用户是否执行操作
ddlOP.SelectedIndexChanged += new EventHandler(ddlOP_SelectedIndexChanged);//此处通过添加委托来处理SelectedIndexChanged事件
tc.Controls.Add(ddlOP);
e.Row.Cells.Add(tc);
}
if (e.Row.RowType == DataControlRowType.Header)
...{
TableCell tcHeader = new TableCell();
Literal lit = new Literal();
lit.Text = "操作";
tcHeader.Controls.Add(lit);
tcHeader.HorizontalAlign = HorizontalAlign.Center;
e.Row.Cells.Add(tcHeader);
}
}
/**//// <summary>
/// 这里就是处理动态添加对DropDownList控件的OnSelectedIndexChanged事件处理函数了
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void ddlOP_SelectedIndexChanged(object sender, EventArgs e)
...{
DropDownList ddlOp = sender as DropDownList;//将sender转换成DropDownList对象
GridViewRow gvr;
gvr = (GridViewRow)ddlOp.Parent.Parent;//此处最为关键,就是获取DropDownList对象所在的GridViewRow对象
Response.Write(ddlOp.SelectedValue+"====="+this.gvUser.Rows[gvr.RowIndex].Cells[0].Text);//此处可以获取当前选取的Value的值和DropDownList所在行的Id的值
}
}
因为在做项目的时候需要在gridview动态增加一列,也就是带有操作列表的DropDownList。现在将我的方法说出来和大家分享一下,如果有好的方法,希望能告诉我。
首先在网站项目里添加一个新项,就是web窗体default.aspx。前台代码如下:
<%...@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script language="javascript" type="text/javascript">...
//<!CDATA[
这段代码就是重置DropDownList控件
如果需要执行选定的动作,需要弹出确认窗口,否则就将选择的项
重置到第一个项
**/
function ResetDDL(obj)
...{
if(obj.selectedIndex==0)
...{
window.alert("请选择您需要的操作!");
this.focus();
return;
}
bool=confirm('您确定执行此操作吗?');
if(!bool)
...{
obj.selectedIndex=0;
}
}
//]]>
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<asp:GridView ID="gvUser" runat="server" AllowPaging="True" AutoGenerateColumns="False"
CellPadding="4" ForeColor="#333333" GridLines="None" OnDataBound="gvUser_DataBound"
OnPageIndexChanging="gvUser_PageIndexChanging" OnRowCreated="gvUser_RowCreated">
<FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
<Columns>
<asp:BoundField DataField="Id" HeaderText="用户ID" />
<asp:BoundField DataField="UserName" HeaderText="姓名" />
<asp:BoundField DataField="Sex" HeaderText="性别" />
<asp:BoundField DataField="Addr" HeaderText="详细地址" />
</Columns>
<RowStyle BackColor="#E3EAEB" />
<EditRowStyle BackColor="#7C6F57" />
<SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />
<PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
<HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>
</form>
</body>
</html>
接下来是关键,也就是后台代码,default.aspx.cs的代码如下:
/**//****************************************************
*Author:水若寒
*QQ:49940396
*Date:2007-04-22
****************************************************/
using System;
using System.Data;
using System.Configuration;
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;
using System.Collections.Generic;
using System.Collections;
public partial class _Default : System.Web.UI.Page
...{
protected void Page_Load(object sender, EventArgs e)
...{
if (!IsPostBack)
...{
Bind();//此处就是首次加载页面的时候绑定GridView
}
}
protected void Bind()
...{
this.gvUser.DataSource = CreateDataSource();
this.gvUser.DataBind();
}
protected void gvUser_PageIndexChanging(object sender, GridViewPageEventArgs e)
...{
this.gvUser.PageIndex = e.NewPageIndex;
Bind();
}
/**//// <summary>
/// 此处创建数据源,用户可以根据需要创建自己的数据源。
/// </summary>
/// <returns>返回一个实现ICollection的DataView数据源</returns>
protected ICollection CreateDataSource()
...{
DataTable dtUser = new DataTable();
DataColumn dc;
DataRow dr;
Random r;
//Create a new datacolumn whose name is ID
dc = new DataColumn("ID", typeof(System.Int32));
dc.AutoIncrement = true;
dc.AutoIncrementSeed = 1;
dtUser.Columns.Add(dc);
dc = new DataColumn("UserName", typeof(System.String));
dtUser.Columns.Add(dc);
dc = new DataColumn("Sex", typeof(System.String));
dtUser.Columns.Add(dc);
dc = new DataColumn("Addr", typeof(System.String));
dtUser.Columns.Add(dc);
r = new Random(1000);
for (int i = 0; i < 1000; i++)
...{
dr = dtUser.NewRow();
switch (i % 3)
...{
case 0:
dr["UserName"] = "水若寒" + r.Next(100, 200).ToString();
dr["Sex"] = "男";
dr["Addr"] = "北京市朝阳区";
break;
case 1:
dr["UserName"] = "Eyis" + r.Next(300, 400).ToString();
dr["Sex"] = "男";
dr["Addr"] = "北京市通州区";
break;
case 2:
dr["UserName"] = "Juics" + r.Next(500, 600).ToString();
dr["Sex"] = "女";
dr["Addr"] = "北京市朝阳区赵公村";
break;
}
dtUser.Rows.Add(dr);
}
return dtUser.DefaultView;
}
/**//// <summary>
/// 在RowCreated事件中动态添加DropDownList以及Header
/// 思路如下:
/// 首先,通过创建一个TableCell对象作为DropDownList对象的容器
/// 接着,创建DropDownList控件,根据需要对其项进行初始化
/// 然后,将DropDownList对象的AutoPostBack属性打开,这样可以自动回发
/// 添加对DropDownList的OnSelectedIndexChanged的时间委托
/// 然后,将DropDownList控件添加到刚才的TableCell对象中
/// 最后,通过e.Row.RowType为DataRow时将TableCell对象添加到GridView的列中
/// 接下来,就是添加GridView的Header的值方法类似
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void gvUser_RowCreated(object sender, GridViewRowEventArgs e)
...{
if (e.Row.RowType == DataControlRowType.DataRow)
...{
TableCell tc = new TableCell();
DropDownList ddlOP = new DropDownList();//创建一个DropDownList对象
ListItem[] ltc = ...{
new ListItem("-----请选择-----","0"),
new ListItem("从展厅入库","1"),
new ListItem("从展厅撤出", "2"),
new ListItem("从库房借出", "3"),
new ListItem("从库房入库", "4")
};//创建一个ListItem的数组,并且初始化值,可以根据实际需要进行修改
ddlOP.Items.AddRange(ltc);
ddlOP.ID = "OP";
ddlOP.AutoPostBack = true;
ddlOP.EnableViewState = true;
ddlOP.Attributes.Add("onchange", "ResetDDL(this);");//通过添加自定义的js函数来确定用户是否执行操作
ddlOP.SelectedIndexChanged += new EventHandler(ddlOP_SelectedIndexChanged);//此处通过添加委托来处理SelectedIndexChanged事件
tc.Controls.Add(ddlOP);
e.Row.Cells.Add(tc);
}
if (e.Row.RowType == DataControlRowType.Header)
...{
TableCell tcHeader = new TableCell();
Literal lit = new Literal();
lit.Text = "操作";
tcHeader.Controls.Add(lit);
tcHeader.HorizontalAlign = HorizontalAlign.Center;
e.Row.Cells.Add(tcHeader);
}
}
/**//// <summary>
/// 这里就是处理动态添加对DropDownList控件的OnSelectedIndexChanged事件处理函数了
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void ddlOP_SelectedIndexChanged(object sender, EventArgs e)
...{
DropDownList ddlOp = sender as DropDownList;//将sender转换成DropDownList对象
GridViewRow gvr;
gvr = (GridViewRow)ddlOp.Parent.Parent;//此处最为关键,就是获取DropDownList对象所在的GridViewRow对象
Response.Write(ddlOp.SelectedValue+"====="+this.gvUser.Rows[gvr.RowIndex].Cells[0].Text);//此处可以获取当前选取的Value的值和DropDownList所在行的Id的值
}
}
相关文章推荐
- 类似微信查看群所有成员的动态伸展GridView,ScrollView做父控件(最后增加一个可添加的图片)
- 动态合并或定制GridView控件Header头某些列
- 动态绑数据(GridView控件Header和ItemTemplate)
- 动态合并或定制GridView控件Header头某些列
- Asp.net 2.0 自定义控件开发[创建自定义HeaderRow的GridView控件][示例代码下载]
- 在GridView控件中的HeaderTemplate模板上添加的CheckBox控件无法引发AutoPostback事件,或无规律的引发,不正常的引发
- GridView动态增加行列
- GridView控件编辑、更新、删除示例(更新包含有DropDownList控件使用)、导出Excel
- 关于GridView RowUpdating事件中处理一些前台特殊控件,例如 下拉框DropDownList 等等
- Activity 中动态增加控件
- GridView控件修改、删除示例(修改含有DropDownList控件)
- Asp.net 2.0 自定义控件开发[创建自定义HeaderRow的GridView控件][示例代码下载]
- 上接扩展GridView控件(9) - 给数据行增加右键菜单
- 扩展GridView控件(索引) - 增加多个常用功能
- Asp.net 2.0 自定义控件开发[创建自定义HeaderRow的GridView控件][示例代码下载]
- Asp.net 2.0 自定义控件开发[创建自定义HeaderRow的GridView控件][示例代码下载]
- 动态为datagrid增加控件
- ASP.NET 页面中动态增加的控件、添加事件第1/2页
- Silverlight 在Grid中动态增加控件并排版
- 将 TemplateField 字段列动态添加到 GridView 控件