在asp.net 2.0中,在一个gridview里,可以嵌套进一个dropdownlist,这是十分容易的事情,而这里讲的是,
在每个dropdownlist里,都绑定的是不同的内容,比如在northwind数据库中,可以用GRIDVIEW显示出
每个category类别,同时每一行的category类别里可以已dropdonwlist下拉框的形式,列出该分类下的所有
产品.下面介绍实现的方法
首先是页面部分的代码
在codebehind部分,
protected void Page_Load(object sender, EventArgs e)
{
if (!Pa***IsPostBack)
{
// This is because Table[1] contains Categories
Gr***iew1.DataSource = GetDataSet().Tables[1];
Gr***iew1.DataBind();
}
}
private DataSet GetDataSet()
{
string query = @"SELECT p.***egoryID,p.***ductID, p.***ductName FROM Products p
SELECT c.***egoryID,c.***egoryName FROM Categories c";
string connectionString = "Server=localhost;Database=Northwind;user id=sa;password=123456";
SqlConnection myConnection = new SqlConnection(connectionString);
SqlDataAdapter ad = new SqlDataAdapter(query, myConnection);
DataSet ds = new DataSet();
ad.Fill(ds);
return ds;
}
在上面的代码中,首先我们通过典型的dataset返回,绑定到gridview上去,注意这里sql语句里有两句,第一句是返回产品,第二句是返回所有的类别category,而在绑定gridview时,我们用
Gr***iew1.DataSource = GetDataSet().Tables[1];,将第一个table表里的category记录绑定到gridview里去,接下来,我们要处理模版列中的dropdownlist了,这个可以在row_databound事件中写入代码,如下
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
DataTable myTable = new DataTable();
DataColumn productIDColumn = new DataColumn("ProductID");
DataColumn productNameColumn = new DataColumn("ProductName");
my***le.Columns.Add(productIDColumn);
my***le.Columns.Add(productNameColumn);
DataSet ds = new DataSet();
ds = GetDataSet();
int categoryID = 0;
string expression = St***g.Empty;
if (e.***.RowType == Da***ontrolRowType.DataRow)
{
categoryID = In***.Parse(e.***.Cells[0].Text);
expression = "CategoryID = " + categoryID;
DropDownList ddl = (DropDownList)e.***.FindControl("DropDownList1");
DataRow[] rows = ds***bles[0].Select(expression);
foreach (DataRow row in rows)
{
DataRow newRow = my***le.NewRow();
newRow["ProductID"] = row["ProductID"];
newRow["ProductName"] = row["ProductName"];
my***le.Rows.Add(newRow);
}
dd***ataSource = myTable;
dd***ataTextField = "ProductName";
dd***ataValueField = "ProductID";
dd***ataBind();
}
}
这里的原理大致如下:
首先,我们建立了一个datatable,包含了productid,productname列,然后将其与 gridview绑定,之后再用
categoryID = In***.Parse(e.***.Cells[0].Text);
expression = "CategoryID = " + categoryID;
构造一个筛选表达式,这里指定为categoryID,然后通过
DropDownList ddl = (DropDownList)e.***.FindControl("DropDownList1");
DataRow[] rows = ds***bles[0].Select(expression);
,找出符合其类别等于某一categoryID的所有产品,这里构造出datarow集合了,最后,使用循环
,将某类别下的产品全部添加到datatable中去,最后将datatable和dropdownlist绑定,就实现功能了
下一篇: 编写高性能Web应用程序的10个技巧