市长热线演示版

BasicEngineerWorkOrder.aspx.cs 24KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7. using System.Text;
  8. using System.Data;
  9. namespace HySoft.BaseCallCenter.Web.reportmanage.dataanalysis
  10. {
  11. public partial class BasicEngineerWorkOrder : System.Web.UI.Page
  12. {
  13. protected string TableHtml = null;
  14. protected void Page_Load(object sender, EventArgs e)
  15. {
  16. OutputTable();
  17. }
  18. protected void btnExport_Click(object sender, EventArgs e)
  19. {
  20. string fileName = "一线工程师工单分布报表" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
  21. Response.Clear();
  22. Response.Charset = "GB2312";
  23. Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
  24. Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName));
  25. Response.ContentType = "application/ms-excel";
  26. Response.Write(TableHtml);
  27. Response.End();
  28. }
  29. private void OutputTable()
  30. {
  31. //查询条件
  32. string starttime = txtStartTime.Text.Trim();
  33. string endtime = txtEndTime.Text.Trim();
  34. if (string.IsNullOrWhiteSpace(starttime)) { starttime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).ToString("yyyy-MM-dd"); txtStartTime.Text = starttime; }
  35. if (string.IsNullOrWhiteSpace(endtime)) { endtime = DateTime.Today.ToString("yyyy-MM-dd"); txtEndTime.Text = endtime; }
  36. string tabletitle = "一线工程师工单分布";
  37. string[] tablehead = new string[] { "客服部名称", "一线工程师姓名", "工单数量", "总处理时间(小时)", "平均响应时间(小时)", "平均处理时间(小时)" };
  38. TableHtml = createTable(tabletitle, tablehead, starttime, endtime);
  39. }
  40. protected string createTable(string title, string[] head, string starttime, string endtime)
  41. {
  42. StringBuilder sb = new StringBuilder();
  43. //表名称
  44. sb.Append(createTableTitle(title));
  45. //表列名
  46. sb.Append("<table border='0' cellpadding='0' cellspacing='0' width='100%' align='center'>");
  47. sb.Append(createTableHead(head));
  48. sb.Append(createTableBody(starttime, endtime));
  49. sb.Append("</table>");
  50. return sb.ToString();
  51. }
  52. /// <summary>
  53. /// 表名称
  54. /// </summary>
  55. /// <param name="title">表名</param>
  56. /// <returns></returns>
  57. protected string createTableTitle(string title)
  58. {
  59. StringBuilder sb = new StringBuilder();
  60. sb.Append("<h1 style='font-size: 18px; font-weight: bold; color: #333333; text-align: center;width: 100%;'><b>" + title + "</b></h1>");
  61. return sb.ToString();
  62. }
  63. /// <summary>
  64. /// 表头(表列名)
  65. /// </summary>
  66. /// <param name="head"></param>
  67. /// <returns></returns>
  68. protected string createTableHead(string[] head)
  69. {
  70. StringBuilder sb = new StringBuilder();
  71. sb.Append("<tr class=\"formtabletitle1\" style=\"height: 25px;background-color: #D5EDFE;border-left: 1px solid #CCCCCC;border-right: 1px solid #CCCCCC;border-top: 1px solid #CCCCCC;border-bottom: 1px solid #CCCCCC;padding: 3px 3px 3px 3px;text-align:center;\">");
  72. for (int i = 0; i < head.Length; i++)
  73. {
  74. sb.Append("<td class=\"formtabletitle1\" style=\"height: 25px;background-color: #D5EDFE;border-left: 1px solid #CCCCCC;border-right: 1px solid #CCCCCC;border-top: 1px solid #CCCCCC;border-bottom: 1px solid #CCCCCC;padding: 3px 3px 3px 3px;text-align:center;\">" + head[i] + "</td>");
  75. }
  76. sb.Append("</tr>");
  77. return sb.ToString();
  78. }
  79. /// <summary>
  80. /// 表内容
  81. /// </summary>
  82. /// <param name="head"></param>
  83. /// <returns></returns>
  84. protected string createTableBody(string starttime, string endtime)
  85. {
  86. //存储数据的数据字典
  87. Dictionary<string, Dictionary<int, List<string>>> body = new Dictionary<string, Dictionary<int, List<string>>>();
  88. Dictionary<string, Dictionary<int, List<string>>> newbody = new Dictionary<string, Dictionary<int, List<string>>>();
  89. //这段时间已完成的报修工单
  90. string sql = string.Format("F_WORKORDERSTATEID=0 and F_WORKORDERTYPEID={0}", 16);//16为报修
  91. if (starttime != "")
  92. {
  93. sql += " AND F_STARTTIME>='" + starttime + " 00:00:00'";
  94. }
  95. if (endtime != "")
  96. {
  97. sql += " AND F_ENDTIME<='" + endtime + " 23:59:59'";
  98. }
  99. DataTable dtable = new BLL.T_Wo_WorkOrderBase().GetList(sql).Tables[0];
  100. //工单总数
  101. int allcount = dtable.Rows.Count;
  102. #region 遍历工单找到每个工单所属的部门,总接单和处理时间,总结单时间,总处理时间
  103. for (int i = 0; i < allcount; i++)
  104. {
  105. //处理这个工单工程师
  106. DataTable workorderbase = dtable.Select("F_INSTANCEID=" + dtable.Rows[i]["F_INSTANCEID"]).CopyToDataTable();
  107. if (workorderbase.Rows.Count > 0)
  108. {
  109. List<Model.T_Wo_WorkOrderConstructor> constructorlist =
  110. new BLL.T_Wo_WorkOrderConstructor().GetModelList("F_WORKORDERID=" + workorderbase.Rows[0]["F_WORKORDERID"]);
  111. if (constructorlist.Count > 0)
  112. {
  113. foreach (Model.T_Wo_WorkOrderConstructor constructor in constructorlist)
  114. {
  115. if (constructor.F_ISMAIN == 1)
  116. {
  117. int id = Convert.ToInt32(constructor.F_USERID);
  118. Model.T_Sys_UserAccount user = new BLL.T_Sys_UserAccount().GetModel(id);
  119. if (user != null)
  120. {
  121. if (user.F_RoleId == 30)
  122. {
  123. string instanceid = dtable.Rows[i]["F_INSTANCEID"].ToString();
  124. string[] UNDN = getUserNameAndDeptName(user.F_UserId);
  125. if (body.ContainsKey(UNDN[1]))
  126. {
  127. if (body[UNDN[1]].ContainsKey(user.F_UserId))
  128. {
  129. body[UNDN[1]][user.F_UserId][0] = (Convert.ToInt32(body[UNDN[1]][user.F_UserId][0]) + 1).ToString();
  130. body[UNDN[1]][user.F_UserId][1] = (Convert.ToInt32(body[UNDN[1]][user.F_UserId][1]) + Convert.ToInt32(getSumTime(instanceid, "6,7"))).ToString();
  131. body[UNDN[1]][user.F_UserId][2] = (Convert.ToInt32(body[UNDN[1]][user.F_UserId][2]) + Convert.ToInt32(getSumTime(instanceid, "6"))).ToString();
  132. body[UNDN[1]][user.F_UserId][3] = (Convert.ToInt32(body[UNDN[1]][user.F_UserId][3]) + Convert.ToInt32(getSumTime(instanceid, "7"))).ToString();
  133. }
  134. else
  135. {
  136. body[UNDN[1]].Add(user.F_UserId, new List<string>() { "1", getSumTime(instanceid, "6,7"), getSumTime(instanceid, "6"), getSumTime(instanceid, "7") });
  137. }
  138. }
  139. else
  140. {
  141. Dictionary<int, List<string>> bodylist = new Dictionary<int, List<string>>();
  142. bodylist.Add(user.F_UserId, new List<string>() { "1", getSumTime(instanceid, "6,7"), getSumTime(instanceid, "6"), getSumTime(instanceid, "7") });
  143. body.Add(UNDN[1], bodylist);
  144. }
  145. }
  146. }
  147. }
  148. }
  149. }
  150. }
  151. }
  152. #endregion
  153. StringBuilder sb = new StringBuilder();
  154. #region 部门合计
  155. foreach (var keys in body.Keys)
  156. {
  157. Dictionary<int, List<string>> Values = body[keys];
  158. Dictionary<int, List<string>> newValues = new Dictionary<int, List<string>>();
  159. List<string> sum = new List<string>() { "0", "0", "0", "0" };
  160. foreach (var kv in Values)
  161. {
  162. List<string> values = kv.Value;
  163. sum[0] = (int.Parse(sum[0]) + int.Parse(values[0])).ToString();
  164. sum[1] = (int.Parse(sum[1]) + int.Parse(values[1])).ToString();
  165. sum[2] = (int.Parse(sum[2]) + int.Parse(values[2])).ToString();
  166. sum[3] = (int.Parse(sum[3]) + int.Parse(values[3])).ToString();
  167. newValues.Add(kv.Key, kv.Value);
  168. }
  169. newValues.Add(-1, sum);
  170. newbody.Add(keys, newValues);
  171. }
  172. #endregion
  173. #region 按部门排序
  174. var KeysValues = from objDic in newbody orderby int.Parse(objDic.Value[-1][0]) descending select objDic;
  175. foreach (var keyvalue in KeysValues)
  176. {
  177. #region 打印表格--排序
  178. Dictionary<int, List<string>> bodyValues = keyvalue.Value;
  179. int count = bodyValues.Count;
  180. bool bb = true;
  181. var Values = from objDic in bodyValues orderby int.Parse(objDic.Value[0]) descending select objDic;
  182. foreach (var kv in Values)
  183. {
  184. List<string> values = kv.Value;
  185. values[1] = GetTimeInfo((Convert.ToInt32(values[1]) * 1.0 / Convert.ToInt32(values[0])).ToString("0.00"));
  186. values[2] = GetTimeInfo((Convert.ToInt32(values[2]) * 1.0 / Convert.ToInt32(values[0])).ToString("0.00"));
  187. values[3] = GetTimeInfo((Convert.ToInt32(values[3]) * 1.0 / Convert.ToInt32(values[0])).ToString("0.00"));
  188. if (kv.Key != -1)
  189. {
  190. sb.Append("<tr style=\"text-align: center;\" onmouseover=\"this.style.backgroundColor='#F6F6F6'\" onmouseout=\"this.style.backgroundColor='#ffffff'\">");
  191. if (bb)
  192. {
  193. sb.Append("<td rowspan=\"" + (count - 1) + "\" class=\"formtabletitle1\"style=\"height: 25px;background-color: #fff;border-left: 1px solid #CCCCCC;border-right: 1px solid #CCCCCC;border-top: 1px solid #CCCCCC;border-bottom: 1px solid #CCCCCC;padding: 3px 3px 3px 3px;text-align:center;\">" + keyvalue.Key + "</td>");
  194. bb = false;
  195. }
  196. string[] undn = getUserNameAndDeptName(kv.Key);
  197. sb.Append("<td class=\"formtabletitle1\"style=\"height: 25px;background-color: #fff;border-left: 1px solid #CCCCCC;border-right: 1px solid #CCCCCC;border-top: 1px solid #CCCCCC;border-bottom: 1px solid #CCCCCC;padding: 3px 3px 3px 3px;text-align:center;\">" + undn[0] + "</td>");
  198. foreach (var v in values)
  199. {
  200. sb.Append("<td class=\"formtabletitle1\"style=\"height: 25px;background-color: #fff;border-left: 1px solid #CCCCCC;border-right: 1px solid #CCCCCC;border-top: 1px solid #CCCCCC;border-bottom: 1px solid #CCCCCC;padding: 3px 3px 3px 3px;text-align:center;\">" + v + "</td>");
  201. }
  202. sb.Append("</tr>");
  203. }
  204. }
  205. #endregion
  206. }
  207. #endregion
  208. #region 未按部门排序
  209. //foreach (var keys in body.Keys)
  210. //{
  211. // #region 打印表格--排序
  212. // Dictionary<int, List<string>> bodyValues = body[keys];
  213. // int count = bodyValues.Count;
  214. // bool bb = true;
  215. // var Values = from objDic in bodyValues orderby int.Parse(objDic.Value[0]) descending select objDic;
  216. // foreach (var kv in Values)
  217. // {
  218. // List<string> values = kv.Value;
  219. // values[1] = GetTimeInfo((Convert.ToInt32(values[1]) * 1.0 / Convert.ToInt32(values[0])).ToString("0.00"));
  220. // values[2] = GetTimeInfo((Convert.ToInt32(values[2]) * 1.0 / Convert.ToInt32(values[0])).ToString("0.00"));
  221. // values[3] = GetTimeInfo((Convert.ToInt32(values[3]) * 1.0 / Convert.ToInt32(values[0])).ToString("0.00"));
  222. // sb.Append("<tr style=\"text-align: center;\" onmouseover=\"this.style.backgroundColor='#F6F6F6'\" onmouseout=\"this.style.backgroundColor='#ffffff'\">");
  223. // if (bb)
  224. // {
  225. // sb.Append("<td rowspan=\"" + count + "\" class=\"formtabletitle1\"style=\"height: 25px;background-color: #fff;border-left: 1px solid #CCCCCC;border-right: 1px solid #CCCCCC;border-top: 1px solid #CCCCCC;border-bottom: 1px solid #CCCCCC;padding: 3px 3px 3px 3px;text-align:center;\">" + keys + "</td>");
  226. // bb = false;
  227. // }
  228. // string[] undn = getUserNameAndDeptName(kv.Key);
  229. // sb.Append("<td class=\"formtabletitle1\"style=\"height: 25px;background-color: #fff;border-left: 1px solid #CCCCCC;border-right: 1px solid #CCCCCC;border-top: 1px solid #CCCCCC;border-bottom: 1px solid #CCCCCC;padding: 3px 3px 3px 3px;text-align:center;\">" + undn[0] + "</td>");
  230. // foreach (var v in values)
  231. // {
  232. // sb.Append("<td class=\"formtabletitle1\"style=\"height: 25px;background-color: #fff;border-left: 1px solid #CCCCCC;border-right: 1px solid #CCCCCC;border-top: 1px solid #CCCCCC;border-bottom: 1px solid #CCCCCC;padding: 3px 3px 3px 3px;text-align:center;\">" + v + "</td>");
  233. // }
  234. // sb.Append("</tr>");
  235. // }
  236. // #endregion
  237. // #region 打印表格--未排序
  238. // //Dictionary<int, List<string>> Values = body[keys];
  239. // //int count = Values.Count;
  240. // //bool bb = true;
  241. // //foreach (var k in Values.Keys)
  242. // //{
  243. // // List<string> values = Values[k];
  244. // // values[1] = (Convert.ToInt32(values[1]) * 1.0 / Convert.ToInt32(values[0])).ToString("0.00");
  245. // // values[2] = (Convert.ToInt32(values[2]) * 1.0 / Convert.ToInt32(values[0])).ToString("0.00");
  246. // // values[3] = (Convert.ToInt32(values[3]) * 1.0 / Convert.ToInt32(values[0])).ToString("0.00");
  247. // // sb.Append("<tr style=\"text-align: center;\" onmouseover=\"this.style.backgroundColor='#F6F6F6'\" onmouseout=\"this.style.backgroundColor='#ffffff'\">");
  248. // // if (bb)
  249. // // {
  250. // // sb.Append("<td rowspan=\"" + count + "\" class=\"formtabletitle1\"style=\"height: 25px;background-color: #fff;border-left: 1px solid #CCCCCC;border-right: 1px solid #CCCCCC;border-top: 1px solid #CCCCCC;border-bottom: 1px solid #CCCCCC;padding: 3px 3px 3px 3px;text-align:center;\">" + keys + "</td>");
  251. // // bb = false;
  252. // // }
  253. // // string[] undn = getUserNameAndDeptName(k);
  254. // // sb.Append("<td class=\"formtabletitle1\"style=\"height: 25px;background-color: #fff;border-left: 1px solid #CCCCCC;border-right: 1px solid #CCCCCC;border-top: 1px solid #CCCCCC;border-bottom: 1px solid #CCCCCC;padding: 3px 3px 3px 3px;text-align:center;\">" + undn[0] + "</td>");
  255. // // foreach (var v in values)
  256. // // {
  257. // // sb.Append("<td class=\"formtabletitle1\"style=\"height: 25px;background-color: #fff;border-left: 1px solid #CCCCCC;border-right: 1px solid #CCCCCC;border-top: 1px solid #CCCCCC;border-bottom: 1px solid #CCCCCC;padding: 3px 3px 3px 3px;text-align:center;\">" + v + "</td>");
  258. // // }
  259. // // sb.Append("</tr>");
  260. // //}
  261. // #endregion
  262. //}
  263. #endregion
  264. return sb.ToString();
  265. }
  266. protected string createTableBody1(string starttime, string endtime)
  267. {
  268. //存储数据的数据字典
  269. Dictionary<int, List<string>> body = new Dictionary<int, List<string>>();
  270. //这段时间已完成的报修工单
  271. string sql = string.Format("F_WORKORDERSTATEID=0 and F_WORKORDERTYPEID={0}", 16);//16为报修
  272. if (starttime != "")
  273. {
  274. sql += " AND F_STARTTIME>='" + starttime + " 00:00:00'";
  275. }
  276. if (endtime != "")
  277. {
  278. sql += " AND F_ENDTIME<='" + endtime + " 23:59:59'";
  279. }
  280. DataTable dtable = new BLL.T_Wo_WorkOrderBase().GetList(sql).Tables[0];
  281. //工单总数
  282. int allcount = dtable.Rows.Count;
  283. #region 遍历工单找到每个工单所属的部门,总接单和处理时间,总结单时间,总处理时间
  284. for (int i = 0; i < allcount; i++)
  285. {
  286. //处理这个工单工程师
  287. DataTable workorderbase = new BLL.T_Wo_WorkOrderBase().GetList("F_INSTANCEID=" + dtable.Rows[i]["F_INSTANCEID"]).Tables[0];
  288. if (workorderbase.Rows.Count > 0)
  289. {
  290. List<Model.T_Wo_WorkOrderConstructor> constructorlist =
  291. new BLL.T_Wo_WorkOrderConstructor().GetModelList("F_WORKORDERID=" + workorderbase.Rows[0]["F_WORKORDERID"]);
  292. if (constructorlist.Count > 0)
  293. {
  294. foreach (Model.T_Wo_WorkOrderConstructor constructor in constructorlist)
  295. {
  296. if (constructor.F_ISMAIN == 1)
  297. {
  298. int id = Convert.ToInt32(constructor.F_USERID);
  299. Model.T_Sys_UserAccount user = new BLL.T_Sys_UserAccount().GetModel(id);
  300. if (user != null)
  301. {
  302. if (user.F_RoleId == 30)
  303. {
  304. string instanceid = dtable.Rows[i]["F_INSTANCEID"].ToString();
  305. //这个工单是某个部门的工程师处理的就存储起来,如果还有其他工单也是此部门处理的就增加1
  306. if (body.ContainsKey(user.F_UserId))
  307. {
  308. body[user.F_UserId][0] = (Convert.ToInt32(body[user.F_UserId][0]) + 1).ToString();
  309. body[user.F_UserId][1] = (Convert.ToInt32(body[user.F_UserId][1]) + Convert.ToInt32(getSumTime(instanceid, "6,7"))).ToString();
  310. body[user.F_UserId][2] = (Convert.ToInt32(body[user.F_UserId][2]) + Convert.ToInt32(getSumTime(instanceid, "6"))).ToString();
  311. body[user.F_UserId][3] = (Convert.ToInt32(body[user.F_UserId][3]) + Convert.ToInt32(getSumTime(instanceid, "7"))).ToString();
  312. }
  313. else
  314. {
  315. body.Add(user.F_UserId, new List<string>() { "1", getSumTime(instanceid, "6,7"), getSumTime(instanceid, "6"), getSumTime(instanceid, "7"), getUserNameAndDeptName(user.F_UserId)[1] });
  316. }
  317. }
  318. }
  319. }
  320. }
  321. }
  322. }
  323. }
  324. #endregion
  325. StringBuilder sb = new StringBuilder();
  326. foreach (var key in body.Keys)
  327. {
  328. List<string> Values = body[key];
  329. Values[1] = (Convert.ToInt32(Values[1]) * 1.0 / Convert.ToInt32(Values[0])).ToString("0.00");
  330. Values[2] = (Convert.ToInt32(Values[2]) * 1.0 / Convert.ToInt32(Values[0])).ToString("0.00");
  331. Values[3] = (Convert.ToInt32(Values[3]) * 1.0 / Convert.ToInt32(Values[0])).ToString("0.00");
  332. sb.Append("<tr style=\"text-align: center;\" onmouseover=\"this.style.backgroundColor='#F6F6F6'\" onmouseout=\"this.style.backgroundColor='#ffffff'\">");
  333. sb.Append("<td class=\"formtabletitle1\"style=\"height: 25px;background-color: #fff;border-left: 1px solid #CCCCCC;border-right: 1px solid #CCCCCC;border-top: 1px solid #CCCCCC;border-bottom: 1px solid #CCCCCC;padding: 3px 3px 3px 3px;text-align:center;\">" + Values[4] + "</td>");
  334. sb.Append("<td class=\"formtabletitle1\"style=\"height: 25px;background-color: #fff;border-left: 1px solid #CCCCCC;border-right: 1px solid #CCCCCC;border-top: 1px solid #CCCCCC;border-bottom: 1px solid #CCCCCC;padding: 3px 3px 3px 3px;text-align:center;\">" + getUserNameAndDeptName(key)[0] + "</td>");
  335. for (int i = 0; i < Values.Count(); i++)
  336. {
  337. if (i == 4) continue;
  338. sb.Append("<td class=\"formtabletitle1\"style=\"height: 25px;background-color: #fff;border-left: 1px solid #CCCCCC;border-right: 1px solid #CCCCCC;border-top: 1px solid #CCCCCC;border-bottom: 1px solid #CCCCCC;padding: 3px 3px 3px 3px;text-align:center;\">" + Values[i] + "</td>");
  339. }
  340. sb.Append("</tr>");
  341. }
  342. return sb.ToString();
  343. }
  344. /// <summary>
  345. /// 时间转换(将秒转换为易读的时间)
  346. /// </summary>
  347. /// <param name="times">秒</param>
  348. /// <returns></returns>
  349. public string GetTimeInfo(string times)
  350. {
  351. string res = "";
  352. try
  353. {
  354. double d = Convert.ToDouble(times);
  355. res = (d / 3600).ToString("0.00");
  356. }
  357. catch
  358. { }
  359. return res;
  360. }
  361. private string getSumTime(string instanceid, string stateids)
  362. {
  363. string sqlwhere = "SELECT sum([F_ELAPSEDTIME]) FROM [T_Wo_WorkOrderHistory] WHERE F_INSTANCEID='" + instanceid + "' AND F_WORKORDERSTATEID IN (" + stateids + ")";
  364. DataTable dt = DBUtility.DbHelperSQL.Query(sqlwhere).Tables[0];
  365. long l = 0;
  366. long.TryParse(dt.Rows[0][0].ToString(), out l);
  367. return l.ToString();
  368. }
  369. private string[] getUserNameAndDeptName(int userid)
  370. {
  371. var user = new BLL.T_Sys_UserAccount().GetModel(userid);
  372. string[] resarr = new string[2];
  373. if (user != null)
  374. {
  375. resarr[0] = user.F_UserName;
  376. var dept = new BLL.T_Sys_Department().GetModel(user.F_DeptId);
  377. if (dept != null)
  378. {
  379. resarr[1] = dept.F_DeptName;
  380. }
  381. }
  382. return resarr;
  383. }
  384. protected void btnConfirm_Click(object sender, EventArgs e)
  385. {
  386. OutputTable();
  387. }
  388. }
  389. }