LINQ做无限级菜单
到安博也有2个星期了,也学到了很多东西,不仅仅是技术方面的,也有我们生活当中并未注意的。
好比是老赵那句签名,先学做人,在做技术 ,然后做程序员。
走出校门,越发感觉自己的肤浅。
以后的路还长着呢。
在安博初识LINQ,感觉LINQ用起来挺方便的,琢磨着做了一个LINQ的无限级菜单
闲话不说了,
上效果图。
数据库
代码部分:
DataTable dt;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//加载
GetListALL();
}
}
public void GetListALL()
{
dt = new DataTable(); //建一个数据临时存放点
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("pro_Id", typeof(Guid));
dt.Columns.Add("pro_Name", typeof(string));
dt.Columns.Add("level", typeof(int));
//数据库中的GUID不能为空,就用0来表示父级
//递归也是从0级开始的
GetData(new Guid("00000000-0000-0000-0000-000000000000"), 0);
GV_pglist.DataSource = dt; //绑定DATATABLE
GV_pglist.DataBind();
}
//lv决定了菜单前面的空格数量
public void GetData(Guid gd, int lv)
{
//创建一个LINQ类,实例化
DataLinqDataContext DDC = new DataLinqDataContext();
var Pg = from m in DDC.program
where m.pro_Idbg == gd
select m;
foreach (var p in Pg)
{
//创建一个DATAROW
DataRow dr = dt.NewRow();
dr["Id"] = p.id;
dr["pro_Name"] = p.pro_Name;
dr["pro_Id"] = p.pro_Id;
dr["level"] = lv;
dt.Rows.Add(dr);
//=============================
//递归点
//=============================
GetData(p.pro_Id, lv + 1);
}
protected void GV_pglist_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
int lvl = 0;
int.TryParse(GV_pglist.DataKeys[e.Row.RowIndex]["level"].ToString(), out lvl);
e.Row.Cells[2].Text = SetSpace(lvl) + e.Row.Cells[2].Text;
}
}
protected string SetSpace(int count)
{
if (count < 0) count = 0;
string temp = string.Empty;
for (int i = 0; i < count; i++)
{
temp += " ";
}
return temp;
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//加载
GetListALL();
}
}
public void GetListALL()
{
dt = new DataTable(); //建一个数据临时存放点
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("pro_Id", typeof(Guid));
dt.Columns.Add("pro_Name", typeof(string));
dt.Columns.Add("level", typeof(int));
//数据库中的GUID不能为空,就用0来表示父级
//递归也是从0级开始的
GetData(new Guid("00000000-0000-0000-0000-000000000000"), 0);
GV_pglist.DataSource = dt; //绑定DATATABLE
GV_pglist.DataBind();
}
//lv决定了菜单前面的空格数量
public void GetData(Guid gd, int lv)
{
//创建一个LINQ类,实例化
DataLinqDataContext DDC = new DataLinqDataContext();
var Pg = from m in DDC.program
where m.pro_Idbg == gd
select m;
foreach (var p in Pg)
{
//创建一个DATAROW
DataRow dr = dt.NewRow();
dr["Id"] = p.id;
dr["pro_Name"] = p.pro_Name;
dr["pro_Id"] = p.pro_Id;
dr["level"] = lv;
dt.Rows.Add(dr);
//=============================
//递归点
//=============================
GetData(p.pro_Id, lv + 1);
}
protected void GV_pglist_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
int lvl = 0;
int.TryParse(GV_pglist.DataKeys[e.Row.RowIndex]["level"].ToString(), out lvl);
e.Row.Cells[2].Text = SetSpace(lvl) + e.Row.Cells[2].Text;
}
}
protected string SetSpace(int count)
{
if (count < 0) count = 0;
string temp = string.Empty;
for (int i = 0; i < count; i++)
{
temp += " ";
}
return temp;
}
by cloudy
博文不好,多多指教
http://www.cnblogs.com/_cloudy
浙公网安备 33010602011771号