动态datagrid类

using System;
using System.Data;
using System.Collections;
using System.ComponentModel;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace IMS.Class
{
    
/// <summary>
    
/// DynamicDataGrid 的摘要说明。
    
/// </summary>

    public class DynamicDataGrid
    
{
        
//        string DataGridName;
        string DataGridHeader;
        
string PermStr;
        DataTable dt;
        DataGrid dg;
        
string ModifyLinkFileName,DeleteLinkFileName,ViewLinkFlieName;
        
string DataGridHeaderStr;
        
int Type;
        
bool Mflag=false;
        
bool Dflag=false;
        
public DynamicDataGrid()
        
{
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }

        
/// <summary>
        
/// 构造动态DataGrid
        
/// </summary>
        
/// <param name="DG">将改变的DataGrid</param>
        
/// <param name="Headerstr">头标题,用于在界面的datagrid头标题上显示的汉字</param>
        
/// <param name="Header">对应于头标题,取数据库中的各字段</param>
        
/// <param name="PermissionStr">权限(字符串,以逗号分隔开)</param>
        
/// <param name="dtable">绑定的数据源(DataTable)</param>
        
/// <param name="LinkModifyFile">修改转向的页面的链接</param>
        
/// <param name="LinkDeleteFile">删除转向的页面的链接</param>
        
/// <param name="LinkViewFile">浏览转向的页面的链接</param>
        
/// <param name="TypeId">int型</param>

        public DynamicDataGrid(DataGrid DG,string Headerstr,string Header,string PermissionStr,DataTable dtable,string LinkModifyFile,string LinkDeleteFile,string LinkViewFile,int TypeId)
        
{
            
this.dg=DG;
            
//            this.dg.DataSource=null;
            this.DataGridHeader=Header;
            
this.DataGridHeaderStr=Headerstr;
            
this.dt=dtable;
            
this.DeleteLinkFileName=LinkDeleteFile;
            
this.ModifyLinkFileName=LinkModifyFile;
            
this.ViewLinkFlieName=LinkViewFile;
            
this.PermStr=PermissionStr;
            
this.Type=TypeId;
            
this.ModifyDataGrid();
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }


        
public DataGrid ModifyDataGrid()
        
{
            
//datagrid样式
            this.dg.AllowSorting=true;//允许排序
            this.dg.AllowPaging=true;//允许分页
            this.dg.PageSize=15;//每页15项
            this.dg.PagerStyle.Mode=PagerMode.NumericPages;
            
this.dg.PagerStyle.BackColor=System.Drawing.Color.FromName("#AAAADD");
            
this.dg.PagerStyle.HorizontalAlign=HorizontalAlign.Right;
            
this.dg.AutoGenerateColumns=false;
            
this.dg.BackColor=System.Drawing.Color.White;//datagrid背景色设为天蓝色
            this.dg.BorderStyle=BorderStyle.Ridge;//边框样式
            this.dg.BorderWidth=1;//DataGrid的边框宽度
            
//            this.dg.CaptionAlign=TableCaptionAlign.Bottom;
            this.dg.HorizontalAlign=HorizontalAlign.Center;//datagrid相对于页面居中
            this.dg.ItemStyle.HorizontalAlign=HorizontalAlign.Left;//datagrid中文字居左对齐
            this.dg.CellPadding=5;
            
this.dg.CellSpacing=1;
            
this.dg.DataKeyField="Id";
            
this.dg.HeaderStyle.BackColor=System.Drawing.Color.FromName("#D6DFF7");
            
this.dg.HeaderStyle.HorizontalAlign=HorizontalAlign.Left;//标题居左对齐
            this.dg.HeaderStyle.Font.Bold=true;//标题字体加粗
            this.dg.HeaderStyle.Font.Size=FontUnit.XLarge;
            
this.dg.AlternatingItemStyle.BackColor=System.Drawing.Color.AliceBlue;
            
this.dg.ItemCreated+=new DataGridItemEventHandler(dg_ItemCreated);
            
this.dg.PageIndexChanged+=new DataGridPageChangedEventHandler(dg_PageIndexChanged);
            
//动态创建模板列
            string[] HeaderStr=this.DataGridHeader.Split(',');
            
string[] HeaderStr1=this.DataGridHeaderStr.Split(',');
            
int HeaderCount=HeaderStr.Length;
            
for(int i=0;i<HeaderCount;i++)
            
{
                TemplateColumn Tm
=new TemplateColumn();
                Tm.ItemTemplate
=new ColumnTemplate(HeaderStr[i]);
                Tm.HeaderText
=HeaderStr1[i];
                
this.dg.Columns.Add(Tm);
            }

            
//建立查看、修改和删除列
            if(this.Type==1)
            
{
                HyperLinkColumn hl
=new HyperLinkColumn();
                hl.HeaderText
="浏览";
                hl.Text
="浏览";
                hl.ItemStyle.Width
=30;
                hl.HeaderStyle.Width
=30;
                
this.dg.Columns.Add(hl);

            }

            
else if(this.Type==0)
            
{
                
if(this.PermStr.IndexOf("修改")>-1)
                
{
                    HyperLinkColumn hl
=new HyperLinkColumn();
                    hl.HeaderText
="修改";
                    hl.Text
="修改";
                    hl.ItemStyle.Width
=30;
                    hl.HeaderStyle.Width
=30;
                    
this.dg.Columns.Add(hl);
                    
this.Mflag=true;
                    
if(this.PermStr.IndexOf("删除")>-1)
                    
{
                        HyperLinkColumn hl1
=new HyperLinkColumn();
                        hl1.HeaderText
="删除";
                        hl1.Text
="删除";
                        hl1.ItemStyle.Width
=30;
                        hl1.HeaderStyle.Width
=30;
                        
this.dg.Columns.Add(hl1);
                        
this.Dflag=true;

                    }

                }

                
else if(this.PermStr.IndexOf("删除")>-1)
                
{
                    HyperLinkColumn hl
=new HyperLinkColumn();
                    hl.HeaderText
="删除";
                    hl.Text
="删除";
                    hl.ItemStyle.Width
=30;
                    hl.HeaderStyle.Width
=30;
                    
this.dg.Columns.Add(hl);
                    
this.Dflag=true;
                }


            }

            
try
            
{
//                this.dg.CurrentPageIndex=0;
                this.dg.DataSource=this.dt;
                
this.dg.DataBind();
                
return this.dg;
            }

            
catch(Exception err)
            
{
                
throw new Exception(err.Message);
            }


        }



        
private void dg_ItemCreated(object sender, DataGridItemEventArgs e)
        
{
            
if ( e.Item.ItemType == ListItemType.Pager)
            
{
                
//Add a new Label Control
                Label lblPagerText = new Label();
                lblPagerText.Text 
= " | Pages --> " ;
                lblPagerText.ID 
= "lblPagerText1";
                lblPagerText.Font.Bold 
= false;
                lblPagerText.Attributes.Add(
"onmouseover","this.style.fontWeight='bold'");
                lblPagerText.Attributes.Add(
"onmouseout","this.style.fontWeight='normal'");
                
//Finally add label to Pager control collection 
                if ( e.Item.Controls[0].FindControl("lblPagerText1" ) == null)
                
{
                
                    e.Item.Controls[
0].Controls.AddAt(0,lblPagerText);
                }

            }
//end if 


            
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem) 
            

                
int Id=(int)this.dg.DataKeys[e.Item.ItemIndex];
                
if(this.Type==1)
                    ((HyperLink)e.Item.Cells[e.Item.Cells.Count
-1].Controls[0]).NavigateUrl=this.ViewLinkFlieName+"?id="+Id.ToString();
                
else if(this.Type==0)
                
{
                    
if(this.Mflag&&this.Dflag)
                    
{
                        ((HyperLink)e.Item.Cells[e.Item.Cells.Count
-2].Controls[0]).NavigateUrl=this.ModifyLinkFileName+"?id="+Id.ToString();
                        ((HyperLink)e.Item.Cells[e.Item.Cells.Count
-1].Controls[0]).Attributes.Add("onclick",   "return confirm('您真的要删除吗?')");
                        ((HyperLink)e.Item.Cells[e.Item.Cells.Count
-1].Controls[0]).NavigateUrl=this.DeleteLinkFileName+"?id="+Id.ToString();
                    }

                    
else if(this.Dflag)
                    
{
                        ((HyperLink)e.Item.Cells[e.Item.Cells.Count
-1].Controls[0]).Attributes.Add("onclick",   "return confirm('您真的要删除吗?')");
                        ((HyperLink)e.Item.Cells[e.Item.Cells.Count
-1].Controls[0]).NavigateUrl=this.DeleteLinkFileName+"?id="+Id.ToString();
                    }

                    
else if(this.Mflag)
                        ((HyperLink)e.Item.Cells[e.Item.Cells.Count
-1].Controls[0]).NavigateUrl=this.ModifyLinkFileName+"?id="+Id.ToString();

                }
//end if
                e.Item.Attributes.Add("onmouseover","this.style.backgroundColor='seashell'"); 
                
if(e.Item.ItemType == ListItemType.Item) 
                

                    e.Item.Attributes.Add(
"onmouseout""this.style.backgroundColor='white'"); 
                }
 

                
if(e.Item.ItemType ==ListItemType.AlternatingItem) 
                

                    e.Item.Attributes.Add(
"onmouseout""this.style.backgroundColor='AliceBlue'"); 
                }
 


            }
//end if

        }


        
private void dg_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
        
{
//            int count = this.dt.Rows.Count;
//            int Page=((count%this.dg.PageSize)>0)?(count/this.dg.PageSize)+1:(count/this.dg.PageSize);
//            this.dg.CurrentPageIndex=(Page>e.NewPageIndex)?e.NewPageIndex:Page;
            this.dg.CurrentPageIndex=e.NewPageIndex;
            
this.dg.DataSource=this.dt;
            
this.dg.DataBind();
        }

    }


    
public class ColumnTemplate : ITemplate 
    

        
//第一个模板列 
        string Str;
        
public ColumnTemplate(string str)
        
{

            
this.Str=str;
        }

        
public void InstantiateIn(Control container)       
        

            LiteralControl l 
= new LiteralControl(); 
            l.DataBinding 
+= new EventHandler(this.OnDataBinding); 
            
//数据绑定 
            container.Controls.Add(l); 
            
//为模板列加入LiteralControl 
        }
 

        
public void OnDataBinding(object sender, EventArgs e) 
        

            LiteralControl l 
= (LiteralControl) sender;//LiteralControl发送绑定请求 
            DataGridItem container = (DataGridItem) l.NamingContainer; 
            
if(((DataRowView)container.DataItem)[this.Str].ToString()=="")
                l.Text
=@"&nbsp;";
            
else
                l.Text 
= ((DataRowView)container.DataItem)[this.Str].ToString();//绑定字段 
        }
 
    }
 
}

posted @ 2006-04-08 14:09  半克拉鹅卵石  阅读(210)  评论(0)    收藏  举报