在DataGrid裡添加DropDownLit控制項

來源:互聯網
上載者:User
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:



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. Beca



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。