自定义流程图及绘制组织结构图

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.Drawing;


public partial class WorkOrder_ShowSkipRule : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //绑定数据
            ViewState["CaseID"] = "0702091001";
            BindFlowImage();
            /*
            if(Request.QueryString["CaseID"] != null)
            {
                ViewState["CaseID"] = Request.QueryString["CaseID"].ToString();
                BindFlowImage();
            }
             * */
        }
    }

    #region 绑定流程图
    /// <summary>
    /// 绑定流程图
    /// </summary>
    public void BindFlowImage()
    {
        DataTable dt = Base.BLL.WorkOrder.WorkOrder.GetWorkOrderBaseCaseID(ViewState["CaseID"].ToString());
        Table  tt  = new Table();
        tt.BorderWidth = 0;
        tt.CellPadding = 0;
        tt.CellSpacing = 0;
        tt.Width = Unit.Percentage(100);

        if (dt.Rows.Count > 0)
        {
            //添加标题栏
            AddRow(tt, dt.Rows[0]["Case_ID"].ToString(), Color.Empty);
            AddRow(tt, "<span lang='EN-US' style='font-size: 10.5pt; font-family: Wingdings'>&nbsp;</span>", Color.Empty);

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                TableRow tr = new TableRow();
                TableCell tc = new TableCell();

                Table Taborder = new Table();
                TableRow trOrder = new TableRow();
                TableCell tdOrder = new TableCell();

                //Taborder.BorderWidth = 0;
                //Taborder.CellPadding = 0;
                //Taborder.CellSpacing = 0;
                //Taborder.Width = Unit.Percentage(100);

                tdOrder.HorizontalAlign = HorizontalAlign.Center;
                tdOrder.VerticalAlign = VerticalAlign.Top;

                //添加工单标题
                AddRow(tt, "工单编号:" + dt.Rows[i]["WorkOrder_ID"].ToString(), Color.Empty);

                //根据每个工单设计流程图
                AddContentTable(tdOrder, dt.Rows[i]["CreatedBy"].ToString());
                Label lblSpan = new Label();
                lblSpan.Text = "↓";
                tdOrder.Controls.Add(lblSpan);

                AddStep(tdOrder, Convert.ToInt32(dt.Rows[i]["WorkOrder_ID"]), dt.Rows[i]["CreatedBy"].ToString());
                trOrder.Cells.Add(tdOrder);
                Taborder.Rows.Add(trOrder);
                tc.Controls.Add(Taborder);
                tr.Cells.Add(tdOrder);
                tt.Rows.Add(tr);

                //AddRow(tt, "<span lang='EN-US' style='font-size: 10.5pt; font-family: Wingdings'>∨</span>", Color.Empty);
                //AddRow(tt, "<span lang='EN-US' style='font-size: 10.5pt; font-family: Wingdings'>&nbsp;</span>", Color.Empty);
            }

            //AddRow(tt, "<a href=javascript:self.close();>流程结束</a>", Color.Empty);
        }

        FlowPlaceHolder.Controls.Add(tt);
    }
    #endregion

    #region 添加行标头信息
    /// <summary>
    /// 添加行标头信息
    /// </summary>
    /// <param name="tab"></param>
    /// <param name="Label"></param>
    /// <param name="BackColor"></param>
    void AddRow(Table tab, string Label, Color BackColor)
    {

        TableRow tr = new TableRow();
        TableCell td = new TableCell();

        td.Text = Label;
        td.HorizontalAlign = HorizontalAlign.Center;
        td.BackColor = BackColor;

        tr.Cells.Add(td);

        tab.Rows.Add(tr);

    }
    #endregion

    #region 添加底线
    /// <summary>
    /// 添加底线
    /// </summary>
    /// <param name="cellObj"></param>
    /// <param name="PosLine"></param>
    private void AddLineRow(TableCell cellObj,LinePostion PosLine)
    {
        Table lineTab = new Table();
        TableRow lineTr = new TableRow();
        TableCell lineTd1 = new TableCell();
        TableCell lineTd2 = new TableCell();
        lineTab.BorderWidth = 0;
        lineTab.CellPadding = 0;
        lineTab.CellSpacing = 0;
        lineTab.Width = Unit.Percentage(100);
        lineTab.Height = 1;

        if (PosLine == LinePostion.All)
        {
            lineTd1.BackColor = Color.FromArgb(0, 0, 0);
            lineTd1.Width = Unit.Percentage(50);

            lineTd2.BackColor = Color.FromArgb(0, 0, 0);
            lineTd2.Width = Unit.Percentage(50);
        }
        else if (PosLine == LinePostion.Left)
        {
            lineTd1.BackColor = Color.FromArgb(0, 0, 0);
            lineTd1.Width = Unit.Percentage(50);

            lineTd2.Width = Unit.Percentage(50);
        }
        else
        {
            lineTd1.Width = Unit.Percentage(50);
            lineTd2.BackColor = Color.FromArgb(0, 0, 0);
            lineTd2.Width = Unit.Percentage(50);
        }

        lineTr.Cells.Add(lineTd1);
        lineTr.Cells.Add(lineTd2);

        lineTab.Rows.Add(lineTr);

        cellObj.Controls.Add(lineTab);  //添加内容到表格中
    }
    #endregion

    #region 添加内容Table
    /// <summary>
    /// 添加内容列
    /// </summary>
    /// <param name="TitleTab"></param>
    private void AddContentTable(TableCell cellObj,string Content)
    {
        /*
         * <table cellspacing=1 cellpadding=4>
           <tr>
          <td class=tdbottom style="border: 1 solid #000000 "   align=center > <a href=>如若然</a> </td>
           </tr>
         </table>
         * */
        Table contentTab = new Table();
        TableRow contentTr = new TableRow();
        TableCell contentTd = new TableCell();
        contentTab.CellSpacing = 1;
        contentTab.CellPadding = 4;
        contentTd.Style.Add("border", "1 solid #000000");
        contentTd.HorizontalAlign = HorizontalAlign.Center;
        contentTd.Text = Content;

        contentTr.Cells.Add(contentTd);
        contentTab.Rows.Add(contentTr);

        cellObj.Controls.Add(contentTab);   //添加到列中

    }
    #endregion

    #region 添加步骤信息
    /// <summary>
    /// 添加步骤信息
    /// </summary>
    /// <param name="tab"></param>
    /// <param name="dd"></param>
    /// <param name="CreatedBy"></param>
    void AddStep(TableCell ParentTDObj,int WorkOrder_ID, string CreatedBy)
    {
        Table tabObj = new Table();
        tabObj.BorderWidth = 0;
        tabObj.CellSpacing = 0;
        tabObj.CellPadding = 0;
        tabObj.Width = Unit.Percentage(100);
        TableRow tr = new TableRow();

        DataView tmpDV = CreateDataView(WorkOrder_ID);
        tmpDV.RowFilter = "CreatedBy='" + CreatedBy + "' and HandleBy_ID<>'" + CreatedBy+"'";
        int childCount = 0;
        foreach (DataRowView drvItem in tmpDV)
        {
            try
            {

                TableCell cellObj = new TableCell();
                cellObj.VerticalAlign = VerticalAlign.Top;
                cellObj.HorizontalAlign = HorizontalAlign.Center;

                if (tmpDV.Count >= 2)    //个数大于2时,如果只有一条记录不需要底线
                {
                    if (childCount == 0)
                    {
                        //表示左边有底线
                        AddLineRow(cellObj, LinePostion.Right);
                    }
                    else if (childCount == tmpDV.Count - 1)
                    {
                        //表示右边有底线
                        AddLineRow(cellObj, LinePostion.Left);
                    }
                    else
                    {
                        //两都都有底线
                        AddLineRow(cellObj, LinePostion.All);
                    }
                }
                Label lblSpan = new Label();
                lblSpan.Text = "↓";
                cellObj.Controls.Add(lblSpan);

                AddContentTable(cellObj,drvItem["HandleBy_ID"].ToString());

                tr.Cells.Add(cellObj);
                tabObj.Rows.Add(tr);

                childCount++;
                AddStep(cellObj,WorkOrder_ID,drvItem["HandleBy_ID"].ToString());  //继续递归调用
            }
            catch { }
        }

        ParentTDObj.Controls.Add(tabObj);
        tabObj = null;
    }
    #endregion

    #region 获取数据
    /// <summary>
    /// 获取数据
    /// </summary>
    /// <returns></returns>
    private DataView CreateDataView(int WorkOrder_ID)
    {
        DataView daView = Base.BLL.WorkOrder.WorkOrder_StepPath.GetStepPathBaseOrderID(WorkOrder_ID).DefaultView;
        return daView;
    }
    #endregion
}

#region 枚举位置变量
/// <summary>
/// 枚举位置变量
/// </summary>
public enum LinePostion
{
    /// <summary>
    /// 左边
    /// </summary>
    Left,

    /// <summary>
    /// 右边
    /// </summary>
    Right,

    /// <summary>
    /// 两边都有
    /// </summary>
    All
}
#endregion
效果图如下:

1001
  
1002
1004
  
1003

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值