日期:2013-09-04  浏览次数:20349 次

在这里重要的不是要说明droplist再datagrid中的使用,而是主要看其中语句的几个特殊的用法,我会有注明的
Using DropDownList control in DataGrid
By Eric Zheng

When I was developing a web application couple days ago, I found some interesting things about the datagrid, I want to share them with other vs.net programmers, so I wrote this article. This article will demonstrate how to use DropDownList control in datagrid.



The essential part of the DropDown.aspx file is the following:

<asp:DropDownList id="DropDownList1" runat="server"
DataSource="<%#  GetCategory() %>"//****这里看下面的解释
DataTextField="categoryname"
DataValueField="categoryid"
SelectedIndex='<%# GetCategoryID((string)DataBinder.Eval(Container.DataItem, "categoryname")) %>' //***这里也看下面的解释
/>

In second line, we set the datasource of the dropdownlist control to a function 'GetCategory()', this function fetches the Category records from database and returns a datatable. In the last line, we set the SelectedIndex to a funciton 'GetCategoryID', this function takes the current Categoryname as its argument, and returns the locaiton(an integer) of the Categoryname, this enables the DorpDownList control to display the correct Categoryname for the current record.
The following is the C# code:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Configuration;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace Management
{
    
    public class DropDown : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.DataGrid ProductGrid;
        protected DataTable _category;

        //new a database class to get records, ProductDb is a public class
        //containing several functions
//相信Productb是作者自定义的类
        protected ProductDb pdb=new ProductDb();
    
        public DropDown()
        {
            Page.Init += new System.EventHandler(Page_Init);
        }

        private void Page_Load(object sender, System.EventArgs e)
        {
            if(!IsPostBack)
            {
                BindProduct();
                
            }
        }

        private void Page_Init(object sender, EventArgs e)
        {
            InitializeComponent();
        }

        void BindProduct()
        {
            //pdb.GetProduct() returns