<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>

<%...@ 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>


/**//****************************************************
*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。前台代码如下:






























































接下来是关键,也就是后台代码,default.aspx.cs的代码如下:
















































































































































































