using
System;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace CommonComponents
{
/// <summary>
/// 自定义文本显示模板列
/// </summary>
public class SelfDefineTextColumnTemplate:System.Web.UI.ITemplate
{
string colSourceName = "" ;
/// <summary>
/// 文本显示模板列
/// </summary>
/// <param name="ColSourceName"> 模板列动态绑定的数据列 </param>
public SelfDefineTextColumnTemplate( string ColSourceName)
{
colSourceName = ColSourceName;
}
public void InstantiateIn(Control container)
{
LiteralControl l = new LiteralControl();
l.DataBinding += new EventHandler( this .OnDataBinding);
// 数据绑定
container.Controls.Add(l);
}
public void OnDataBinding( object sender, EventArgs e)
{
LiteralControl l = (LiteralControl) sender; // 发送绑定请求
DataGridItem container = (DataGridItem) l.NamingContainer;
l.Text = ((System.Data.DataRowView)container.DataItem)[colSourceName].ToString(); // 绑定
}
}
/// <summary>
/// 自定义超级连接模板列
/// </summary>
public class SelfDefineLinkColumnTemplate:System.Web.UI.ITemplate
{
string colSourceName = "" ,urlTarget = "" ,colId = "" ;
/// <summary>
/// 动态绑定超级连接列
/// </summary>
/// <param name="ColSourceName"> 数据源列 </param>
/// <param name="UrlTarget"> 超级连接的URL </param>
/// <param name="ColId"> 模板列的ID,便于引用列 </param>
public SelfDefineLinkColumnTemplate( string ColSourceName, string UrlTarget, string ColId)
{
colSourceName = ColSourceName;
urlTarget = UrlTarget;
colId = ColId;
}
public void InstantiateIn(Control container)
{
HyperLink hl = new HyperLink();
hl.ID = colId;
hl.DataBinding += new EventHandler( this .OnDataBinding);
container.Controls.Add(hl);
}
public void OnDataBinding( object sender, EventArgs e)
{
HyperLink hl = (HyperLink) sender;
DataGridItem container = (DataGridItem) hl.NamingContainer;
hl.Text = ((System.Data.DataRowView)container.DataItem)[colSourceName].ToString(); // 绑定
hl.NavigateUrl = urlTarget;
hl.Target = " _blank " ; // 打开新窗口
}
}
}
using System.Web.UI;
using System.Web.UI.WebControls;
namespace CommonComponents
{
/// <summary>
/// 自定义文本显示模板列
/// </summary>
public class SelfDefineTextColumnTemplate:System.Web.UI.ITemplate
{
string colSourceName = "" ;
/// <summary>
/// 文本显示模板列
/// </summary>
/// <param name="ColSourceName"> 模板列动态绑定的数据列 </param>
public SelfDefineTextColumnTemplate( string ColSourceName)
{
colSourceName = ColSourceName;
}
public void InstantiateIn(Control container)
{
LiteralControl l = new LiteralControl();
l.DataBinding += new EventHandler( this .OnDataBinding);
// 数据绑定
container.Controls.Add(l);
}
public void OnDataBinding( object sender, EventArgs e)
{
LiteralControl l = (LiteralControl) sender; // 发送绑定请求
DataGridItem container = (DataGridItem) l.NamingContainer;
l.Text = ((System.Data.DataRowView)container.DataItem)[colSourceName].ToString(); // 绑定
}
}
/// <summary>
/// 自定义超级连接模板列
/// </summary>
public class SelfDefineLinkColumnTemplate:System.Web.UI.ITemplate
{
string colSourceName = "" ,urlTarget = "" ,colId = "" ;
/// <summary>
/// 动态绑定超级连接列
/// </summary>
/// <param name="ColSourceName"> 数据源列 </param>
/// <param name="UrlTarget"> 超级连接的URL </param>
/// <param name="ColId"> 模板列的ID,便于引用列 </param>
public SelfDefineLinkColumnTemplate( string ColSourceName, string UrlTarget, string ColId)
{
colSourceName = ColSourceName;
urlTarget = UrlTarget;
colId = ColId;
}
public void InstantiateIn(Control container)
{
HyperLink hl = new HyperLink();
hl.ID = colId;
hl.DataBinding += new EventHandler( this .OnDataBinding);
container.Controls.Add(hl);
}
public void OnDataBinding( object sender, EventArgs e)
{
HyperLink hl = (HyperLink) sender;
DataGridItem container = (DataGridItem) hl.NamingContainer;
hl.Text = ((System.Data.DataRowView)container.DataItem)[colSourceName].ToString(); // 绑定
hl.NavigateUrl = urlTarget;
hl.Target = " _blank " ; // 打开新窗口
}
}
}
使用方法:
需要动态添加列定义数据文件processname.xml
<?
xml version="1.0" encoding="utf-8"
?>
< NewDataSet >
< tbl_processname >
< prcid > 1 </ prcid > <!-- 列ID -->
< processname > column1 </ processname > <!-- 自定义列名称 -->
< isShow > 1 </ isShow > <!-- 是否显示该列 -->
</ tbl_processname >
< tbl_processname >
< prcid > 2 </ prcid >
< processname > column2 </ processname >
< isShow > 1 </ isShow >
</ tbl_processname >
< tbl_processname >
< prcid > 3 </ prcid >
< processname > column3 </ processname >
< isShow > 1 </ isShow >
</ tbl_processname >
</ NewDataSet >
< NewDataSet >
< tbl_processname >
< prcid > 1 </ prcid > <!-- 列ID -->
< processname > column1 </ processname > <!-- 自定义列名称 -->
< isShow > 1 </ isShow > <!-- 是否显示该列 -->
</ tbl_processname >
< tbl_processname >
< prcid > 2 </ prcid >
< processname > column2 </ processname >
< isShow > 1 </ isShow >
</ tbl_processname >
< tbl_processname >
< prcid > 3 </ prcid >
< processname > column3 </ processname >
< isShow > 1 </ isShow >
</ tbl_processname >
</ NewDataSet >
PageLoad中调用AddColumnToGrid动态添加列
private
void
AddColumnToGrid()
{
DataSet ds = new DataSet();
ds.ReadXML( " processname.xml " );
DataTable tblTemp = ds.Tables[ 0 ]; // 需要动态添加列的列表
foreach (DataRow dr in tblTemp.Rows)
{
if (Convert.ToBoolean(dr[ " isShow " ])) // 需要显示的列
{
// 自定义模板列
TemplateColumn tm = new TemplateColumn();
tm.HeaderText = dr[ " processname " ].ToString();
tm.ItemTemplate =
new SelfDefineLinkColumnTemplate(dr[ " processname " ].ToString(),
" ShowDetail.aspx?processId= " + Convert.ToInt32(dr[ " prcid " ]) + "" ,
dr[ " prcid " ].ToString());
this .GrdBrowse.Columns.Add(tm); // 表格添加列
}
}
}
{
DataSet ds = new DataSet();
ds.ReadXML( " processname.xml " );
DataTable tblTemp = ds.Tables[ 0 ]; // 需要动态添加列的列表
foreach (DataRow dr in tblTemp.Rows)
{
if (Convert.ToBoolean(dr[ " isShow " ])) // 需要显示的列
{
// 自定义模板列
TemplateColumn tm = new TemplateColumn();
tm.HeaderText = dr[ " processname " ].ToString();
tm.ItemTemplate =
new SelfDefineLinkColumnTemplate(dr[ " processname " ].ToString(),
" ShowDetail.aspx?processId= " + Convert.ToInt32(dr[ " prcid " ]) + "" ,
dr[ " prcid " ].ToString());
this .GrdBrowse.Columns.Add(tm); // 表格添加列
}
}
}
对新添加的列进行操作
private
void
GrdBrowse_ItemDataBound(
object
sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
string strUrl = "" ;
HyperLink hl;
int grdId;
DataSet ds = new DataSet();
ds.ReadXML( " processname.xml " );
DataTable tblTemp = ds.Tables[ 0 ]; // 需要动态添加列的列表
if (e.Item.ItemType == System.Web.UI.WebControls.ListItemType.Item ||
e.Item.ItemType == System.Web.UI.WebControls.ListItemType.AlternatingItem )
{
// 表格行编号
grdId = Convert.ToInt32( this .GrdBrowse.DataKeys[e.Item.ItemIndex]);
foreach (DataRow dr in tblTmp.Rows)
{
if (Convert.ToBoolean(dr[ " isShow " ])) // 显示的列
{
hl = (HyperLink)e.Item.FindControl(dr[ " prcId " ].ToString());
strUrl = hl.NavigateUrl + " &id= " + grdId " ;//添加参数
hl.NavigateUrl = strUrl;
}
}
}
}
{
string strUrl = "" ;
HyperLink hl;
int grdId;
DataSet ds = new DataSet();
ds.ReadXML( " processname.xml " );
DataTable tblTemp = ds.Tables[ 0 ]; // 需要动态添加列的列表
if (e.Item.ItemType == System.Web.UI.WebControls.ListItemType.Item ||
e.Item.ItemType == System.Web.UI.WebControls.ListItemType.AlternatingItem )
{
// 表格行编号
grdId = Convert.ToInt32( this .GrdBrowse.DataKeys[e.Item.ItemIndex]);
foreach (DataRow dr in tblTmp.Rows)
{
if (Convert.ToBoolean(dr[ " isShow " ])) // 显示的列
{
hl = (HyperLink)e.Item.FindControl(dr[ " prcId " ].ToString());
strUrl = hl.NavigateUrl + " &id= " + grdId " ;//添加参数
hl.NavigateUrl = strUrl;
}
}
}
}