现在的位置: 首页 > 综合 > 正文

asp.net 2.0中gridview里嵌套dropdownlist

2013年10月09日 ⁄ 综合 ⁄ 共 3603字 ⁄ 字号 评论关闭
 

在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;
    }

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

【上篇】
【下篇】

抱歉!评论已关闭.