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

首頁 > 編程 > .NET > 正文

ASP.NET中根據XML動態創建使用WEB組件

2024-07-10 13:10:49
字體:
來源:轉載
供稿:網友

  前段時間筆者在開發中需要動態創建web組件,本以為是小事一樁,誰知看時容易做時難。里面還真有些小問題。下面筆者就結合自己的程序來介紹一下如何動態創建并使用web組件,希望能給做類似工作的朋友提供一點幫助。

  一、程序思路

  程序主要分三部分:

  1、程序要根據xml中的數據信息確定需要創建的web組件的個數。

  2、動態創建web組件。

  3、使用動態創建的web組件。

  其中2和3是筆者要重點介紹的部分。

  下面筆者就按照這三部分結合程序實例(以c#為例)來一一介紹。

  二、讀取xml文件

  讀取xml文件在很多的資料中都有詳細的說明,而且相信很多朋友都已經很好的掌握了其技術。但為了保證文章的完整性,筆者在這里還是要贅述幾句。深諧其味的朋友可以略過此段不看。

  筆者程序中要讀取的xml文件形如下列:

  config.xml

  <?xml version="1.0"?>

  <root>

  <nettype>net</nettype>

  <totalnum>6</totalnum>

  <cells>2</cells>

  <iplink>

  <name>站點1</name>

  <ip>192.8.198.1</ip>

  <sequence>1</sequence>

  </iplink>

  <iplink>

  <name>站點2</name>

  <ip>192.8.198.2</ip>

  <sequence>2</sequence>

  </iplink>

  … …

  </root>
  讀取xml文件的程序如下:

  protected void readconfig()

  {

  try

  {

  system.xml.xmldocument mxmldoc=new system.xml.xmldocument();

  mxmldoc.load(server.mappath(configfilepath));

  nettype=mxmldoc.selectnodes("http://root/nettype")[0].innertext; totalnum=int.parse(mxmldoc.selectnodes("http://root/totalnum")[0].innertext);

  //讀出列數

  cells=int.parse(mxmldoc.selectnodes("http://root/cells")[0].innertext);

  xmlnodelist mxmlnodes=mxmldoc.selectnodes("http://root/iplink");

  foreach(xmlnode iplinkchildlnode in mxmlnodes)

  {

  //得到序列號

  int icount=int.parse(iplinkchildlnode.childnodes[2].innertext);

  //根據序列號,將測量點的名稱放入名稱數組相應的位置上

  namestr[icount]=iplinkchildlnode.childnodes[0].innertext;

  //根據序列號,將測量點的ip放入ip數組相應的位置上

  ipstr[icount]=iplinkchildlnode.childnodes[1].innertext;

  }

  }

  catch

  {

  errmessage.innerhtml="<table align=center><tr>

  <td align=left><font color=red>不能讀取配置文件,可能的錯誤是<br>"+"1、配置文件不存在<br>"+

  "2、配置文件內容被損壞"+

  "</font></td></tr></table>";

  }

  }
  程序中對xml中無子節點的元素如:

  <nettype>net</nettype>
  直接使用如下語句讀取。

  mxmldoc.selectnodes("http://root/nettype")[0].innertext;
  對于有子節點的元素如:

  <iplink>

  <name>站點1</name>

  <ip>192.8.198.1</ip>

  <sequence>1</sequence>

  </iplink>
  要使用語句如下來讀取。

  iplinkchildlnode.childnodes[n].innertext
  其中 childnodes[n] 中的[n]為子節點的序號,子節點

  <name>站點1</name>
  的序號應該為[0]。

  三、動態創建web組件。

  先來看程序實例:

  private void createconfigtable(int totalnum,int[] sequenceint,string[] namestr,string[] ipstr)

  {

  //根據得到測量點的總數,動態生成輸入框

  for(int i=1;i<=totalnum;i++)

  {

  //創建表格

  htmltable showtable = new htmltable();

  showtable.border=0;

  showtable.id="showtable"+i.tostring();

  showtable.bordercolor="#000000";

  showtable.cellpadding=4;

  showtable.cellspacing=4;

  showtable.align="center";

  myplaceholder.controls.add(showtable);

  //創建一行

  htmltablerow trow = new htmltablerow();

  showtable.rows.add(trow);

  //創建第一列(序號)

  htmltablecell tcell = new htmltablecell();

  label sequencelabel = new label();

  sequencelabel.id="sequencelabel"+i.tostring();

  sequencelabel.text="序號:";

  sequencelabel.enabled=true;

  tcell.controls.add(sequencelabel);

  trow.cells.add(tcell);

  //創建第二列

  tcell = new htmltablecell();

  sequencedatatb = new textbox();

  sequencedatatb.id="sequencedatatb"+i.tostring();

  sequencedatatb.text=i.tostring();

  sequencedatatb.width=30;

  sequencedatatb.text=sequenceint[i].tostring();

  sequencedatatb.readonly=false;

  //創建第三列(名稱)

  tcell = new htmltablecell();

  label namelabel = new label();

  namelabel.id="namelabel"+i.tostring();

  namelabel.text="名稱:";

  namelabel.enabled=true;

  tcell.controls.add(namelabel);

  trow.cells.add(tcell);

  //創建第四列

  tcell = new htmltablecell();

  nametb=new textbox();

  nametb.id="nametb"+i.tostring();

  nametb.width=120;

  nametb.text=namestr[i];

  nametb.maxlength=50;

  tcell.controls.add(nametb);

  trow.cells.add(tcell);

  //創建第五列(ip)

  tcell = new htmltablecell();

  label iplabel = new label();

  iplabel.id="iplabel"+i.tostring();

  iplabel.text="ip:";

  iplabel.enabled=true;

  tcell.controls.add(iplabel);

  trow.cells.add(tcell);

  //創建第六列

  tcell = new htmltablecell();

  iptb=new textbox();

  iptb.id="iptb"+i.tostring();

  iptb.width=120;

  iptb.text=ipstr[i];

  iptb.maxlength=15;

  tcell.controls.add(iptb);

  trow.cells.add(tcell);

  }

  }

  tcell.controls.add(sequencedatatb);

  trow.cells.add(tcell);

  … …

  //創建第五列(ip)

  tcell = new htmltablecell();

  label iplabel = new label();

  iplabel.id="iplabel"+i.tostring();

  iplabel.text="ip:";

  iplabel.enabled=true;

  tcell.controls.add(iplabel);

  trow.cells.add(tcell);

  //創建第六列

  tcell = new htmltablecell();

  iptb=new textbox();

  iptb.id="iptb"+i.tostring();

  iptb.width=120;

  iptb.text=ipstr[i];

  iptb.maxlength=15;

  tcell.controls.add(iptb);

  trow.cells.add(tcell);

  }

  }

  程序中的myplaceholder 是 system.web.ui.webcontrols.placeholder 組件,使用該組件的html語法如下:

  … …

  <tr>

  <td>

  <asp:placeholder id="myplaceholder" runat="server"></asp:placeholder>

  </td>

  </tr>

  … …

  使用該組件的目的是為了定位動態創建的表格。該組件在頁面上的位置即為動態創建的表格的位置。

  程序中另外一個要說明的地方是動態創建的組件的id的設定。組件的id的設定要注意兩點:

  1、id號不能重復

  2、要便于在程序中使用。因為要在程序中使用動態創建的組件,要通過該組件的id來查找。(關于這一點,在“使用動態創建的web組件”部分會有較為詳細的介紹)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 盐山县| 札达县| 梅州市| 青海省| 滦南县| 凤冈县| 沙坪坝区| 清苑县| 鄂尔多斯市| 富蕴县| 商都县| 吴堡县| 姜堰市| 刚察县| 班戈县| 德江县| 通道| 永康市| 北碚区| 三原县| 庄河市| 云南省| 渑池县| 湖北省| 嘉祥县| 获嘉县| 邹平县| 景德镇市| 柳州市| 北票市| 冕宁县| 天等县| 杭锦后旗| 南和县| 鄢陵县| 独山县| 东安县| 东安县| 甘南县| 麻城市| 获嘉县|