using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Bll;
using Config;
using System.Data;
using System.Data.SqlClient;
namespace wow
{
public partial class DrawTable : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string SQLstr = "select * from nt_user_constrbook";//SQL查询语句,就是把第三张图中的数据全取出来。
DataTable nodeDT = getDT(SQLstr);
string head_html = drawTable(nodeDT);
myTable.InnerHtml = head_html;
}
}
public DataTable getDT(string strSQL)
{
string strConn = DBConfig.WOWConString;//数据库链接字符串,按实际情况改动
SqlDataAdapter da = new SqlDataAdapter(strSQL, strConn);
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
/// <summary>
/// 画表格
/// </summary>
/// <param name="nodeDT"></param>
/// <returns></returns>
protected string drawTable(DataTable nodeDT)
{
string strTable = "<table border=\"1\">";
string strRow = "";
int maxLay = 0;
foreach (DataRow max in nodeDT.Rows)
{
if (Convert.ToInt32(max["Layer"].ToString()) > maxLay)
{
maxLay = Convert.ToInt32(max["Layer"].ToString());
}
}
for (int i = 1; i <= maxLay; i++)
{
int colspan = 0;
int rowspan = 0;
strRow += "<tr>";
DataRow[] drArr = nodeDT.Select("Layer='" + i + "'");
foreach (DataRow dr in drArr)
{
colspan = comCol(dr["id"].ToString(), nodeDT);
rowspan = comRow(dr["id"].ToString(), nodeDT, i, maxLay + 1);
strRow += "<td colspan=\"" + colspan + "\" rowspan=\"" + rowspan + "\">" + dr["bookname"].ToString() + "</td>";
}
strRow += "</tr>";
}
strTable += strRow;
strTable += "</table>";
return strTable;
}
/// <summary>
/// 计算跨行数
/// </summary>
/// <param name="nodeID"></param>
/// <param name="dt"></param>
/// <param name="rownum"></param>
/// <param name="maxnum"></param>
/// <returns></returns>
protected int comRow(string nodeID, DataTable dt, int rownum, int maxnum)
{
int deep = 0;
DataRow[] drarr = dt.Select("parentid='" + nodeID + "'");
if (drarr.Length == 0)
deep = maxnum - rownum;
else
deep = 1;
return deep;
}
/// <summary>
/// 计算跨列数
/// </summary>
/// <param name="nodeID"></param>
/// <param name="dt"></param>
/// <returns></returns>
protected int comCol(string nodeID, DataTable dt)
{
int cols = 0;
DataRow[] drarr = dt.Select("parentid='" + nodeID + "'");
foreach (DataRow dr in drarr)
{
if (childcount(dr["id"].ToString(), dt) == 0)//没有子节点
{
cols++;
}
else
cols += comCol(dr["id"].ToString(), dt);//递归。有子节点,加上子节点的个数
}
if (cols == 0)
return cols = 1;
else
return cols;
}
/// <summary>
/// 当前节点的子节点个数
/// </summary>
/// <param name="id"></param>
/// <param name="dt"></param>
/// <returns></returns>
protected int childcount(string id, DataTable dt)
{
DataRow[] drarr = dt.Select("parentid='" + id + "'");
return drarr.Length;
}
}
}