序言
您好! 這是我第一次發表文章。閒話少敘,在我踏上學習C#這條一路以後,作爲一名新手,作爲女生,不後悔。我的技術水平目前約爲一渣渣,各位您請批評指教。如有興趣,可閱讀本篇文章,大略瞭解一下我的第一天記錄。
開始
☆工具說明:
數據庫:Microsoft SQL Server Management Studio 17
編碼:啓動 Visual Studio 2017 的實驗實例
MVC
ADO
1數據表
## 1.1分類表
create table ProductClass–商品分類表
(
ClassID int constraint ProductClass_PK primary key identity(1,1),–主鍵,自增,商品分類ID
ClassName nvarchar(50) not null,–分類名稱
ParentID int default 0 not null,–父分類ID
ParentPath nvarchar(500) not null–分類路徑
)
## 1.2插入數據
insert into ProductClass(ClassName,ParentID,ParentPath) values(‘權限設置’,0,‘0’),(‘角色管理’,1,‘0,1’),(‘角色管理’,2,‘0,1,2’),(‘角色添加’,2,‘0,1,2’),(‘角色添加’,2,‘0,1,2’),(‘角色修改’,2,‘0,1,2’),(‘角色刪除’,2,‘0,1,2’),(‘角色查詢’,2,‘0,1,2’),(‘用戶管理’,1,‘0,2’),(用戶管理,9,‘0,2,9’),
(用戶添加,9,‘0,2,9’),(用戶修改,9,‘0,2,9’),(用戶刪除,9,‘0,2,9’),(日誌管理,1,‘0,3’),(日誌存儲,14,‘0,3,14’),(日誌銷燬,14,‘0,3,14’)……
select count(*) from ProductClass
select * from ProductClass
2.VS Code
## 2.1 Model 模型
public class ProductClass
{
public int ClassID { get; set; }
public string ClassName { get; set; }
public int ParentID { get; set; }
public string ParentPath { get; set; }
}
## 2.2 Controller 控制器
引用一下相應的名稱空間,開始寫代碼(CRUD)
//數據庫連接字符串
string str = "Data Source=.;Initial Catalog=Vocation;Integrated Security=True";
//實例化
List<ProductClass> clist = new List<ProductClass>();
//視圖
public ActionResult Index()
{
GetClass(1);
return View(clist);
}
//構造函數:初始化數據
public ProductsController()
{
using (SqlConnection conn = new SqlConnection(str))
{
SqlDataAdapter sdr = new SqlDataAdapter("SELECT * FROM ProductClass WHERE ParentID=0", conn);
DataTable dt = new DataTable();
sdr.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
clist.Add(new ProductClass { ClassID = (int)dr["ClassID"], ClassName = dr["ClassName"].ToString(), ParentID = (int)dr["ParentID"], ParentPath = dr["ParentPath"].ToString() });
GetClass((int)dr["ClassID"]);
}
}
}
//獲取類型信息
public void GetClass(int pid)
{
using (SqlConnection conn=new SqlConnection(str))
{
string str = string.Format("SELECT * FROM ProductClass WHERE ParentID={0}", pid);
SqlCommand cmd = new SqlCommand(str, conn);
cmd.Parameters.AddWithValue("@ParentID", pid);
SqlDataAdapter sdr = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
sdr.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
clist.Add(new ProductClass { ClassID=(int)dr["ClassID"] , ClassName=dr["ClassName"].ToString(), ParentID=(int)dr["ParentID"], ParentPath=dr["ParentPath"].ToString() });
GetClass((int)dr["ClassID"]);
}
}
}
//刪除
public int DelClass(int cid)
{
using (SqlConnection conn = new SqlConnection(str))
{
conn.Open();
string str = string.Format("DELETE FROM ProductClass WHERE ClassID={0}",cid);
SqlCommand cmd = new SqlCommand(str, conn);
return cmd.ExecuteNonQuery();
}
}
//添加或修改
public int AddOrUpdClass(ProductClass pc)
{
using (SqlConnection conn = new SqlConnection(str))
{
conn.Open();
string str = "";
if (pc.ClassID>0)
{
str = string.Format("UPDATE ProductClass SET ClassName='{0}',ParentID={1},ParentPath='{2}'", pc.ClassName,pc.ParentID,pc.ParentPath);
}
else
{
str = string.Format("INSERT INTO ProductClass VALUES('{0}',{1},'{2}')",pc.ClassName,pc.ParentID,pc.ParentPath);
}
SqlCommand cmd = new SqlCommand(str, conn);
return cmd.ExecuteNonQuery();
}
}
//反填
public ActionResult GetClassById(int id)
{
using (SqlConnection conn = new SqlConnection(str))
{
string str = string.Format("SELECT * FROM ProductClass WHERE ClassID={0}", id);
DataTable dt = new DataTable();
SqlDataAdapter sdr = new SqlDataAdapter();
sdr.Fill(dt);
ProductClass pmode = new ProductClass();
pmode = JsonConvert.DeserializeObject<List<ProductClass>>(JsonConvert.SerializeObject(dt)).First();
return Json(pmode,JsonRequestBehavior.AllowGet);
}
}
## 2.3 View 視圖
根據Action渲染View, 只附上顯示的視圖
@model IEnumerable<ProductsPlanLibingyang.Models.ProductClass>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@foreach (var p in Model)
{
if (p.ParentID != 0)
{
string str = string.Empty;
int level = p.ParentPath.Split(',').Length;
for (int i = 0; i < level; i++)
{
str += " ";
}
@Html.Raw(str+ "|—")
}
@p.ClassName<br />
}
運行效果附上:
如圖所示
3.彙總 :
主要是遞歸的思想一定要把握!
但我發現:呀嘿, 難道是 我的 子節點數據 重複加載了?
調整了一下:
還是好奇怪。
##有始有終:目前只是出於學習狀態,也只是記錄一下自己所學的東西。畢竟咱不是大神,一直在努力,對自己說一聲:加油吧!
無力吐槽了,歇一會兒吧。。。
如有機會,下次再記錄。