首页 > 编程 > .NET > 正文

asp.net 2.0中gridview里嵌套dropdownlist

2024-07-10 13:11:01
字体:
来源:转载
供稿:网友

在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绑定,就实现功能了

中国最大的web开发资源网站及技术社区,
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表