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

    技术2022-05-11  75

    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'> </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'> </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


    最新回复(0)