dodo·木独朱
思想...可以使天堂变成地狱,也可以使地狱变成天堂.....
自定义列模板定义
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";//打开新窗口
  } 
 }
}


使用方法:
需要动态添加列定义数据文件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>

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);//表格添加列
    }
   }
  }

对新添加的列进行操作
  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;
     }
    }
   }
  }


posted on 2006-04-20 16:17  木独朱  阅读(857)  评论(0编辑  收藏  举报