【发布时间】:2010-11-11 14:42:25
【问题描述】:
我有下面的代码,我想将全局方法设置为静态,这样我就可以在我的 asp.net Web 应用程序上构建几个树视图。现在我每个人都使用下面的代码构建了自己的树视图。我正在考虑制作一个全局静态方法来生成这样的节点结构,然后将它们分配给我页面中的树视图......或类似的东西。我不关心实际解决方案的细节,只要我可以有一个方法来调用,比如“buildTree()”,它可以用来绑定树视图控件。
困难吗?
DataTable dtProjects = new DataTable();
DataTable dtRelease = new DataTable();
using (SqlConnection con = Global.GetConnection())
{
StringBuilder str = new StringBuilder();
str.Append("SELECT r.ReleaseId, ");
str.Append(" r.Name, ");
str.Append(" rs.EndDate ");
str.Append(" FROM Release r ");
str.Append(" LEFT OUTER JOIN ReleaseSchedule rs ");
str.Append(" ON r.ReleaseId = rs.ReleaseId ");
str.Append(" AND rs.MilestoneCID = 77");
str.Append(" WHERE r.CompletionStatusCID NOT IN (34, 35) ");
str.Append(" ORDER BY r.ReportingPriority, r.Name ");
SqlDataAdapter da = new SqlDataAdapter(str.ToString(), con);
da.Fill(dtRelease);
str = new StringBuilder();
str.Append("SELECT p.ProjectId, ");
str.Append(" p.ProjectName, ");
str.Append(" p.ParentProjectId, ");
str.Append(" p.ReleaseId ");
str.Append(" FROM Project p ");
str.Append(" WHERE p.CompletionStatusCID NOT IN (34, 35) ");
str.Append(" AND p.ProjectTypeCID <> 92 ");
str.Append(" ORDER BY p.ProjectName ");
da = new SqlDataAdapter(str.ToString(), con);
da.Fill(dtProjects);
}
tvProject.Nodes.Clear();
TreeNode rootNode = new TreeNode("All Projects");
rootNode.Expanded = true;
foreach (DataRow drRelease in dtRelease.Rows)
{
TreeNode releaseNode = new TreeNode((string)drRelease["Name"]);
DataRow[] releaseProjects = dtProjects.Select("(ReleaseId = " + drRelease["ReleaseId"] + ") AND (ParentProjectId IS NULL)");
foreach (DataRow drProject in releaseProjects)
{
TreeNode projectNode = new TreeNode((string)drProject["ProjectName"], drProject["ProjectId"].ToString());
projectNode.ToolTip = "This is a project node and is selectable";
loadTVNode((int)drProject["ProjectId"], projectNode, dtProjects);
if (drRelease["EndDate"] != System.DBNull.Value)
{
string s = ((DateTime)drRelease["EndDate"]).ToString(Global.CONST_DateFormat);
releaseNode.ToolTip = "Release scheduled for deployment on " + s;
}
else
releaseNode.ToolTip = "Release deployment has not been scheduled";
releaseNode.ToolTip += ". This node is not selectable";
releaseNode.ChildNodes.Add(projectNode);
}
rootNode.ChildNodes.Add(releaseNode);
}
tvProject.Nodes.Add(rootNode);
【问题讨论】: