为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
{
///

1<summary>   
2/// DataGridCustomColumn 的摘要说明。   
3/// </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("数据源不对。");
}

}

}
}

Aspx页面调用。

先注册:

** ``` @ Register TagPrefix="DrpColumn" NameSpace="CustomColumn" Assembly="DropDownListColumn"

1
2调用```
3@ Register TagPrefix="DrpColumn" NameSpace="CustomColumn" Assembly="DropDownListColumn" 

@ Register TagPrefix="DrpColumn" NameSpace="CustomColumn" Assembly="DropDownListColumn"

 1@ Register TagPrefix="DrpColumn" NameSpace="CustomColumn" Assembly="DropDownListColumn" 
 2```
 3```
 4<asp:datagrid allowpaging="True" autogeneratecolumns="False" bordercolor="#333333" borderstyle="Solid" cssclass="DataGrid" id="dgTeacher" runat="server" width="100%">
 5<columns>
 6<drpcolumn:dropdownlistcolumn headertext="导师"></drpcolumn:dropdownlistcolumn>
 7<asp:boundcolumn datafield="SpecName2" headertext="主修专业" readonly="True"></asp:boundcolumn>   
 8** <drpcolumn:dropdownlistcolumn datafield="SpecGUID" datashowfield="SpecName" headertext="兼岗专业"></drpcolumn:dropdownlistcolumn> **   
 9<asp:boundcolumn datafield="CreatedDT" dataformatstring="{0:d}" headertext="创建日期" readonly="True"></asp:boundcolumn>
10<asp:boundcolumn datafield="CreatedBY" headertext="创建者" readonly="True"></asp:boundcolumn>
11<asp:boundcolumn datafield="SrcIP" headertext="来源IP" readonly="True"></asp:boundcolumn>
12<asp:boundcolumn datafield="UpdatedBY" headertext="修改者" readonly="True"></asp:boundcolumn>
13<asp:editcommandcolumn buttontype="LinkButton" canceltext="取消" edittext="编辑" headertext="操作" updatetext="更新"></asp:editcommandcolumn>
14<asp:buttoncolumn commandname="Delete" headertext="操作" text="&lt;span OnClick='return confirmdel();'&gt;删除&lt;/span&gt;"></asp:buttoncolumn>
15</columns>
16<pagerstyle mode="NumericPages"></pagerstyle>
17</asp:datagrid>
18```
19![显示时](http://dev.csdn.net/article/35/file:///C:/Documents%20and%20Settings/Feasy/My%20Documents/My%20Pictures/1.JPG) ![](http://dev.csdn.net/article/35/file:///C:/Documents%20and%20Settings/Feasy/My%20Documents/My%20Pictures/2.JPG)
Published At
Categories with Web编程
Tagged with
comments powered by Disqus