为DataGrid 写一个 DropDownListColumn

datagrid

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=&

时间: 2024-09-18 17:35:21

为DataGrid 写一个 DropDownListColumn的相关文章

java-新手,如何为一个swing程序写一个按某键暂停功能?

问题描述 新手,如何为一个swing程序写一个按某键暂停功能? 比如一个贪吃蛇游戏,现在想在键盘上按一个键暂停游戏,比如游戏时按F5暂停游戏,此时我不知道应该把这个键盘事件注册到哪个事件源上呢?也就是在程序运行中由谁来监听这个键盘事件呢?还请大家指点一下! 解决方案 我觉得应该用暂停线程来控制,没用过,你可以试试

c c++-写一个函数判断输入的字符串是否是一个点分十进制格式的IP地址

问题描述 写一个函数判断输入的字符串是否是一个点分十进制格式的IP地址 写一个函数判断输入的字符串是否是一个点分十进制格式的IP地址 解决方案 #include ""winsock2.h""#pragma comment(libws2_32.lib"")BOOL CheckIsValidIP(const char* sIP){ unsigned long ulAddress = inet_addr(sIP); if (INADDR_NONE ==

maple-数学建模 Maple 的一个问题 不需要全部写完 写一个梗概 或者一部分就可以 给我一些思路 谢谢

问题描述 数学建模 Maple 的一个问题 不需要全部写完 写一个梗概 或者一部分就可以 给我一些思路 谢谢 数学建模 Maple 的一个问题 不需要全部写完 写一个梗概 或者一部分就可以 两页不到都行 给我一些思路 万分感谢! 题目:http://tieba.baidu.com/p/4208379616 解决方案 http://wenku.baidu.com/link?url=NPb2GpDRvRNa09EDIaGkebeB5laLewClUlZMbIx6dVE5e8UPcx0yaBfjLsk

sql-我要写一个java程序,去链接oracle数据库,如果获取链接的时间超过1分钟,就抛出异常,请问怎么实现?

问题描述 我要写一个java程序,去链接oracle数据库,如果获取链接的时间超过1分钟,就抛出异常,请问怎么实现? 我要写一个java程序,去链接oracle数据库,如果获取链接的时间超过1分钟,就抛出异常,请问怎么实现? 解决方案 http://blog.chinaunix.net/uid-20752328-id-3451931.html 这里有一篇文章可以解决你的问题你可以点击进去看看; 如果回答对您有帮助请采纳 解决方案二: 说明数据整理不合理吧 解决方案三: 你应该优化数据库结构,或你

linux下怎么写一个自动创建文件夹和文件的脚本?

问题描述 linux下怎么写一个自动创建文件夹和文件的脚本? linux下怎么写一个自动创建文件夹和文件的脚本?就是说我给一个绝对路径,程序会自动帮我创建在路径中没有的文件夹和文件. 解决方案 http://blog.csdn.net/hellochenlian/article/details/37566269 -p, --parents 可以是一个路径名称.此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录; 解决方案二: mkdir 加上

java 用windowbuilder写一个电影院的选座售票系统

问题描述 java 用windowbuilder写一个电影院的选座售票系统 java 用windowbuilder写一个电影院的选座售票系统请问下有什么做的思路?座位用按钮表示吗?还是用其他方法表示? 解决方案 http://download.csdn.net/detail/u013129990/6705317 解决方案二: 座位可以用一组checkbox表示,在后台接收对应的id就是相应的座位,这样比按钮省事多了 解决方案三: 设计窗体,在窗体里面添加控件,座位的选择可以是按钮,也可以是其他的

unix-Solaris 10 写一个脚本,在atc用户下,调用该脚本,执行poweroff命令

问题描述 Solaris 10 写一个脚本,在atc用户下,调用该脚本,执行poweroff命令 Solaris 10 写一个脚本,在atc用户下,调用该脚本,执行poweroff命令 解决方案 实现一个脚本,然后atc用户执行 解决方案二: 实现一个脚本,然后atc用户执行

格式-如何写一个基于RFID的安全门系统功能

问题描述 如何写一个基于RFID的安全门系统功能 要写一个关于RFID方面的安全门系统,就是图书馆那种,借书时没有登记就把书带出去时就会报警,怎么写,有一定的格式么?主要写什么,系统有哪些功能??

Linux内核向磁盘写一个char型数据,并获取写入的位置

问题描述 Linux内核向磁盘写一个char型数据,并获取写入的位置 28C 如题,请问应该调用哪个函数??这个我是在自己模块中使用.在线等待回答