<pedrocorreia.net ⁄>
corner
<mySearch ⁄> <mySearch ⁄>

corner
 
corner
<mySnippets order="rand" ⁄> <mySnippets order="rand" ⁄>

corner
 
corner
<myContacts ⁄> <myContacts ⁄>

<email ⁄>


pc@pedrocorreia.net

<windows live messenger ⁄>


pedrojacorreia@hotmail.com

<myCurriculum type="pdf" ⁄>


Download
corner
 
corner
<myBlog show="last" ⁄> <myBlog show="last" ⁄>

corner
 
corner
<myNews show="rand" ⁄> <myNews show="rand" ⁄>

corner
 
corner
<myNews type="cat" ⁄> <myNews type="cat" ⁄>

corner
 
corner
<myQuote order="random" ⁄> <myQuote order="random" ⁄>

Nada se pode esculpir sobre a madeira podre
corner
 
corner
<myPhoto order="random" ⁄> <myPhoto order="random" ⁄>

<pedrocorreia.net ⁄>
corner
 
corner
<myAdSense ⁄> <myAdSense ⁄>

corner
 
corner
<myVisitorsMap ⁄> <myVisitorsMap ⁄>

corner
 
 

<Preencher Dropdown com informação de um ficheiro XML ⁄ >




clicks: 12860 12860 2007-06-02 2007-06-02 goto mySnippets mySnippets asp.net  Download  Bookmark This Bookmark This



Aqui vai um exemplo simples de como poderá ser preenchida uma dropdown, tendo como fonte de informação um ficheiro em XML. A utilização da dropdown é somente uma hipótese, o código facilmente é adaptado para qualquer outro tipo de situação.


Poderá ser importante se por exemplo quiserem obter informação cross-domain e não possuem maneira de aceder por ex. a uma base de dados ou a uma listagem de ficheiros, etc, etc; basicamente, poderá ser comparado a um web-service bastante arcaico e/ou simples.


Vamos ter como base o seguinte ficheiro xml:
  1. <xml>
  2. <pedrocorreia.net>
  3. <artes_marciais>
  4.  
  5. <arte_marcial>
  6. <name>taichichuan</name>
  7. <description>Tai Chi Chuan</description>
  8. </arte_marcial>
  9.  
  10. <arte_marcial>
  11. <name>aikido</name>
  12. <description>Aikido</description>
  13. </arte_marcial>
  14.  
  15. <arte_marcial>
  16. <name>kendo</name>
  17. <description>Kendo</description>
  18. </arte_marcial>
  19.  
  20. <arte_marcial>
  21. <name>taekwondo</name>
  22. <description>Taekwon-Do</description>
  23. </arte_marcial>
  24.  
  25. </artes_marciais>
  26. </pedrocorreia.net>
  27. </xml>




De salientar que vai existir uma colecção de artes marciais, em que cada item é composto por uma arte marcial, que por sua vez possui 2 atributos, o seu nome e a sua descrição, este 2 atributos será usados para preencher a dropdown, os atributos "name" irão ter a seguinte correspondência:
< option value="name">description</option>


nota: estes 2 campos não são fixos, são totalmente configuráveis. Aquando a criação da Class, são apenas 2 dos vários parâmetros que constituem a sua assinatura, mas isso fica lá mais para a frente ...

Vamos utilizar o web.config para guardar a informação de onde está localizado o ficheiro, adicionando a seguinte app setting:
  1. <!-- Application Custom Configs -->
  2. <appSettings>
  3. <add key="UrlXML" value="http://www.pedrocorreia.net/_snippets_/aspnet/dropdown_xml/xml.xml"/>
  4. </appSettings>




Usar o web.config não é obrigatório, como poderão ver posteriormente pela construção da Class.


A class responsável pela leitura e preenchimento do webcontrol será esta:
  1. using System;
  2. using System.Data;
  3. using System.Configuration;
  4. using System.Web;
  5. using System.Web.Security;
  6. using System.Web.UI;
  7. using System.Web.UI.WebControls;
  8. using System.Web.UI.WebControls.WebParts;
  9. using System.Web.UI.HtmlControls;
  10.  
  11. /// <summary>
  12. /// Class responsável pela preenchimento da dropdown
  13. /// </summary>
  14. public class FillDropdownList{
  15.  
  16. private DropDownList _ddl;
  17. private string _ddlText;
  18. private string _ddlValue;
  19. private string _nodeElement;
  20. private string _urlXml;
  21.  
  22. /// <summary>
  23. /// Obter ou alterar o nome do campo que irá preencher o texto dos itens
  24. /// </summary>
  25. public string DDLText { get { return _ddlText; } set { _ddlText = value; } }
  26.  
  27. /// <summary>
  28. /// Obter ou alterar o nome do campo que irá preencher o valor dos itens
  29. /// </summary>
  30. public string DDLValue { get { return _ddlValue; } set { _ddlValue = value; } }
  31.  
  32. /// <summary>
  33. /// Obter ou alterar o endereço do ficheiro xml a ser lido
  34. /// </summary>
  35. public string UrlXml { get { return _urlXml; } set { _urlXml = value; } }
  36.  
  37. /// <summary>
  38. /// Obter ou alterar o nome dos elementos que vão ser lidos
  39. /// </summary>
  40. public string NodeElement { get { return _nodeElement; } set { _nodeElement = value; } }
  41.  
  42. /// <summary>
  43. /// Método construtor
  44. /// </summary>
  45. /// <param name="dropdown">Dropdown a ser preenchida</param>
  46. /// <param name="urlXml">Endereço do xml a ser lido</param>
  47. /// <param name="fieldText">Campo que possui o valor dos itens</param>
  48. /// <param name="fieldValue">Campo que possui o texto dos itens</param>
  49. /// <param name="nodeElement">Identificação do elemento onde estão guardados os itens a processar</param>
  50. public FillDropdownList(DropDownList dropdown, string urlXml, string fieldText, string fieldValue, string nodeElement) {
  51. this._ddl= dropdown;
  52. this._ddlText = fieldText;
  53. this._ddlValue = fieldValue;
  54. this._urlXml = urlXml;
  55. this._nodeElement = nodeElement;
  56. }
  57.  
  58. /// <summary>
  59. /// Preencher DropdownList
  60. ///
  61. /// nota: o tratamento de erros deverá ser mais elaborado ...
  62. /// </summary>
  63. public void FillDropdown() {
  64. DataSet dataSet = new DataSet();
  65.  
  66. dataSet = new DataSet(this._nodeElement);
  67. dataSet.ReadXml(this._urlXml);
  68.  
  69. this._ddl.DataSource = dataSet.Tables[this._nodeElement];
  70. this._ddl.DataTextField = this._ddlText;
  71. this._ddl.DataValueField = this._ddlValue;
  72. this._ddl.DataBind();
  73.  
  74. this._ddl.Items.Insert(0, new ListItem("(escolha um item)", ""));
  75.  
  76. dataSet.Dispose();
  77. }
  78.  
  79. }




Construindo a interface com o utilizar ...
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" %>
  2.  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4.  
  5. <html xmlns="http://www.w3.org/1999/xhtml" >
  6. <head runat="server">
  7. <title>Preencher DropdownList usando conteúdos fornecidos por xml</title>
  8. </head>
  9. <body>
  10. <form id="form1" runat="server">
  11. <div>
  12. <label for="DDList" id="lblDDList" title="Escolha uma Arte Marcial">Arte Marcial</label>
  13. <asp:DropDownList ID="DDList" runat="server"></asp:DropDownList>
  14. </div>
  15. </form>
  16. </body>
  17. </html>
  18.  



Last, but no the least, na nossa code-behind file iremos invocar no Page_Load a class responsável pelo tratamento da dropdown e o seu consequemente o preenchimento;
  1. using System;
  2. using System.Data;
  3. using System.Configuration;
  4. using System.Collections;
  5. using System.Web;
  6. using System.Web.Security;
  7. using System.Web.UI;
  8. using System.Web.UI.WebControls;
  9. using System.Web.UI.WebControls.WebParts;
  10. using System.Web.UI.HtmlControls;
  11.  
  12. using System.Web.Configuration;
  13.  
  14. public partial class Default : System.Web.UI.Page{
  15. protected void Page_Load(object sender, EventArgs e){
  16. if (!IsPostBack) {
  17. string urlXmlService = WebConfigurationManager.AppSettings["UrlXML"].ToString();
  18. FillDropdownList ddl = new FillDropdownList(this.DDList, urlXmlService, "description", "name", "arte_marcial");
  19. ddl.FillDropdown();
  20. }
  21. }
  22. }



Qualquer erro/ dúvida é só dizer!









clicks: 12860 12860 2007-06-02 2007-06-02 goto mySnippets mySnippets asp.net  Download  Bookmark This Bookmark This