ControlDepartmentTreeView.ascx.cs
上传用户:xgw_05
上传日期:2009-12-11
资源大小:20208k
文件大小:6k
源码类别:

OA系统

开发平台:

C#

  1. namespace UDS.Inc
  2. {
  3. using System;
  4. using System.Collections;
  5. using System.ComponentModel;
  6. using System.Data;
  7. using System.Drawing;
  8. using System.Web;
  9. using System.Web.SessionState;
  10. using System.Web.UI;
  11. using System.Web.UI.WebControls;
  12. using System.Web.UI.HtmlControls;
  13. using System.Data.SqlClient;
  14. using UDS.Components;
  15. using Microsoft.Web.UI.WebControls;
  16. using System.Configuration;  
  17. /// <summary>
  18. /// ControlDepartmentTreeView 的摘要说明。
  19. /// </summary>
  20. public abstract class ControlDepartmentTreeView : System.Web.UI.UserControl
  21. {
  22. protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
  23. protected DataTable dataTbl1,dataTbl2;
  24. private void Page_Load(object sender, System.EventArgs e)
  25. {
  26. if(!Page.IsPostBack)
  27. {
  28. InitRootNodeDataTable();
  29. InitTreeRootNode(TreeView1.Nodes);
  30. //InitTree(TreeView1.Nodes,"0");
  31. if(TreeView1.Nodes.Count >0)
  32. TreeView1.Nodes[0].Expanded = true;
  33. }
  34. }
  35. #region 将DataReader 转为 DataTable
  36. /// <summary>
  37. /// 将DataReader 转为 DataTable
  38. /// </summary>
  39. /// <param name="DataReader">DataReader</param>
  40. public DataTable ConvertDataReaderToDataTable(SqlDataReader dataReader)
  41. {
  42. DataTable datatable = new DataTable();
  43. DataTable schemaTable = dataReader.GetSchemaTable();
  44. //动态添加列
  45. foreach(DataRow myRow in schemaTable.Rows)
  46. {
  47. DataColumn myDataColumn = new DataColumn();
  48. myDataColumn.DataType = System.Type.GetType("System.String");
  49. myDataColumn.ColumnName = myRow[0].ToString();
  50. datatable.Columns.Add(myDataColumn);
  51. }
  52. //添加数据
  53. while(dataReader.Read())
  54. {
  55. DataRow myDataRow = datatable.NewRow();
  56. for(int i=0;i<schemaTable.Rows.Count;i++)
  57. {
  58. myDataRow[i] = dataReader[i].ToString();
  59. }
  60. datatable.Rows.Add(myDataRow);
  61. myDataRow = null;
  62. }
  63. schemaTable = null;
  64. return datatable;
  65. }
  66. #endregion
  67. /// <summary>
  68. /// 初始化 RootNode DataTable
  69. /// </summary>
  70. private void InitRootNodeDataTable()
  71. {
  72. Database data = new Database();
  73. SqlDataReader dataReader = null;
  74. try
  75. {
  76. data.RunProc("sp_GetRootDepartment", out dataReader);
  77. }
  78. catch(Exception ex)
  79. {
  80. Response.Write(ex.ToString());
  81. //UDS.Components.Error.Log(ex.ToString());
  82. }
  83. dataTbl1 = ConvertDataReaderToDataTable(dataReader); 
  84. dataTbl1.TableName = "TreeView";
  85. }
  86. /// <summary>
  87. /// 初始化 ChildNode DataTable
  88. /// </summary>
  89. private void InitChildNodeDataTable(int ClassParentID)
  90. {
  91. Database data = new Database();
  92. SqlDataReader dataReader = null;
  93. SqlParameter[] prams = {
  94.    data.MakeInParam("@DepartmentID",SqlDbType.Int  , 20, ClassParentID)
  95.    };
  96. try
  97. {
  98. data.RunProc("sp_GetSubDepartment", prams,out dataReader);
  99. }
  100. catch(Exception ex)
  101. {
  102. Response.Write(ex.ToString());
  103. //UDS.Components.Error.Log(ex.ToString());
  104. }
  105. dataTbl2 = ConvertDataReaderToDataTable(dataReader); 
  106. dataTbl2.TableName = "TreeView";
  107. }
  108. /// <summary>
  109. /// 初始化TreeView 的 RootNode
  110. /// </summary>
  111. private void InitTreeRootNode(TreeNodeCollection TNC)
  112. {
  113. DataView dataView  = new DataView();
  114. dataView    = dataTbl1.Copy().DefaultView;
  115. dataView.RowFilter = "Super_Department_ID = Department_ID";
  116. foreach(DataRowView drv in dataView)
  117. {
  118. TreeNode tn   = new TreeNode();
  119. tn.ID   = drv["Department_ID"].ToString();
  120. tn.Text   = "<span onmouseover=javascript:title='"+drv["Department_Description"].ToString()+"'>"+drv["Department_Name"].ToString()+"</span>";
  121. tn.ImageUrl   = GetIcon("8");
  122. tn.NavigateUrl = "ListView.aspx?DeptID=" + tn.ID;
  123. tn.Target = "MainFrame";
  124. TNC.Add(tn);
  125. InitChildNodeDataTable(Int32.Parse(tn.ID.ToString()));
  126. InitTreeChildNode(tn.Nodes,tn.ID);
  127. }
  128. dataTbl1 = null;
  129. dataTbl2 = null;
  130. }
  131. /// <summary>
  132. /// 初始化TreeView 的 ChildNode
  133. /// </summary>
  134. private void InitTreeChildNode(TreeNodeCollection TNC,string classParentID)
  135. {
  136. DataView dataView  = new DataView();
  137. dataView    = dataTbl2.Copy().DefaultView ;
  138. dataView.RowFilter = "Super_Department_ID = " + classParentID + "";
  139. foreach(DataRowView drv in dataView)
  140. {
  141. TreeNode tn   = new TreeNode();
  142. tn.ID   = drv["Department_ID"].ToString();
  143. tn.Text   = "<span onmouseover=javascript:title='"+drv["Department_Description"].ToString()+"'>"+drv["Department_Name"].ToString()+"</span>";
  144. tn.ImageUrl   = GetIcon("9");
  145. tn.NavigateUrl = "ListView.aspx?DeptID=" + tn.ID;
  146. tn.Target = "MainFrame";
  147. TNC.Add(tn);
  148. InitChildNodeDataTable(Int32.Parse(tn.ID.ToString()));
  149. InitTreeChildNode(tn.Nodes,tn.ID);
  150. }
  151. }
  152. #region 获取节点图标
  153. /// <summary>
  154. /// 获取节点图标
  155. /// </summary>
  156. private string GetIcon(string ClassType)
  157. {
  158. string rtnValue = "../../DataImages/";
  159. switch (ClassType)
  160. {
  161. case "0":
  162. rtnValue += "flag.gif" ;
  163. break;
  164. case "1":
  165. rtnValue += "myDoc.gif" ;
  166. break;
  167. case "2":
  168. rtnValue += "mail.gif" ;
  169. break;
  170. case "3":
  171. rtnValue += "page.gif" ;
  172. break;
  173. case "4":
  174. rtnValue += "scales.gif" ;
  175. break;
  176. case "5":
  177. rtnValue += "mail.gif" ;
  178. break;
  179. case "6":
  180. rtnValue += "help_page.gif" ;
  181. break;
  182. case "7":
  183. rtnValue += "red_ball.gif" ;
  184. break;
  185. case "8":
  186. rtnValue += "search_globe.gif" ;
  187. break;
  188. case "9":
  189. rtnValue += "person.gif" ;
  190. break;
  191. default: 
  192. rtnValue += "";
  193. break;
  194. }
  195. return rtnValue;
  196. }
  197. #endregion
  198. #region Web Form Designer generated code
  199. override protected void OnInit(EventArgs e)
  200. {
  201. //
  202. // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
  203. //
  204. InitializeComponent();
  205. base.OnInit(e);
  206. }
  207. /// 设计器支持所需的方法 - 不要使用
  208. /// 代码编辑器修改此方法的内容。
  209. /// </summary>
  210. private void InitializeComponent()
  211. {
  212. this.Load += new System.EventHandler(this.Page_Load);
  213. }
  214. #endregion
  215. }
  216. }