Criando o seu livro de visitas

 

Aproveitando que eu estou embalado com a ASP.NET ( na verdade eu diria entusiasmado !!!) vou  mostrar como criar um livro de visitas usando código VB.NET no ASP.NET.  Sim , é isso mesmo , no ASP usávamos VBScript que não era lá estas coisas e que induzia a produção do código bomba-relógio - aquele que explode (da pau) quando você menos espera. Na ASP NET podemos usar C# ou VB.NET . Lembrando que a VB.NET agora é um linguagem tipada e orientada a objetos.

 

O livro de visitas do Macoratti (vou chamá-lo assim ) não vai usar uma base de dados como Access ou SQL Server , vamos gravar tudo em um arquivo XML . Assim este artigo irá abordar a utilização de código VB.NET no tratamento de arquivos XML na WEB.  Os comentários serão gravados no arquivo visitas.XML , e , este arquivo usa o arquivo visitas.XSD para definir sua estrutura. Veja abaixo como a ficará a estrutura  dos arquivos visitas.xml e visitas.xsd :

 

<?xml version="1.0" standalone="yes"?>
<xs:schema id="LivrodeVisitas" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="LivrodeVisitas" msdata:IsDataSet="true">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
 <xs:element name="Entrada">
 <xs:complexType>
 <xs:sequence>
 <xs:element name="ID" msdata:AutoIncrement="true" type="xs:int" />
 <xs:element name="Nome" type="xs:string" minOccurs="0" />
 <xs:element name="Data" type="xs:dateTime" minOccurs="0" />
 <xs:element name="Mensagem" type="xs:string" minOccurs="0" />

 </xs:sequence>
 </xs:complexType>
 </xs:element>
</xs:choice>
</xs:complexType>
<xs:unique name="Constraint1" msdata:PrimaryKey="true">
 <xs:selector xpath=".//Entrada" />
 <xs:field xpath="ID" />
 </xs:unique>
 </xs:element>
</xs:schema>

visitas.xml - O conteúdo do arquivo exibido.

visitas.xsd  - fornece a estrutura do arquivo XML

 

A primeira coisa que vou fazer é apresentar a vocês meu livro de visitas. Acessem e testem o livro no link : http://www.macoratti.net/livro/Default.aspx

 

Definindo os controles da página

 

A primeira parte do código que eu vou mostrar será a página HTML e o formulário onde foram definidos os web controls. Neste projeto eu estou usando  os seguintes controles :  TextBox , Button , Repeater e RequiredFieldValidator .

 

<html>
<head>
<title>ASP.NET - livro de visitas do Macoratti</title>
</head>
<body>

<h3>Assine o livro de visitas do Macoratti:</h3>

<form runat="server">

<table>
  <tr><th align="right">Nome:</td>

  <td>
    <asp:TextBox id="txtNome" size="45" runat="server" />
    <asp:RequiredFieldValidator runat="server"  id="validNameRequired" ControlToValidate="txtNome" errormessage="Informe seu nome !."
    display="Dynamic" />

    </td> </tr>

    <tr><th align="right">Comentário:</td>
  <td>
  <asp:TextBox id="txtMensagem" size="65" runat="server" />
  <asp:RequiredFieldValidator runat="server" id="validMessageRequired" ControlToValidate="txtMensagem" errormessage="Qual a sua  mensagem !." display="Dynamic" />

  </td>
  </tr>
</table>

<asp:Button id="btnAssinarLivroVisitas" text="Assinar o livro de visitas." OnClick="btnAssinarLivroVisitas_OnClick" runat="server" />

</form>

<hr />

<asp:Repeater id=LivrodeVisitasRepeater runat="server">

  <HeaderTemplate>
      <h3>Comentários:</h3>
  </HeaderTemplate>
  <ItemTemplate>

  <strong><%# DataBinder.Eval(
Container.DataItem, "Nome") %> : </strong>
  <%# DataBinder.Eval(
Container.DataItem, "Mensagem") %> - <i><%# DataBinder.Eval(Container.DataItem, "Data") %></i>
 
<br />
  </ItemTemplate>
      <FooterTemplate>
         <hr/>
     </FooterTemplate>

</asp:Repeater>

</body>
</html>

 

Neste código eu estou definindo os controles para serem exibidos na página . Todos eles possuem um identificador id que será usado no código de VB.NET.

Os controles TextBox e Button já devem ser velhos conhecidos seus ; no artigo Trabalhando com Controles e Web Forms - II eu falei sobre os controles de validação usado nos formulários só esta faltando falar sobre o Repeater.  Um Repeater é um controle parecido com o DataList só que com menos recursos ; não permite seleção ,edição nem exibição no modo tabela ; ele permite apenas definir os templates de renderização: Header , Footer , Item , AlternatingItem e Separator. No nosso código ele é usado apenas para repetir os comentários.(Perceba que ele possui a estrutura de Header / ItemTemplate / FooterTemplate )

 

O DataBinder.Eval é usado para inserir o valor de cada campo em um template que renderiza o registro(Header , Footer , Item , AlternatingItem e Separator.) ,  assim cada elemento exibido é referenciado por Container.DataItem e o DataBinder.Eval considera cada um destes elementos.

 

Definindo código que gerencia os dados

 

Abaixo eu estou exibindo o código que gerencia o livro de visitas. Ele é responsável por gravar e exibir os dados no arquivo XML. Eu estou usando a classe DataSet e o objeto DataTable para gerenciar o arquivo XML. Lembre-se que um dos pilares da plataforma .NET é a XML. Os dados são exibidos usando um componente DataReapeater.

 

<script language="VB" runat="server">

' Declara as strings para apontar para os arquivos XML and XSD
Dim strXmlDocument As String = Server.MapPath("\livro\visitas.xml")
Dim strXmlSchema As String = Server.MapPath("\livro\visitas.xsd")

Sub Page_Load(sender as Object, e as EventArgs)

' Le o arquivo XML em um XmlDataDocument assim podemos acessá-lo via DataSet

 Dim myXmlDataDocument As New XmlDataDocument()
 myXmlDataDocument.DataSet.DataSetName = "LivrodeVisitas"
 myXmlDataDocument.DataSet.ReadXmlSchema(strXmlSchema)
 myXmlDataDocument.Load(strXmlDocument)

 'Vincula a fonte de dados ao repeater
 
LivrodeVisitasRepeater.DataSource = myXmlDataDocument.Dataset.Tables("Entrada")
 LivrodeVisitasRepeater.DataBind()
End Sub


Sub btnAssinarLivroVisitas_OnClick(sender as Object, e as EventArgs)

 ' Le o arquivo XML em um XmlDataDocument assim podemos acessá-lo via DataSet
 
Dim myXmlDataDocument As New XmlDataDocument()
 myXmlDataDocument.DataSet.DataSetName = "LivrodeVisitas"
 myXmlDataDocument.DataSet.ReadXmlSchema(strXmlSchema)
 myXmlDataDocument.Load(strXmlDocument)

 Dim LivrodeVisitasTable As DataTable
 LivrodeVisitasTable = myXmlDataDocument.Dataset.Tables("Entrada")

 ' Cria uma nova linha para entrar no livro de visitas
 
Dim myDataRow As DataRow
 myDataRow = LivrodeVisitasTable.NewRow

 'Define os valores das linhas
 
myDataRow.Item("Nome") = txtNome.Text
 myDataRow.Item("Data") = Now()
 myDataRow.Item("Mensagem") = txtMensagem.Text

 ' Inclui a linha na tabela
 
LivrodeVisitasTable.Rows.Add(myDataRow)

 ' Escreve os dados na tabela
 
myDataRow.AcceptChanges

 ' Escreve os dados no DataSet
 
myXmlDataDocument.DataSet.AcceptChanges

 ' Escreve um novo arquivo XML
 myXmlDataDocument.DataSet.WriteXml(strXmlDocument, XmlWriteMode.IgnoreSchema)

 'vincula a fonte de dados ao controle repeater
 LivrodeVisitasRepeater.DataSource = LivrodeVisitasTable
 LivrodeVisitasRepeater.DataBind()
End Sub
</script>

 

Bem , creio que o código comentado já dá uma luz ao assunto. Pretendo abordar o assunto em mais profundidade em um outro artigo. Até lá...

 

Viu como é simples colocar seus dados na web !!!!

 

Essa aplicação foi refeita usando o Visual Web Developer 2008 Express Edition e criando um New Web Site com os mesmos recursos.

 

Pegue o projeto completo aqui: livroVisitasXML.zip

Referências:


José Carlos Macoratti