سلام به همگی
طریقه پر کردن یه tree view از دیتا بیس با تابع بارگشتی چطوریه؟
(یکی از دوستان می گفت از این روش هم میشه!)
میشه راهنمایی کنین...
Printable View
سلام به همگی
طریقه پر کردن یه tree view از دیتا بیس با تابع بارگشتی چطوریه؟
(یکی از دوستان می گفت از این روش هم میشه!)
میشه راهنمایی کنین...
این کد نمونه برای تولید یک Sitemap هست میتونی ازش ایده بگیری . به صورت نامحدود زیر منو برات درست میکنه .
فقط کافی که در دیتابیست فیلدی برای تعیین کردن پدر داشته باشی
DataRow[] drCollection;
DataView dv;
DataTable dtTemp=new DataTable();
dsMain.sp_T_Menu_SelectAllRow drMenu;
try
{
xtw = new XmlTextWriter(this.fullPath, System.Text.UTF8Encoding.UTF8);
xtw.WriteStartDocument();
xtw.Formatting = Formatting.Indented;
xtw.WriteStartElement("siteMap", "http://schemas.microsoft.com/AspNet/SiteMap-File-1.0");
xtw.WriteStartElement("siteMapNode");
xtw.WriteAttributeString("url", "");
xtw.WriteAttributeString("title", "");
xtw.WriteAttributeString("description", "");
drCollection = dt.Select("[Parent] IS NULL");
searchForAllNode(drCollection);
xtw.Close();
}
catch
{
if (xtw.WriteState!= WriteState.Closed)
{
xtw.Close();
}
}
}
private void searchForAllNode(DataRow[] drParent)
{
DataTable dtTemp = new DataTable();
dsMain.sp_T_Menu_SelectAllRow drMenu;
foreach (DataRow dr in drParent)
{
drMenu = (dsMain.sp_T_Menu_SelectAllRow)dr;
xtw.WriteStartElement("siteMapNode");
xtw.WriteAttributeString("url", drMenu.URL);
xtw.WriteAttributeString("title", drMenu.Title);
xtw.WriteAttributeString("description", "");
searchForAllNode(dt.Select("[Parent] = " + drMenu.ID.ToString()));
xtw.WriteEndElement();
}
}
این نمونه هم من برای نظر سنجی استفاده میکنم . سوالو از یک جدول میخونم و جواب ها رو از یه جول دیگه
daQuestion.Fill(dtQuestion, 1, "");//نمایش کلیه سوالها
TreeNode tnQuestion;
TreeNode tnAnswer;
dsMain.cms_VoteResult_SelectRow[] drResult;
int iAnswerCount = 0;
trvVote.Nodes.Clear();
foreach (dsMain.cms_VoteQuestion_SelectRow dr in dtQuestion.Rows)
{
tnQuestion = new TreeNode(dr.vqu_Memo);
tnQuestion.Value = dr.vqu_Id.ToString();
daAnswer.Fill(dtAnswer, dr.vqu_Id, 1); //نمایش کلیه جواب ها
daResult.Fill(dtResult, dr.vqu_Id);
foreach (dsMain.cms_VoteAnswer_SelectRow drA in dtAnswer.Rows)
{
drResult = (dsMain.cms_VoteResult_SelectRow[])dtResult.Select("van_ID = " + drA.van_Id.ToString());
iAnswerCount = 0;
if (drResult.Length != 0)
iAnswerCount = drResult[0].Count;
tnAnswer = new TreeNode(drA.van_Memo + " - تعداد پاسخها : " + iAnswerCount.ToString());
tnAnswer.Value = drA.van_Id.ToString();
tnAnswer.SelectAction = TreeNodeSelectAction.None;
tnAnswer.ShowCheckBox = false;
tnQuestion.ChildNodes.Add(tnAnswer);
}
trvVote.Nodes.Add(tnQuestion);
}
trvVote.CollapseAll();
this.treeViewStockClasses.BeginUpdate();
for (int i = 0; i < this.DataTableNodes.Rows.Count; i++)
{
if (this.DataTableNodes.Rows[i]["ParentStockClassCode"].ToString() == "0")
{
this.treeViewStockClasses.Nodes.Add(this.DataTable Nodes.Rows[i]["StockClassCode"].ToString(), this.DataTableNodes.Rows[i]["StockClassTitle"].ToString());
this.AddNode(this.treeViewStockClasses.Nodes[this.treeViewStockClasses.Nodes.Count - 1]);
}
}
this.treeViewStockClasses.EndUpdate();
private void AddNode(System.Windows.Forms.TreeNode CurrentNode)
{
try
{
for (int i = 0; i < this.DataTableNodes.Rows.Count; i++)
{
if (this.DataTableNodes.Rows[i]["ParentStockClassCode"].ToString() == CurrentNode.Name.ToString())
{
CurrentNode.Nodes.Add(this.DataTableNodes.Rows[i]["StockClassCode"].ToString(), this.DataTableNodes.Rows[i]["StockClassTitle"].ToString());
this.AddNode(CurrentNode.Nodes[CurrentNode.Nodes.Count - 1]);
}
}
}
catch (System.Exception exp)
{
}
}
اگه هنوز علاقه دارید ساختار DB رو با جزئیات بیشتر براتون بفرستم . من خودم این کد رو نوشتم . خیلی هم استفاده کردم و همیشه جواب داده .
در تالار ASP مقاله ای در رابطه با موضوع شما وجود داره. فکر کنم عنوانش اتصال treeview به database بود. فکر کنم از توابع برگشتی استفاده کرده بود.