首页 > 代码库 > 为DataGrid 写一个 DropDownListColumn

为DataGrid 写一个 DropDownListColumn

Net下有一个类DataGridColumn

作为 DataGrid 控件的不同列类型的基类。

有关此类型全部成员的列表。请參阅 DataGridColumn 成员。

System.Object 
System.Web.UI.WebControls.DataGridColumn 
System.Web.UI.WebControls.BoundColumn 
System.Web.UI.WebControls.ButtonColumn 
System.Web.UI.WebControls.EditCommandColumn 
System.Web.UI.WebControls.HyperLinkColumn 
System.Web.UI.WebControls.TemplateColumn

我们完毕能够写一个继承DataGirdColumn的类,这样就成了。DropDownListColumn,CheckBoxListColumn等。

控件的代码例如以下。

using System; 
using System.Web.UI; 
using System.Web.UI.WebControls ; 
using System.Collections ; 
using System.Data ;


namespace CustomColumn 

/// <summary> 
/// DataGridCustomColumn 的摘要说明。 
/// </summary> 
public class DropDownListColumn :System.Web.UI.WebControls.DataGridColumn 

//数据源 
public DataTable DataSource ; 
//显示的文本字段 
public string DataTextField ; 
// 
public string DataValueField ;

//DataGrid中要绑定的字段

public string DataField ;


public string DataShowField;


public DropDownListColumn() 

// 
// TODO: 在此处加入构造函数逻辑 
//


}

public override void InitializeCell(TableCell cell, int columnIndex, ListItemType itemType) 

base.InitializeCell (cell, columnIndex, itemType); 
switch(itemType) 

case ListItemType.Header : 
cell.Text = this.HeaderText ; 
break;

case ListItemType.Item:case ListItemType.AlternatingItem : 
cell.DataBinding +=new EventHandler(cell_ItemDataBinding); 
break;

case ListItemType.EditItem : 
cell.DataBinding +=new EventHandler(cell_EditItemDataBinding); 
//======================== 
DropDownList drp = new DropDownList(); 
cell.Controls.Add(drp); 
break;



}

private void cell_ItemDataBinding(object sender, EventArgs e) 

TableCell cell =(TableCell)sender ; 
DataGridItem DGI =(DataGridItem)cell.NamingContainer ; 
try 

cell.Text = (DataBinder.Eval(DGI.DataItem,DataShowField)).ToString(); 

catch 

throw new Exception("请设置字段"); 

}

private void cell_EditItemDataBinding(object sender,EventArgs e) 

TableCell cell =(TableCell)sender ; 
DropDownList drp =(DropDownList)cell.Controls[0]; ; 
ListItem item ; 
DataGridItem DGI ; 
try 
{

//================ 
drp.Items.Add(new ListItem("请选择","-1")); 
//

for(int k=0;k<=DataSource.Rows.Count -1;k++) 

DataRow dr = DataSource.Rows[k]; 
item = new ListItem(); 
item.Text = dr[DataTextField].ToString(); 
item.Value = http://www.mamicode.com/dr[DataValueField].ToString();
drp.Items.Add(item); 
}

DGI =(DataGridItem)cell.NamingContainer ;

string Value = http://www.mamicode.com/DataBinder.Eval(DGI.DataItem,DataField).ToString();

item = drp.Items.FindByValue(Value); 
if(item!=null) 

item.Selected = true; 


catch 

throw new Exception("数据源不正确。"); 
}

}



}

为DataGrid 写一个 DropDownListColumn