日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

父类和子类在同一张表

發布時間:2024/4/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 父类和子类在同一张表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

現在出現了父類和子類一般都會存在一張表中,然后設計數據庫的時候把父類的ID存到子類另一個字段中就實現了關聯。

例如: 網站的左邊導航 ? ? 第一層就可以看做父類,里面就可以看做子類。

我們就先來看看怎么做導航。

效果圖:

?

一切為了用戶,這個只顯示一個下面出來,不要顯示多個不然很難看

① 前臺頁面

<div ><ul id="test" ><asp:Repeater ID="replist" runat="server" OnItemDataBound="replist_ItemDataBound"><ItemTemplate><li><a class="one" href="javascript:void()"><em><%# Eval("Name")%></em></a><ul style="display: none;"><asp:HiddenField ID="hfId" runat="server" Value='<%# Eval("ID") %>' /><asp:Literal ID="LitFirst" runat="server"></asp:Literal> //這個標簽用來替換數據</ul></li></ItemTemplate></asp:Repeater></ul></div><script src="../JS/jquery-1.11.0.min.js"></script><script>$("ul#test").on("click", "li", function () {//$("ul li ul").css("display", "none");if ($(this).hasClass("show")) {$("ul#test li").removeClass("show");Test();//$(this).removeClass("show");// $(this).find("ul").css("display", "none");} else {$("ul#test li").removeClass("show");$(this).addClass("show");Test();//$(this).find("ul").css("display", "block"); }});//用來隱藏和顯示下面的數據function Test(){$("ul#test li").each(function () {if ($(this).hasClass("show")) {$(this).find("ul").css("display", "block");} else {$(this).find("ul").css("display", "none");}});}</script>

?

②樣式 ?簡單設置一下

<style>ul {list-style:none;}em {font-style: normal;}a {text-decoration:none;}</style>

③取數據 ? ?由于我們搭建的div的原因,想要顯示出所有的數據需要用到Repter里面的數據綁定事件

protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){Binging();}}private void Binging(){DataSet ds = new FunctionDemo.BLL.Category().GetList("Pid=0");replist.DataSource = ds.Tables[0];replist.DataBind();}/// <summary>/// 每綁定一行就觸發一次 一般這個方法用來加載每一行的子類數據/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void replist_ItemDataBound(object sender, RepeaterItemEventArgs e){ Literal LitFirst = (Literal)e.Item.FindControl("LitFirst");HiddenField hfId = (HiddenField)e.Item.FindControl("hfId");List<FunctionDemo.Model.Category> cateModel = new FunctionDemo.BLL.Category().GetModelList("Pid=" + hfId.Value);foreach (FunctionDemo.Model.Category item in cateModel){LitFirst.Text = LitFirst.Text + "<li>"+item.Name+"</li>";}}

④數據的設計 ?

父類 Pid=0 子類的Pid就是父類的ID ? ?LevalNum用來表示

?

第一種父子類就說到這,下面說的是第二種方式?

其中的有個方法值得學習下

?

我們換成下拉框來試試 ? ?按分類顯示數據 ?列: 父類 子類 ? 父類 ?子類 ?。。

①頁面

<form id="form1" runat="server"><asp:DropDownList ID="ddlDemo" runat="server"></asp:DropDownList></form>

②代碼

public FunctionDemo.BLL.Category categoryBLL = new FunctionDemo.BLL.Category();protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){BingDDL();}}public void BingDDL(){DataTable dt = categoryBLL.GetList("").Tables[0]; //categoryBLL.GetListChild(0, true);ddlDemo.Items.Add(new ListItem("類別", "0"));foreach (DataRow item in dt.Rows){string title = "";if (int.Parse(item["LevalNum"].ToString()) > 0){title =" " + "|--" + item["Name"].ToString();}else{title = item["Name"].ToString();}ddlDemo.Items.Add(new ListItem(title, item["ID"].ToString()));}}

③顯示效果

?

這一切盡是如此的完美,好像很好一樣的。

我們做項目時并不是說所以的東西都是好的,很可能做了一半讓你加幾條數據,我們來試一試 ?NBA 加一條 ,愛好加一條,別找我加一條

?我們的數據

?

然后再顯示

我們如何把NBA子類往上面移動呢,這是問題的關鍵,那么就是查詢數據的問題了。

我們改動了取數據的方法

然后顯示數據?

?這樣很符合我們的要求。

我們來看看這個方法寫了什么。

/// <summary>/// 獲取全部類別/// </summary>/// <param name="strWhere">后面的bool值可以顯示是否顯示禁用的數據,這里并沒做處理</param>/// <returns></returns>public DataTable GetListChild(int PID, bool isState){StringBuilder strSql = new StringBuilder();strSql.Append("select ID,Name,Pid,LevalNum");strSql.Append(" FROM Category ");//strSql.Append(" Where ParentId=" + PId);if (isState){strSql.Append("Where 1=1 ");}strSql.Append(" order by Id asc");DataSet ds = DbHelperSQL.Query(strSql.ToString()); 我們的數據查找完了,跟以前是一樣的DataTable oldData = ds.Tables[0] as DataTable;if (oldData == null){return null;}//復制結構DataTable newData = oldData.Clone(); clone()是基類Object的方法//調用迭代組合成DAGATABLE 用舊數據得到新數據 GetChannelChild(oldData, newData, PID);return newData;}/// <summary>/// 獲取子類別/// </summary>/// <param name="parentId">父編號</param>/// <param name="stateInfo">狀態</param>/// <returns></returns>private void GetChannelChild(DataTable oldData, DataTable newData, int PId){//第一遍進來的時候是獲取父類 pid=0 我們只需每取一條父類數據,然后把改類的子類數據先加載進去就可以了DataRow[] dr = oldData.Select("Pid=" + PId);for (int i = 0; i < dr.Length; i++){//添加一行數據 DataRow row = newData.NewRow(); row["ID"] = int.Parse(dr[i]["ID"].ToString());row["Name"] = dr[i]["Name"].ToString();row["Pid"] = dr[i]["Pid"].ToString();row["LevalNum"] = dr[i]["LevalNum"].ToString(); newData.Rows.Add(row);//調用自身迭代this.GetChannelChild(oldData, newData, int.Parse(dr[i]["ID"].ToString()));//把父類的ID作為條件傳進去,子類的數據就會出來 }}

這個方法是一種思想,會的話可以做別的事。

?

上面是滿足我們的原數據和新數據都是在一張表,我們就可以用clone()方法,如果我的新表需要添加字段

//創建一個新的DataTable,這里可以添加我們的列DataTable newData = new DataTable();newData.Columns.Add("id", typeof(int));newData.Columns.Add("parent_id", typeof(int));newData.Columns.Add("class_layer", typeof(int));newData.Columns.Add("nav_type", typeof(string));newData.Columns.Add("name", typeof(string));newData.Columns.Add("title", typeof(string));newData.Columns.Add("sub_title", typeof(string));newData.Columns.Add("icon_url", typeof(string));newData.Columns.Add("link_url", typeof(string));newData.Columns.Add("sort_id", typeof(int));newData.Columns.Add("is_lock", typeof(int));newData.Columns.Add("remark", typeof(string));newData.Columns.Add("action_type", typeof(string));newData.Columns.Add("is_sys", typeof(int)); //調用迭代組合成DAGATABLE 用舊數據得到新數據GetChannelChild(oldData, newData, PID);return newData; //在GetChannelChild()這個方法里面的添加數據里面就可以把新列的數據添加進去

?

轉載于:https://www.cnblogs.com/Sea1ee/p/7028595.html

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的父类和子类在同一张表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天码人妻一区二区三区在线看 | 国产又粗又长又黄的视频 | 日韩爽片 | 麻豆视频软件 | 国产999在线观看 | 中文在线视频 | 国产精品永久在线观看 | 麻豆成人免费视频 | 色婷婷综合视频 | 亚洲男女 | 天天夜夜爽 | 成人激情视频在线播放 | 国产成人传媒 | 特大巨交吊性xxxx | 在线视频一区二区三区 | 性猛交xxxx乱大交孕妇2十 | 老局长的粗大高h | 琪琪色网 | 午夜色福利| 污污视频在线免费观看 | 欧美在线性爱视频 | 日韩av黄色片 | 久久无码人妻精品一区二区三区 | 日本亚洲在线 | 影音先锋人妻啪啪av资源网站 | 国产一区二区三区四区五区六区 | 国产婷婷在线观看 | 久久久久久久久久久影视 | 久艹在线观看 | 2020国产在线 | av免费天堂 | 成人毛片18女人毛片 | 日本黄色片免费 | 国产女同在线观看 | 人与性动交zzzzbbbb | 欧美人交a欧美精品 | 69re视频 | 美女啪啪av | 91国产精品一区 | 性欧美丰满熟妇xxxx性久久久 | 伊人久久大 | 蜜乳av一区二区 | 国产日产欧美一区二区三区 | 诱夫1v1高h | 娇妻之欲海泛舟无弹窗笔趣阁 | 大尺度电影在线 | www.av在线免费观看 | 色欲欲www成人网站 老色鬼av | 亚洲男人的天堂在线 | 国产精品欧美性爱 | 99re视频这里只有精品 | 天天操夜夜欢 | 日韩二区在线观看 | 一区二区三区四区五区av | a天堂在线观看视频 | 久操福利在线 | 亚洲一区视频网站 | 91久久国产综合久久91 | 看片网址国产福利av中文字幕 | 美女黄免费| 黄色免费在线网站 | 亚洲我射| 欧美一级一级 | 欧美八区 | 欧美黄色一区 | 中文字幕第十二页 | 中国女人一级片 | 亚洲国产一二 | 99热8| 日批免费观看视频 | 黄色在线观看视频网站 | 黄a在线观看 | 好大好爽视频 | 老头糟蹋新婚少妇系列小说 | xxxx国产精品| 二区欧美 | 成人日韩在线观看 | 国产精品久久久久久无人区 | fc2成人免费视频 | 黄色激情av | 国产精品999在线观看 | 91免费福利视频 | 手机免费av | 亚洲av成人无码一区二区三区在线观看 | 最新极品jizzhd欧美 | 久久精品中文闷骚内射 | jizzzz中国| 久久精品www人人爽人人 | 国产美女www爽爽爽视频 | 久久综合激情网 | 色伊人网 | 中文字幕成人网 | 天天干天天操天天操 | 国产成人精品一区二区三区在线观看 | 欧美一级免费大片 | 长腿校花无力呻吟娇喘的视频 | 91精品国产综合久久久蜜臀图片 | 一级片在线观看视频 | 国产精品香蕉在线观看 |