/// <param name="tbs">树形结构数据源</param>
/// <param name="idFaildName">梆定列的Key</param>
/// <param name="catFaildName">梆定列的Value</param>
/// <param name="parentFaildName">数据源中表示父结点的字段名称</param>
/// <returns></returns>
public static DataTable GetTypeTree(DataTable tbs, string idFaildName, string catFaildName, string parentFaildName)
{
DataTable tb = new DataTable();
tb.Columns.Add(idFaildName, Type.GetType("System.String"));
tb.Columns.Add(catFaildName, Type.GetType("System.String"));
//Level,指定层级,加入新row时根据其上层row加一
tb.Columns.Add("Level", Type.GetType("System.Int32"));
DataRow row;
//先将顶级菜单放入tb
DataRow[] TopRows = tbs.Select(parentFaildName.ToString() + @" = '0'");
for (int i = 0; i < TopRows.Length; i++)
{
row = tb.NewRow();
row[0] = TopRows[i][idFaildName].ToString();
row[1] = TopRows[i][catFaildName].ToString();
row[2] = 0;
tb.Rows.Add(row);
}
DataRow[] rows;
for (int i = 0; i < tb.Rows.Count; i++)
{
string strSpace = "";
for (int j = 0; j < Convert.ToInt32(tb.Rows[i][2]); j++)
{
strSpace += " ";
}
rows = tbs.Select(parentFaildName + "=" + "'" + tb.Rows[i][0].ToString() + "'");
for (int j = rows.Length - 1; j >= 0; j--) //倒循环,结果可以正序
{
row = tb.NewRow();
row[0] = rows[j][idFaildName].ToString();
row[1] = strSpace + "--" + rows[j][catFaildName].ToString();
row[2] = Convert.ToInt32(tb.Rows[i][2]) + 1;
tb.Rows.InsertAt(row, i + 1);
}
}
return tb;
}
浙公网安备 33010602011771号