在asp.net 2.0中,在一個gridview里,可以嵌套進一個dropdownlist,這是十分容易的事情,而這里講的是,
在每個dropdownlist里,都綁定的是不同的內容,比如在northwind數據庫中,可以用gridview顯示出
每個category類別,同時每一行的category類別里可以已dropdonwlist下拉框的形式,列出該分類下的所有
產品.下面介紹實現的方法
首先是頁面部分的代碼
<asp:gridview id="gridview1" runat="server" autogeneratecolumns="false" onrowdatabound="gridview1_rowdatabound">
<columns>
<asp:boundfield datafield="categoryid" headertext="categoryid" />
<asp:boundfield datafield="categoryname" headertext="category name" />
<asp:templatefield headertext="products">
<itemtemplate>
<asp:dropdownlist id="dropdownlist1" runat="server">
</asp:dropdownlist>
</itemtemplate>
</asp:templatefield>
</columns>
</asp:gridview>
在codebehind部分,
protected void page_load(object sender, eventargs e)
{
if (!page.ispostback)
{
// this is because table[1] contains categories
gridview1.datasource = getdataset().tables[1];
gridview1.databind();
}
}
private dataset getdataset()
{
string query = @"select p.categoryid,p.productid, p.productname from products p
select c.categoryid,c.categoryname 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時,我們用
gridview1.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");
mytable.columns.add(productidcolumn);
mytable.columns.add(productnamecolumn);
dataset ds = new dataset();
ds = getdataset();
int categoryid = 0;
string expression = string.empty;
if (e.row.rowtype == datacontrolrowtype.datarow)
{
categoryid = int32.parse(e.row.cells[0].text);
expression = "categoryid = " + categoryid;
dropdownlist ddl = (dropdownlist)e.row.findcontrol("dropdownlist1");
datarow[] rows = ds.tables[0].select(expression);
foreach (datarow row in rows)
{
datarow newrow = mytable.newrow();
newrow["productid"] = row["productid"];
newrow["productname"] = row["productname"];
mytable.rows.add(newrow);
}
ddl.datasource = mytable;
ddl.datatextfield = "productname";
ddl.datavaluefield = "productid";
ddl.databind();
}
}
這里的原理大致如下:
首先,我們建立了一個datatable,包含了productid,productname列,然后將其與 gridview綁定,之后再用
categoryid = int32.parse(e.row.cells[0].text);
expression = "categoryid = " + categoryid;
構造一個篩選表達式,這里指定為categoryid,然后通過
dropdownlist ddl = (dropdownlist)e.row.findcontrol("dropdownlist1");
datarow[] rows = ds.tables[0].select(expression);
,找出符合其類別等于某一categoryid的所有產品,這里構造出datarow集合了,最后,使用循環
,將某類別下的產品全部添加到datatable中去,最后將datatable和dropdownlist綁定,就實現功能了
新聞熱點
疑難解答
圖片精選