效果图:
//是否含有半成品
static bool ck_type(DataTable tb1)
{
foreach (DataRow r in tb1.Rows)
{
if (r["ftype"].ToString()=="自制")
{
return false;
}
}
return true;
}
//拆解BOM
static DataTable cj_bom(string bomid)
{
DataTable tb1 = new DataTable();
tb1.Columns.Add("bomid");
tb1.Columns.Add("cwl");
tb1.Columns.Add("pwl");
tb1.Columns.Add("ftype");
tb1.Columns.Add("pid");
tb1.Columns.Add("lv");
DataTable tb2 = new DataTable();
tb2 = cj_wl_id(bomid);
int i = 0;
foreach (DataRow r in tb2.Rows)
{
DataRow newRow;
newRow = tb1.NewRow();
newRow["bomid"] = r["bomid"].ToString();
newRow["cwl"] = r["cwl"].ToString();
newRow["pwl"] = r["pwl"].ToString();
newRow["ftype"] = r["ftype"].ToString();
newRow["pid"] = r["pid"].ToString();
newRow["lv"] = i;
tb1.Rows.Add(newRow);
}
do
{
i++;
DataTable tb3 = new DataTable();
tb3.Columns.Add("bomid");
tb3.Columns.Add("cwl");
tb3.Columns.Add("pwl");
tb3.Columns.Add("ftype");
tb3.Columns.Add("pid");
foreach (DataRow r in tb1.Rows)
{
if (r["ftype"].ToString()=="自制")
{
r["ftype"] = "自制*";
DataTable tb4= cj_wl(r["pwl"].ToString(),r["bomid"].ToString());
foreach (DataRow r0 in tb4.Rows)
{
DataRow newRow;
newRow = tb3.NewRow();
newRow["bomid"] = r0["bomid"].ToString();
newRow["cwl"] = r0["cwl"].ToString();
newRow["pwl"] = r0["pwl"].ToString();
newRow["ftype"] = r0["ftype"].ToString();
newRow["pid"] = r0["pid"].ToString();
tb3.Rows.Add(newRow);
}
}
}
foreach (DataRow r1 in tb3.Rows)
{
DataRow newRow;
newRow = tb1.NewRow();
newRow["bomid"] = r1["bomid"].ToString();
newRow["cwl"] = r1["cwl"].ToString();
newRow["pwl"] = r1["pwl"].ToString();
newRow["ftype"] = r1["ftype"].ToString();
newRow["pid"] = r1["pid"].ToString();
newRow["lv"] = i;
tb1.Rows.Add(newRow);
}
} while (ck_type(tb1)==false);
return tb1;
}
//按料号拆解
public static DataTable cj_wl(string wl,string pid)
{
DataTable tb1 = new DataTable();
SqlConnection sql_conn = new SqlConnection(bomhd.sqlstr);
SqlDataAdapter f_ap = new SqlDataAdapter("SELECT b1.bomid,b1.pid,b1.cwl,b2.line,b2.pwl,b2.ftype FROM bom_hd AS b1 LEFT JOIN bom_dtl AS b2 ON b1.bomid=b2.bomid WHERE b1.cwl='" + wl +"' and b1.pid='" + pid + "'", sql_conn);
DataSet f_d = new DataSet();
f_ap.Fill(f_d);
tb1 = f_d.Tables[0];
return tb1;
}
//按BOMID拆解
static DataTable cj_wl_id(string bomid)
{
DataTable tb1 = new DataTable();
SqlConnection sql_conn = new SqlConnection(bomhd.sqlstr);
SqlDataAdapter f_ap = new SqlDataAdapter("SELECT b1.bomid,b1.pid,b1.cwl,b2.line,b2.pwl,b2.ftype FROM bom_hd AS b1 LEFT JOIN bom_dtl AS b2 ON b1.bomid=b2.bomid WHERE b1.bomid='" + bomid + "'", sql_conn);
DataSet f_d = new DataSet();
f_ap.Fill(f_d);
tb1 = f_d.Tables[0];
return tb1;
}
//递归显示treeview
private void loadPower(TreeNode node, string cwl,string pid, DataTable tb)
{
DataRow[] dr = tb.Select("cwl='" + cwl + "' and pid='" + pid + "'","ftype desc");
foreach (DataRow idr in dr)
{
TreeNode tmp = node.Nodes.Add(idr["pwl"].ToString(), idr["pwl"].ToString());
tmp.Tag = idr["bomid"].ToString();
DataRow[] drc = tb.Select("cwl='" + idr["pwl"].ToString() + "'", "ftype desc");
if (drc.Length > 0)
loadPower(tmp, idr["pwl"].ToString(),idr["bomid"].ToString(),tb);
}
}
//显示treeview
public void re_tree2(string bomid)
{
xx_bomid = bomid;
tv1.Nodes.Clear();
DataTable tb = cj_bom(bomid);
//view2.AutoGenerateColumns = true;
//view2.DataSource = tb;
if (tb.Rows.Count == 0)
{
return;
}
int n_row = tb.Rows.Count;
int mx_lv = Convert.ToInt32(tb.Rows[n_row - 1]["lv"].ToString());
string cwl = tb.Rows[0]["cwl"].ToString();
string pid = tb.Rows[0]["pid"].ToString();
TreeNode tn0 = new TreeNode();
tn0.Text = cwl;
tn0.Tag = tb.Rows[0]["pid"].ToString();
tv1.Nodes.Add(tn0);
loadPower(tv1.TopNode, cwl,pid, tb);
tv1.ExpandAll();
}