为DataGrid 写一个 DropDownListColumn

本文围绕.NET展开,介绍了DataGridColumn作为DataGrid控件不同列类型的基类,可通过继承它创建自定义列,如DropDownListColumn、CheckBoxListColumn等。给出了自定义列的代码实现,还说明了在Aspx页面的注册和调用方法。

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("数据源不对。");
}

}


}
}

Aspx页面调用。

先注册:

<%@ Register TagPrefix="DrpColumn" NameSpace="CustomColumn" Assembly="DropDownListColumn" %>

调用

<asp:DataGrid id="dgTeacher" runat="server" Width="100%" AutoGenerateColumns="False" AllowPaging="True"
CssClass="DataGrid" BorderColor="#333333" BorderStyle="Solid">
<Columns>
<DrpColumn:DropDownListColumn HeaderText="导师"></DrpColumn:DropDownListColumn>
<asp:BoundColumn DataField="SpecName2" ReadOnly="True" HeaderText="主修专业"></asp:BoundColumn>
<DrpColumn:DropDownListColumn DataShowField="SpecName" DataField="SpecGUID" HeaderText="兼岗专业"></DrpColumn:DropDownListColumn>
<asp:BoundColumn DataField="CreatedDT" ReadOnly="True" HeaderText="创建日期" DataFormatString="{0:d}"></asp:BoundColumn>
<asp:BoundColumn DataField="CreatedBY" ReadOnly="True" HeaderText="创建者"></asp:BoundColumn>
<asp:BoundColumn DataField="SrcIP" ReadOnly="True" HeaderText="来源IP"></asp:BoundColumn>
<asp:BoundColumn DataField="UpdatedBY" ReadOnly="True" HeaderText="修改者"></asp:BoundColumn>
<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" HeaderText="操作" CancelText="取消" EditText="编辑"></asp:EditCommandColumn>
<asp:ButtonColumn Text="&lt;span OnClick='return confirmdel();'&gt;删除&lt;/span&gt;" HeaderText="操作"
CommandName="Delete"></asp:ButtonColumn>
</Columns>
<PagerStyle Mode="NumericPages"></PagerStyle>
</asp:DataGrid>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值