asp.net 2.0中gridview里嵌套dropdownlist

转载 2006年06月15日 10:08:00

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="Category Name">
                <ItemTemplate>
                   
<asp:DropDownList ID="DropDownList2" runat="server"></asp:DropDownList>
                </ItemTemplate>
            </asp:TemplateField>
                    
            <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)
    {
        GridView1.DataSource = GetDataSet().Tables[1];
//取第二张表Catagories的数据
        GridView1.DataBind();
    }

    //取了二张表,第一张Products 第二张Categories
    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 = ConfigurationManager.ConnectionStrings["northwindconnstr"].ToString();
        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
           
DropDownList ddl = (DropDownList)e.Row.FindControl("DropDownList1");
          
  //products表中,对应CategoryID = XX 的记录选出来,并加入MyTable
           
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();

            //处理DropDownList2           
            myTable = ds.Tables[1];
//把第二张表提出来
            DropDownList dd2 = (DropDownList)e.Row.FindControl("DropDownList2");
            dd2.DataSource = myTable;
            dd2.DataTextField = "CategoryName";
            dd2.DataValueField = "CategoryID";
            dd2.DataBind();

            for (int i = 0; i < dd2.Items.Count; i++) {
                if (Convert.ToInt32(dd2.Items[i].Value) == categoryID)
                {
                    dd2.Items[i].Selected = true;
                }
                else {
                    dd2.Items[i].Selected = false;
                }
            }
        }
    }

这里的原理大致如下:

首先,我们建立了一个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中去,最后将datatabledropdownlist绑定,就实现功能了

 

相关文章推荐

Repeater within ASP.NET 2.0 Gridview

Introduction This article and code snippet here shows how to bind a repeater control and Gridview c...

Asp.net 2.0 自定义控件开发[实现GridView多行表头固定表体滚动效果]

转载自:http://blog.csdn.net/lifuyun/article/details/1688008, 原博客中附有源代码   (一). 概述         1. 实现GridVi...

在ASP.NET 2.0中操作数据:在GridView控件中使用TemplateField

导言 GridView是由一组字段(Field)组成的,它们都指定的了来自DataSource中的什么属性需要用到自己的输出呈现中。最简单的字段类型是BoundField,它仅将数据简单的显...

ASP.NET 2.0 中动态添加 GridView 模板列的例子

TAG:ASP.NET 2.0 中动态添加 GridView 模板列的例子 动态添加列,关键是实现 ITemplate.InstantiateIn 方法。下面是一个添加 GridView...

Scott Mitchell 的ASP.NET 2.0数据教程之53:从GridView的页脚插入新记录 .

本章英文原版及代码下载: http://www.asp.net/learn/dataaccess/tutorial53cs.aspx?tabid=63 Scott Mitchell 的ASP.NE...

ASP.NET 2.0中将 GridView 导出到 Excel 文件中

TAG:ASP.NET 2.0中将 GridView 导出到 Excel 文件中 下面代码实现将 GridView 导出到 Excel文件中。 值得注意的是VerifyRenderin...

Collapsible GridView in ASP.Net 2.0

This article explains how to create a collapsible and expandable gridview in asp.net 2.0 using javas...

ASP.NET 2.0/3.5中直接操作Gridview控件插入新记录

ASP.NET 2.0/3.5中直接操作Gridview控件插入新记录发表:admin   阅读:469次  关键字:   字体:[大 中 小] 一、简介 从ASP.NET 2.0起引入了一批新的功能...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:asp.net 2.0中gridview里嵌套dropdownlist
举报原因:
原因补充:

(最多只允许输入30个字)