<script type="text/javascript">google_ad_client = "pub-2048279401139630";google_ad_slot = "8856771542";google_ad_width = 728;google_ad_height = 90;document.write("<s"+"cript type='text/javascript' s"+"rc='http://pagead2.googlesyndication.com/pagead/show_ads"+"."+"js'></scr"+"ipt>");</script>
/**/ /****************************************************
*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 >
<! 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的值
}
}