中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > Web开发 > Asp > 综合文章
在DataGrid里添加DropDownLit控件【转贴】
作者:未知 时间:2004-08-10 12:12 出处:Blog 责编:chinaitpower
              摘要:暂无

http://www.csharphelp.com/archives/archive212.html

?

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:


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
		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 a datatable to Product's datagrid
			ProductGrid.DataSource=pdb.GetProduct();
			ProductGrid.DataBind();
		}

		protected void Product_Edit(object sender, DataGridCommandEventArgs e)
		{
			
			BindCategory();
			((DataGrid)sender).EditItemIndex=e.Item.ItemIndex;
			BindProduct();

		}

		protected void Product_Cancel(object sender, DataGridCommandEventArgs e)
		{
			ProductGrid.EditItemIndex=-1;
			BindProduct();

		}
		protected void Product_Update(object sender, DataGridCommandEventArgs e)
		{
			//get the currnet product name
			string pname=e.Item.Cell[1].Controls[0].Text;
			//get the current product price
			string price=e.Item.Cell[2].Controls[0].Text;
			//get the current categoryid
	DropDownList ddl=(DropDownList)e.Item.Cells[3].FindControl("DropDownList1");
			string categoryid=ddl.SelectedItem.Value;
			//get the current productid
			string pid=e.Item.Cell[4].Controls[0].Text;

			//call pdb's update function
			pdb.update(pid,pname,price,categoryid);
			
			ProductGrid.EditItemIndex=-1;
			BindProduct();

			
		}
		void BindCategory()
		{
			//pdb.FetchCategory() returns a datatable
			_category=pdb.FetchCategory();
					
		}

		protected DataTable GetCategory()
		{
			return _category;
		}

		protected int GetCategoryID(string cname)
		{
			for(int i=0;i<_category.DefaultView.Count;i++)
			{
			if (_category.DefaultView[i]["categoryname"].ToString()==cname)
				{
					return i;
				}
			}
			return 0;
				
		}



		#region Web Form Designer generated code
		/// 
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// 
		private void InitializeComponent()
		{    
			this.Load += new System.EventHandler(this.Page_Load);

		}
		#endregion

		
	}
}

The key points of this C# file are:

1.In Product_Edit() function, you have to call BindCategory() to set the _category datatable first, and then set the EditItemIndex for the datagrid, and at last, call BindProduct() function. The DropDownList control will not display anyting if you reverse this order. Because once you set the EditItemIndex, the datagrid begings rendering records, and at the same time, the DropDownList control access the function 'GetCategory()' to get the data source, if 'GetCategory()' returns nothing, you will not get anything of course. Just remember: before setting EditItemIndex of datagrid, set the data source of the control.

2.In Product_Update() function, You have no access to the DropDownList control directly which is embeded in the datagrid, the solution of getting the selected value of DropDownList control is the 'FindControl()' function. This function takes the DropDownList control's name as its argument, and return the DropDownList control it found, so that you can use the return control to get the selected value. Just remember: use FindControl() function to return any control you want to find in the datagrid, such as text box, text area, label, calendar.

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有