爲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 = dr[DataValueField].ToString(); 
drp.Items.Add(item); 
}

DGI =(DataGridItem)cell.NamingContainer ;

string Value = DataBinder.Eval(DGI.DataItem,DataField).ToString();

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

item.Selected = true; 


catch 

throw new Exception("數據源不對。"); 
}

}



}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章