您的位置:首页 > 其它

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

2007-02-10 10:32 225 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: