VS2005 GridView动态绑定数据源(交叉表) 动态绑定列 动态生成模板列 自定义表头

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
/// <summary>
///
/// </summary>
public partial class qsa_ysap : Logic.Commlib.BPage
{
    //System.Web.UI.Page
    private int step; //接受传入参数 因本页自己链接自己,以此控制页面内容
    private string kmbh; //接受传入参数 科目编号
    private string unit_code; //接收传入参数 当前单位
    private string fpro_id; //接收传入参数 预算编号
    private List<String> col = new List<String>(); //用于存放各列的标记,此列存放单位编号
    private List<String> row = new List<String>(); //用于存放各行的标记,此列存放科目编号
    private List<double> rowSum = new List<double>(); //存放横向合计行数据
    //private List<String> colname = new List<String>();
    //private List<String> rowname = new List<String>();

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.QueryString["kmbh"] != null)
        {
            kmbh = Request.QueryString["kmbh"].ToString();
        }
        else
        {
            kmbh = "0";
        }
        if (Request.QueryString["step"] != null)
        {
            step = int.Parse(Request.QueryString["step"].ToString());
        }
        else
        {
            step = 0;
        }
        if (Request.QueryString["unit_code"] != null)
        {
            unit_code = Request.QueryString["unit_code"].ToString();
        }
        else
        {
            //unit_code = "0001000000";
            unit_code = base.CurrentUser.USER_UNIT_CODE;
        }
        if (Request.QueryString["strkey"] != null)
        {
            fpro_id = Request.QueryString["strkey"].ToString();
        }
        else
        {
            fpro_id = "0001000000-2007-CGYS";
        }
        InitTitle();
        InitGridView();
    }

    /// <summary>
    /// 初始化Title
    /// </summary>
    private void InitTitle()
    {
        DataTable dt = new DataTable();
        Logic.BLL.V_YSKZ_QSA_YSSYQK bll = new Logic.BLL.V_YSKZ_QSA_YSSYQK();
        dt = bll.Get_all_list("a.pro_id='" + fpro_id + "' and a.unit_code='" + unit_code + "'").Tables[0];
        if (dt.Rows.Count > 0)
        {
            Title.Text = dt.Rows[0]["F_ORG_NAME"].ToString().Trim() + dt.Rows[0]["NOTE"].ToString().Trim();
            Label1.Text = "预算总数:" + Logic.Commlib.Commonfunc.Num_to_char_Ten_thousand_toC(dt.Rows[0]["YSSUM"].ToString())
                        + "  分配总数:" + Logic.Commlib.Commonfunc.Num_to_char_Ten_thousand_toC(dt.Rows[0]["FPSUM"].ToString())
                        + "  已用总数:" + Logic.Commlib.Commonfunc.Num_to_char_Ten_thousand_toC(dt.Rows[0]["YYSUM"].ToString());
        }
    }

    /// <summary>
    /// 判断是否存在下级部门
    /// </summary>
    private bool HasChildDept(string unit_code)
    {
        DataTable dt = new DataTable();
        Logic.BLL.T_YSKZ_BAS_ORG bll = new Logic.BLL.T_YSKZ_BAS_ORG();
        dt = bll.GetList("f_org_fid='" + unit_code + "'").Tables[0];
        if (dt.Rows.Count > 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    /// <summary>
    /// 判断是否存在下级科目
    /// </summary>
    private bool HasChildSubject(string kmbh)
    {
        DataTable dt = new DataTable();
        Logic.BLL.T_YSKZ_BAS_KMSZ bll = new Logic.BLL.T_YSKZ_BAS_KMSZ();
        dt = bll.GetList("f_kmbh='" + kmbh + "'").Tables[0];
        if (dt.Rows.Count > 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    /// <summary>
    /// 初始化GridView
    /// </summary>
    private void InitGridView()
    {

        Logic.BLL.T_YSKZ_BAS_ORG org = new Logic.BLL.T_YSKZ_BAS_ORG();
        Logic.BLL.T_YSKZ_BAS_KMSZ kmsz = new Logic.BLL.T_YSKZ_BAS_KMSZ();
        //单位表
        DataTable dwt = org.GetList("f_org_fid='" + unit_code + "'").Tables[0];
        //科目表
        DataTable kmt = kmsz.GetList("f_kmbh='" + kmbh + "'").Tables[0];

        //添加列头
        DataTable dt = new DataTable();
        dt.Clear();
        dt.Columns.Clear();
        dt.Columns.Add("科目");
        for (int j = 0; j < dwt.Rows.Count; j++)
        {
            rowSum.Add(0);
            col.Add(dwt.Rows[j]["f_org_id"].ToString());
            col.Add(dwt.Rows[j]["f_org_id"].ToString());
            //colname.Add(dwt.Rows[j]["f_org_name"].ToString());//.Substring(0, 2)
            dt.Columns.Add(dwt.Rows[j]["f_org_name"].ToString() + "预算");//.Substring(0, 2)
            dt.Columns.Add(dwt.Rows[j]["f_org_name"].ToString() + "已用");
        }
        dt.Columns.Add("合计预算");
        dt.Columns.Add("合计已用");

        //添加行数据
        DataRow dr;

        Logic.BLL.V_YSKZ_QSA_YSSYQK syqk = new Logic.BLL.V_YSKZ_QSA_YSSYQK();
        for (int i = 0; i < kmt.Rows.Count; i++)
        {
            row.Add(kmt.Rows[i]["KMBH"].ToString());
            //rowname.Add(kmt.Rows[i]["KNAME"].ToString());
            dr = dt.NewRow();
            dr["科目"] = kmt.Rows[i]["KNAME"].ToString();

            double Vsum = 0; //纵向合计
            for (int j = 0; j < dwt.Rows.Count; j++)
            {
                Vsum += syqk.GetCharge(fpro_id, dwt.Rows[j]["f_org_id"].ToString(), kmt.Rows[i]["KMBH"].ToString());
                //.Substring(0, 2)
                rowSum[j] += syqk.GetCharge(fpro_id, dwt.Rows[j]["f_org_id"].ToString(), kmt.Rows[i]["KMBH"].ToString());
                dr[dwt.Rows[j]["f_org_name"].ToString() + "预算"] =
                    syqk.GetCharge(fpro_id, dwt.Rows[j]["f_org_id"].ToString(), kmt.Rows[i]["KMBH"].ToString()).ToString();
                dr[dwt.Rows[j]["f_org_name"].ToString() + "已用"] =
                    syqk.GetCharge(fpro_id, dwt.Rows[j]["f_org_id"].ToString(), kmt.Rows[i]["KMBH"].ToString()).ToString();
            }
            dr["合计预算"] = Vsum.ToString();
            dr["合计已用"] = Vsum.ToString();
            dt.Rows.Add(dr);

            //添加横向合计
            if (i == kmt.Rows.Count - 1)
            {
                double Hsum = 0;//横向合计
                dr = dt.NewRow();
                dr["科目"] = "合计:";
                for (int j = 0; j < dwt.Rows.Count; j++)
                {
                    //.Substring(0, 2)
                    dr[dwt.Rows[j]["f_org_name"].ToString() + "预算"] = rowSum[j].ToString();
                    dr[dwt.Rows[j]["f_org_name"].ToString() + "已用"] = rowSum[j].ToString();
                    //syqk.GetChargeSumGroupByDept(fpro_id,dwt.Rows[j]["f_org_id"].ToString(),false).ToString();
                    Hsum += rowSum[j];
                }
                dr["合计预算"] = Hsum.ToString();
                dr["合计已用"] = Hsum.ToString();
                dt.Rows.Add(dr);
            }
        }

        //动态绑定列
        //GridView2.AutoGenerateColumns = false;
        //GridView2.ShowHeader = true;
        //GridView2.Columns.Clear();

        //HyperLinkField hf = new HyperLinkField();
        //hf.HeaderText = "科目";
        //hf.DataTextField = "科目";
        //GridView2.Columns.Add(hf);

        //for (int i = 0; i < colname.Count; i++)
        //{
        //    hf = new HyperLinkField();
        //    hf.HeaderText = colname[i];
        //    hf.DataTextField = colname[i];
        //    hf.DataNavigateUrlFormatString = "a.aspx?unit_code="+col[i]+"&kmbh="+row[i];
        //    GridView2.Columns.Add(hf);
        //}

        //BoundField bf = new BoundField();
        //bf.HeaderText = "合计";
        //bf.DataField = "合计";
        GridView2.Columns.Clear();
        GridView2.DataSource = dt;
        GridView2.DataBind();
        GridView1.Columns.Clear();
        GridView1.DataSource = dt;
        GridView1.DataBind();
    }

    /// <summary>
    /// 根据控件id,要生成控件的列动态生成模板列
    /// </summary>
    /// <param name="id">模板列内控件的id</param>
    /// <param name="cellIndex">列的序号索引值</param>
    /// <param name="e">GridViewRowEventArgs</param>
    protected void ItemTemplateGenerate(string id, int cellIndex, GridViewRowEventArgs e)
    {
        //行控制
        if (e.Row.RowType != DataControlRowType.Header)
        {
            int rowIndex = e.Row.RowIndex;
            //数据行加链接
            if (rowIndex < row.Count)
            {
                HyperLink lb = new HyperLink();
                lb.ID = id;
                lb.BorderWidth = 0;
                lb.Text = "<nobr>" + e.Row.Cells[cellIndex].Text + "</nobr>";

                //不同列加不同的客户端脚本
                if (rowIndex >= 0)
                {
                    string script;
                    if (cellIndex == 0)
                    {
                        if (HasChildSubject(row[rowIndex]))
                        {
                            script = "~/qsa/ysap.aspx?unit_code=" + unit_code + "&strkey=" + fpro_id + "&kmbh=" + row[rowIndex] + "&step=1";
                            lb.NavigateUrl = script;
                        }
                    }
                    else
                    {
                        lb.ToolTip = "上年预算数XXX元" + "/r/n"
                        + "同比增长(下降)XX%" + "/r/n"
                        + "目前已发生费用XXX元" + "/r/n"
                        + "占预算额XX%";
                        if (HasChildSubject(row[rowIndex]))
                        {
                            script = "~/qsa/ysap.aspx?unit_code=" + col[cellIndex - 1] + "&strkey=" + fpro_id + "&kmbh=" + row[rowIndex] + "&step=1";
                            lb.NavigateUrl = script;
                        }
                    }
                }
                e.Row.Cells[cellIndex].Controls.Add(lb);
            }
            //横向合计不加链接
            else
            {
                Label lb = new Label();
                lb.ID = id;
                lb.BorderWidth = 0;
                lb.Text = "<nobr>" + e.Row.Cells[cellIndex].Text + "</nobr>";
                e.Row.Cells[cellIndex].Controls.Add(lb);
            }
        }
        #region 列头控制
        /*
        else
        {
            if (cellIndex >= 1 && cellIndex < col.Count + 1 && cellIndex < e.Row.Cells.Count)
            {
                //判断是否有下级部门 控制不同跳转链接
                if (HasChildDept(col[cellIndex - 1]))
                {
                    HyperLink lb = new HyperLink();
                    lb.ID = id;
                    lb.BorderWidth = 0;
                    lb.Text = "<nobr>" + e.Row.Cells[cellIndex].Text + "</nobr>";

                    string script;
                    //script = "window.showModalDialog('ysap.aspx?unit_code=" + col[cellIndex - 1] + "&fpro_id=" + fpro_id + "&kmbh=" + "0" + "&step=1','_blank','" + string.Format("dialogWidth={0}px;dialogHeight={1}px;help:no;unadorned:yes;resizable:yes;status:no;location:location;", 1000, 768) + "')";
                    script = "~/qsa/ysap.aspx" + "?unit_code=" + col[cellIndex - 1] + "&strkey=" + fpro_id + "&kmbh=" + kmbh + "&step=1";
                    lb.NavigateUrl = script;
                    e.Row.Cells[cellIndex].Controls.Add(lb);
                }
                //部门跳转到不同页面
                else
                {
                    HyperLink lb = new HyperLink();
                    lb.ID = id;
                    lb.BorderWidth = 0;
                    lb.Text = "<nobr>" + e.Row.Cells[cellIndex].Text + "</nobr>";

                    string script;
                    //script = "window.showModalDialog('ysap.aspx?unit_code=" + col[cellIndex - 1] + "&fpro_id=" + fpro_id + "&kmbh=" + "0" + "&step=1','_blank','" + string.Format("dialogWidth={0}px;dialogHeight={1}px;help:no;unadorned:yes;resizable:yes;status:no;location:location;", 1000, 768) + "')";
                    script = "~/qsa/kmysap.aspx" + "?unit_code=" + col[cellIndex - 1] + "&strkey=" + fpro_id;
                    lb.NavigateUrl = script;
                    e.Row.Cells[cellIndex].Controls.Add(lb);
                }
            }
            else
            {
                //控制行头链接及不换行
                if (e.Row.RowIndex >= 0 && e.Row.RowIndex < row.Count)
                {
                    HyperLink lb = new HyperLink();
                    lb.ID = id;
                    lb.BorderWidth = 0;
                    lb.Text = "<nobr>" + e.Row.Cells[cellIndex].Text + "</nobr>";
                    if (HasChildSubject(row[e.Row.RowIndex]))
                    {
                        string script;
                        script = "~/qsa/ysap.aspx?unit_code=" + unit_code + "&strkey=" + fpro_id + "&kmbh=" + row[e.Row.RowIndex] + "&step=1";
                        lb.NavigateUrl = script;
                    }
                    e.Row.Cells[cellIndex].Controls.Add(lb);
                }
            }
            //e.Row.Cells[cellIndex].Style["width"] = (e.Row.Cells[cellIndex].Text.Length*20).ToString()+"px";
        }
        */
        #endregion
    }

    public override void VerifyRenderingInServerForm(Control control)
    {

        // Confirms that an HtmlForm control is rendered for

    }

    protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        //动态生成科目列
        ItemTemplateGenerate("LB0", 0, e);
        //动态生成单位列
        for (int i = 0; i < col.Count; i++)
        {
            ItemTemplateGenerate("LB" + (i + 1).ToString(), i + 1, e);
        }
    }
    protected void Button6_Click(object sender, EventArgs e)
    {
        Logic.Commlib.Commonfunc.ToExcel(GridView1, "abc");
    }
    protected void GridView2_RowCreated(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.Header)
        {
            string HeaderBackColor = "#EDEDED";
            TableCellCollection tcl = e.Row.Cells;
            //清除自动生成的表头
            tcl.Clear();
            Logic.BLL.T_YSKZ_BAS_ORG org = new Logic.BLL.T_YSKZ_BAS_ORG();
            DataTable dwt = org.GetList("f_org_fid='" + unit_code + "'").Tables[0];

            #region 生成表头方法一
            tcl.Add(new TableHeaderCell());
            System.Text.StringBuilder newCells = new System.Text.StringBuilder();
            newCells.Append("科目</th>");
            for (int j = 0; j < dwt.Rows.Count; j++)
            {
                string href;
                if (HasChildDept(dwt.Rows[j]["f_org_id"].ToString()))
                {
                    href="ysap.aspx" + "?unit_code=" + dwt.Rows[j]["f_org_id"].ToString() + "&strkey=" + fpro_id + "&kmbh=" + kmbh + "&step=1";
                }
                else
                {
                    href = "kmysap.aspx" + "?unit_code=" + dwt.Rows[j]["f_org_id"].ToString() + "&strkey=" + fpro_id;
                }
                newCells.Append("<th colspan='2'><a href=" + href + " <nobr>" + dwt.Rows[j]["f_org_name"].ToString() + "</nobr></th>");
            }
            newCells.Append("<th colspan='2'>合计</th>");
            newCells.Append("</tr>" + "<tr bgcolor='" + HeaderBackColor + "'>");
            for (int j = 0; j < dwt.Rows.Count; j++)
            {
                newCells.Append("<th>" + "预算" + "</th>");
                newCells.Append("<th>" + "已用" + "</th>");
            }
            newCells.Append("<th>" + "预算" + "</th>");
            newCells.Append("<th>" + "已用");
            tcl[0].RowSpan = 2;
            tcl[0].Text = newCells.ToString();
            #endregion

            #region 生成表头方法2
            //添加新的表头
            /*
            int cellNum = -1;
            tcl.Add(new TableHeaderCell());
            tcl[++cellNum].RowSpan = 2;
            tcl[cellNum].Text = "科目";

            for (int j = 0; j < dwt.Rows.Count; j++)
            {
                tcl.Add(new TableHeaderCell());
                HyperLink hk = new HyperLink();
                hk.ID = "hkCol" + j.ToString();
                hk.BorderWidth = 0;
                hk.Text = "<nobr>" + dwt.Rows[j]["f_org_name"].ToString() + "</nobr>";
                if (HasChildDept(dwt.Rows[j]["f_org_id"].ToString()))
                {
                    hk.NavigateUrl = "~/qsa/ysap.aspx" + "?unit_code=" + dwt.Rows[j]["f_org_id"].ToString() + "&strkey=" + fpro_id + "&kmbh=" + kmbh + "&step=1";
                }
                else
                {
                    hk.NavigateUrl = "~/qsa/kmysap.aspx" + "?unit_code=" + dwt.Rows[j]["f_org_id"].ToString() + "&strkey=" + fpro_id;
                }
                tcl[++cellNum].ColumnSpan = 2;
                tcl[cellNum].Controls.Add(hk);
            }
            tcl.Add(new TableHeaderCell());
            tcl[++cellNum].ColumnSpan = 2;
            tcl[cellNum].Text = "合计";
           
            System.Text.StringBuilder newCells = new System.Text.StringBuilder();
            tcl.Add(new TableHeaderCell());
            newCells.Append("</tr><tr bgcolor='" + HeaderBackColor + "'>");
            for (int j = 0; j < dwt.Rows.Count; j++)
            {
                newCells.Append("<th>" + "预算" + "</th>");
                newCells.Append("<th>" + "已用" + "</th>");
            }
            newCells.Append("<th>" + "预算" + "</th>");
            newCells.Append("<th>" + "已用");
            tcl[++cellNum].Text = newCells.ToString();
            */
            #endregion
        }

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值