国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

WEB頁面TreeView的應用-(得到所有選中的節點)

2024-07-21 02:16:04
字體:
來源:轉載
供稿:網友

        在web的treeview中可以使用checkbox來設置treeview的節點是否可以選中,是大家都知道的。我們在項目進程中也用到該方法,這里把具體實現的方法給出。希望大家有更好的方案提出。

        先制定節點選擇的規則:

         子節點選中,自動添加父節點到記錄中;父節點選中,但子節點未選中的,僅僅添加父節點。

實現的代碼,c#代碼頁面如下:

###################################

using system;
using system.collections;
using system.componentmodel;
using system.data;
using system.drawing;
using system.web;
using system.web.sessionstate;
using system.web.ui;
using system.web.ui.webcontrols;
using system.web.ui.htmlcontrols;
using microsoft.web.ui.webcontrols;
using idal;
using classi;
namespace mstreeview
{
 /// <summary>
 /// webform1
 /// </summary>
 public class webform1 : system.web.ui.page
 {
  protected system.web.ui.webcontrols.label label1;
  protected system.web.ui.webcontrols.button button1;
  protected microsoft.web.ui.webcontrols.treeview treeview1;
  protected system.web.ui.webcontrols.button button2;
  protected system.web.ui.webcontrols.dropdownlist dropdownlist1;
   
  private void page_load(object sender, system.eventargs e)
  {
      if(!ispostback)
      {
    datatable dt=new datatable();
    dt=this.getdatasource();
    session["dt"]=dt;
    boundtreeview(this.treeview1.nodes,0);
      }
  }
  
  #region web 窗體設計器生成的代碼
  override protected void oninit(eventargs e)
  {
   //
   // codegen: 該調用是 asp.net web 窗體設計器所必需的。
   //
   initializecomponent();
   base.oninit(e);
  }
  
  /// <summary>
  /// 設計器支持所需的方法 - 不要使用代碼編輯器修改
  /// 此方法的內容。
  /// </summary>
  private void initializecomponent()
  {   
   this.button1.click += new system.eventhandler(this.button1_click);
   this.button2.click += new system.eventhandler(this.button2_click);
   this.load += new system.eventhandler(this.page_load);

  }
  #endregion
  
  private datatable getdatasource()
  {
   datatable dt=new datatable("dt");
   dt.columns.add(new datacolumn("id",typeof(system.int32)));
   dt.columns.add(new datacolumn("pid",typeof(system.int32)));
   dt.columns.add(new datacolumn("num",typeof(system.int32)));
   dt.columns.add(new datacolumn("name",typeof(system.string)));
//   for (int i=0;i<=10;i++)
//   {
    datarow dr;
    
   dr=dt.newrow();
   dr["id"]=1;
   dr["pid"]=0;
   dr["num"]=1;
   dr["name"]="1";
   dt.rows.add(dr);

   dr=dt.newrow();
   dr["id"]=2;
   dr["pid"]=1;
   dr["num"]=2;
   dr["name"]="2";
   dt.rows.add(dr);

   dr=dt.newrow();
   dr["id"]=3;
   dr["pid"]=1;
   dr["num"]=5;
   dr["name"]="id3";
   dt.rows.add(dr);

   dr=dt.newrow();
   dr["id"]=4;
   dr["pid"]=0;
   dr["num"]=2;
   dr["name"]="id4";
   dt.rows.add(dr);

   dr=dt.newrow();
   dr["id"]=5;
   dr["pid"]=4;
   dr["num"]=1;
   dr["name"]="id5";
   dt.rows.add(dr);

   dr=dt.newrow();
   dr["id"]=6;
   dr["pid"]=0;
   dr["num"]=3;
   dr["name"]="id6";
   dt.rows.add(dr);

   dr=dt.newrow();
   dr["id"]=7;
   dr["pid"]=0;
   dr["num"]=1;
   dr["name"]="id7";
   dt.rows.add(dr);
   dr=dt.newrow();
   dr["id"]=8;
   dr["pid"]=7;
   dr["num"]=1;
   dr["name"]="id8";
   dt.rows.add(dr);
   dr=dt.newrow();
   dr["id"]=9;
   dr["pid"]=8;
   dr["num"]=1;
   dr["name"]="id9";
   dt.rows.add(dr);
   dr=dt.newrow();
   dr["id"]=10;
   dr["pid"]=8;
   dr["num"]=2;
   dr["name"]="id10";
   dt.rows.add(dr);
   dr=dt.newrow();
   dr["id"]=11;
   dr["pid"]=7;
   dr["num"]=2;
   dr["name"]="id11";
   dt.rows.add(dr);
//   }
  return dt;
  }

///此處使用遞歸綁定treeview的數據

  private void boundtreeview(treenodecollection treenodes ,int parentid)
  {
   datatable dt=new datatable();
   dt=(datatable)session["dt"];
   dataview treedv = new dataview();
   int treeid;
   treenode treetemp;
   string treename;
   treedv.table = dt;
   treedv.rowfilter = "id<>'" + parentid + "' and pid='" + parentid + "'";
   treedv.sort="num";
   foreach(datarowview treedvrow in treedv)
   {
    treetemp=new treenode();
    treename = treedvrow["name"].tostring();
    treeid = convert.toint32(treedvrow["id"].tostring());
    treetemp.id = treeid.tostring();
    treetemp.text = treename;
    treetemp.checkbox=true;
    treetemp.expanded=true;
    treenodes.add(treetemp);
    boundtreeview(treenodes[treenodes.count - 1].nodes, treeid);
   }
  }

///遞歸treeview,把所有被選中的節點id記錄到hashtable中
  private void recursivetree(treeview tree,ref hashtable allid )
  {
   treenodecollection nodes = tree.nodes;
   foreach (treenode n in nodes)
   {
    recursivenodes(n,ref allid);
    addcheckedid(n,ref allid);
   }
  }

///遞歸treeview的節點,把所有被選中的節點id記錄到hashtable中
  private void recursivenodes(treenode node,ref hashtable allid)
  {
   foreach (treenode tn in node.nodes)
   {
    recursivenodes(tn,ref allid);
    addcheckedid(tn,ref allid);
   }
  }

  private void button1_click(object sender, system.eventargs e)
  {
   hashtable aaa=new hashtable();
   recursivetree(this.treeview1,ref aaa);
  }

///把被選中的節點的父節點id記錄到hashtable中
  private void addparentid(treenode node,ref hashtable allid)
  {
   try
   {
    treenode pnode=(treenode)node.parent;
    addparentid(pnode,ref allid);
    addidtohashtable(convert.toint32(pnode.id),ref allid);
   }
   catch
   {
   }   
  }

///把所有被選中的節點id和其父節點id記錄到hashtable中
  private void addcheckedid(treenode node,ref hashtable allid )
  {
   if(node.checked)
   {
    string strvalue=node.id.tostring();
    int i=convert.toint32(node.id);
    try
    {
     addparentid(node,ref allid);
    }
    catch
    {
    }
    addidtohashtable(i,ref allid);
   }
  }

///把所有被選中的節點id記錄到hashtable中,如果id已經存在,則不添加
  private void addidtohashtable(int nodeid,ref hashtable allid)
  {
   if(!allid.containskey(nodeid))
   {
    allid.add(nodeid,nodeid.tostring());
   }
  }

  private void button2_click(object sender, system.eventargs e)
  {
   hashtable aaa=new hashtable();
   if(session["aaa"]!=null) aaa=(hashtable)session["aaa"];
   session["aaa"]=aaa;
  }
 }
}

###################################

個人感覺這種實現的方式不是最好的,但是項目進度決定了沒有太多時間來考量算法和其他實現放松。希望其他網友有更好的方案,大家共享!

商業源碼熱門下載www.html.org.cn

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 昔阳县| 湖口县| 大同县| 桑日县| 新晃| 青岛市| 锡林浩特市| 宜春市| 重庆市| 江川县| 北碚区| 绿春县| 墨玉县| 清水县| 汪清县| 宿迁市| 改则县| 军事| 江永县| 朝阳区| 措勤县| 花莲县| 咸丰县| 祁阳县| 昭觉县| 柯坪县| 郁南县| 博罗县| 类乌齐县| 万载县| 富裕县| 鲁山县| 开化县| 许昌县| 蒙山县| 揭西县| 连江县| 清新县| 阿坝| 互助| 迁西县|