рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рдбреЗрдЯрд╛ред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдвреВрдБрдврдирд╛

рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЗ рд╡рд┐рд╢рд╛рд▓ рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╣реБрдП, рдореБрдЭреЗ рдЗрд╕ рдмрд╛рдд рдкрд░ рдХрдбрд╝реА рдореЗрд╣рдирдд рдХрд░рдиреА рдкрдбрд╝реА рдХрд┐ рддрдерд╛рдХрдерд┐рдд "рд╕реБрдЕрд░ рдХреЗ рдХрд╛рди" рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП asp.net c # рдкрд░ рдЧреИрд░-рднрд╛рд░реА рдХреЛрдб рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХреНрд▓рд╛рд╕рд┐рдХ рдкреИрд░реЗрдВрдЯ-рдЪрд╛рдЗрд▓реНрдб рдореЙрдбрд▓ рд╣реЛред SQL Server 2008 рдореЗрдВ рддреБрд░рдВрдд рдЖрд░рдХреНрд╖рдг рдХрд░реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА OTV (CTE - рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рдХрд╛ рдЕрдВрдЧреНрд░реЗрдЬреА рд╕рдВрд╕реНрдХрд░рдг) рдореЗрдВ рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред

рдореЗрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЙрдбрд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬреЛ SADT рдорд╛рдирдХ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рдиреАрдЪреЗ рдЪрд┐рддреНрд░ 1 рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рдХреА рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИред


рдЪрд┐рддреНрд░ 1. рдореЙрдбрд▓

рдпрд╣рд╛рдБ BPNumber рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдЬреЛ рдЕрдкрдиреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рд╕реНрддрд░ рдкрд░ рдПрдХ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдХреНрд░рдо рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдпреВрдпреВ ("рд╢реИрдХреНрд╖рд┐рдХ рдкреНрд░рдмрдВрдзрди") -1, "рд╡рд┐рднрд╛рдЧ" - 2, рдФрд░ рдлрд┐рд░ "рдбреАрди" - 3 (рдЫрд╡рд┐ред 2) рдЖрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рдгрд╛рдо рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЪрд┐рддреНрд░рд╛ 2. рдкрд░рд┐рдгрд╛рдо

рдЕрдиреНрдп рд▓реЗрдЦрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде msdn рдХреА рдорджрдж рд╕реЗ рдЬрд╛рдВрдЪ рдХреА рдЧрдИ, рд▓реЗрдЦрдХ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ OTV рдореЗрдВ рдПрдХ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдмрд╛рд╣рд░ рдЦреАрдВрдЪ рд░рд╣рд╛ рд╣реИ рдФрд░ рдлрд┐рд░ asp.net рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреБрд░реЛрдз рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд░реНрд╡рд░ рд▓реЛрдб рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП xml рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдХреЗ рдЗрд╕реЗ рджрд░рдХрд┐рдирд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред рдкреЗрдбрд╝ рдХреЛ рдЕрднреА рднреА рдХрдИ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдореИрдВ рдЖрд╢рд╛рд╡рд╛рджреА рдирд╣реАрдВ рдерд╛ред
рдпрд╣ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ t-sql рдХрдо рдирд╣реАрдВ рд╣реИ, рдЙрд╕рдиреЗ рдЕрдиреНрдп рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдЕрдкрдиреА рдЦреЛрдЬ рдЬрд╛рд░реА рд░рдЦреАред рдФрд░ рдореБрдЭреЗ рдпрд╣ рд▓реЗрдЦ asp.net mvc рдореЗрдВ рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП рдорд┐рд▓рд╛ред рдХреНрдпрд╛ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдпрд╣рд╛рдБ рдкрд╛рдпрд╛ рдЧрдпрд╛ред ASP.NET 2.0 рдореЗрдВ рдЯреНрд░реА рд╡реНрдпреВ рдХреЗ рд╕рд╛рде рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рдбреЗрдЯрд╛ рдЕрдкрдиреА рд╕рд╛рджрдЧреА рдореЗрдВ рд╣рдбрд╝рддрд╛рд▓реА рдерд╛ , рдФрд░ рдЗрд╕реЗ рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рдХреА рдЙрдЪрд┐рдд рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ред NULL рдорд╛рди рдХреЛ -1 рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрд╡реЗрд░реА рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдмрджрд▓реЗрдВ:

SqlCommand dbCommand = new SqlCommand("SELECT [BusinessProcessID], [BPName], [ProjectID], case when [BusinessProcessIDTOP] IS NULL then -1 else [BusinessProcessIDTOP] end as [BusinessProcessIDTOP] FROM [BusinessProcess] WHERE ([ProjectID] = " + HiddenField1.Value.ToString() + ") order by BPNumber", myConn); 


рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 1. рд╢реАрд░реНрд╖ рдиреЛрдб рдвреВрдБрдврдирд╛
рд╡реИрд╕реЗ, рдкреВрд░реА рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ
 using System.Data.SqlClient; public partial class bptree : System.Web.UI.Page { DataTable dtTree = new DataTable(); protected void Page_Load(object sender, EventArgs e) { String strConnect = SqlDataSource1.ConnectionString; SqlConnection myConn = new SqlConnection(strConnect); myConn.Open(); SqlCommand dbCommand = new SqlCommand("SELECT [BusinessProcessID], [BPName], [ProjectID], case when [BusinessProcessIDTOP] IS NULL then -1 else [BusinessProcessIDTOP] end as [BusinessProcessIDTOP] FROM [BusinessProcess] WHERE ([ProjectID] = " + HiddenField1.Value.ToString() + ") order by BPNumber", myConn); SqlDataAdapter da = new SqlDataAdapter(dbCommand); da.Fill(dtTree); da.Dispose(); dbCommand.Dispose(); myConn.Dispose(); if (!IsPostBack) AddNodes(-1, TreeView1.Nodes); } void AddNodes(int id, TreeNodeCollection tn) { foreach (DataRow dr in dtTree.Select("BusinessProcessIDTOP = " + id)) { TreeNode sub = new TreeNode(dr["BPName"].ToString(), dr["BusinessProcessID"].ToString()); tn.Add(sub); AddNodes(Convert.ToInt32(sub.Value), sub.ChildNodes); } } } 

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 2 рд╕рдорд╕реНрдпрд╛ 2 рддрд░реАрдХреЛрдВ рдореЗрдВ рд╣рд▓

рдЦреИрд░, рдЬреИрд╕рд╛ рдХрд┐ рдУ.рдЯреА.рд╡реА. рдлрд┐рд░ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдмреЗрд╣рддрд░ рдЕрдиреБрдХреВрд▓ рд╣реИрдВ:

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ OTV рдХреЗ рд╕рд╛рде t-sql рдХреЛрдб рджреВрдВрдЧрд╛:

 /******    ******/ with cte_bp([BusinessProcessID] ,[BPName],[BusinessProcessIDTOP], level ,paths) as (SELECT [BusinessProcessID] ,[BPName] ,[BusinessProcessIDTOP], 0 as level, CAST([BPName]as nvarchar(max))+'/' FROM [cmk].[dbo].[BusinessProcess] where [ProjectID]=1 and BusinessProcessIDTOP is null UNION ALL SELECT [BusinessProcess].[BusinessProcessID] ,[BusinessProcess].[BPName] ,[BusinessProcess].[BusinessProcessIDTOP], level+1, d.paths +cast([BusinessProcess].[BPName] as nvarchar(max))+'/' FROM [cmk].[dbo].[BusinessProcess] Inner join cte_bp as d on d.BusinessProcessID=BusinessProcess.BusinessProcessIDTOP ) -- Statement using the CTE SELECT *, SPACE(level)+BPName as ch FROM cte_bp order by paths,BusinessProcessID 

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 3. OTV рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛

рдпрд╣рд╛рдБ рд▓реМрдЯрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ:


рдЪрд┐рддреНрд░рд╛ 3. рдХреНрд╡реЗрд░реА рдкрд░рд┐рдгрд╛рдо

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдЙрди рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХрд░реЗрдЧрд╛, рдЬреЛ рдЗрд╕ рд╡рд┐рд╖рдп рдХреЗ рд▓реЗрдЦрдХ рдХреА рддрд░рд╣, SQL Server 2008 рдФрд░ рдЙрдЪреНрдЪрддрд░ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддреБрдЪреНрдЫ рдФрд░ рддреНрд╡рд░рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

Source: https://habr.com/ru/post/In187664/


All Articles