MXStudio » ASP.net Banco de Dados Geral Programação » Data Grid em ASP

Data Grid em ASP

Todos nós já ouvimos sobre o maravilhoso Datagrid em ASP.Net, muito útil, aliás. Neste exemplo iremos criar a uma versão do datagrid.

Para criar uma classe DataGrid, o primeiro problema foi a eficiência. Ao aprender como obter registros de uma base de dados e exibi-los em uma tabela em sua página ASP, muitas vezes fazemos desta forma.

 

<table>
<%

Do Until objRec.
EOF
%>
   
<tr>

       
<td><%=objRec("nome") %></td>

       
<td><%=objRec("enderco") %></td>

       
<td><%=objRec("email") %></td>

   
</tr>

<%

   objRec
.
movenext
loop
%>
</table>

 

Ainda mais eficaz é a utilização do método de GetRows do Recordset para preencher a 2 array dimensional . Então você já não tem que usar os recursos acessando o Recordset.

dim arTable
arTable
= objRec.GetRows

objRec
.Close

set objRec = nothing

Você tem agora 2 array dimensional, mas como o recordset armazena informação neste array?

arTable’s – 2 dimensões: arTable (TotalCols, TotalRows). Portanto, se o meu Recordset retornou 10 registros, seria arTable (3, 10) e você teria que ir de arTable (0, 0) para arTable (2, 9) para recuperar cada valor que você deve ir através do TotalCols, seguido pelo TotalRows. Você não sabe quantos registros vai retornar, assim, usamos a função UBound:

dim tCols, tRows
tCols
= UBound(arTable, 1)

tRows
= UBound(arTable, 2)

Com um array de mais de uma dimensão que necessita abastecer UBound com um valor para indicar, que o elemento deseja o total. Como vimos acima, nos tCols para definir o total da primeira dimensão e tRows para o total da segunda dimensão. Com esta informação, através dos registros utilizando loop aninhado.

<table>
<%
Dim x,
y
For x = 0
to tRows
   
Response.Write "<tr>"

   
For y = 0
to tCols
       
Response.Write "<td>" & rTable(y, x) & "</td>"

   
Next

   
Response.Write "</tr>"

Next

%>

Um bom modelo que podemos mover/encapsular em uma classe.

Quando a classe inicia estabelecemos nosso objeto connection e objeto Recordset, também definimos a variável Column Count para 0 para usar nas nossas próprias colunas e, finalmente, usamos a AutoColumns = true. É neste processo que você colocaria quaisquer predefinições que você deseja para sua classe.

private pAutoColumns, pConnStr, pSqlStr, intColCnt
 
Private pOutPut, pConn, pRec, x, y,
pArray
 
Private Sub Class_Initialize()

     
Set pConn = server.createobject("adodb.connection")

     
Set pRec = server.createobject("adodb.recordset")

      intColCnt
= 0

      pAutoColumns
= True

 
End Sub

Em seguida, criamos as regras que nos permitem definir as várias propriedades:

Public Property Let ConnectionString(strConn)
      pConnStr
=
strConn
 
End Property

  Public Property Let AutoColumns(bAutoCols)
     
If bAutoCols = True or bAutoCols = False then

          pAutoColumns
=
bAutoCols
     
End
IF
 
End Property

  Public Property Let SqlString(strSql)
      pSqlStr
=
strSql
 
End Property

Agora sobre os métodos, procedimentos, para a sua classe, adicionamos a funcionalidade real para a classe:

Public Sub AddColumn(strColName)
     
If intColCnt = 0 then

          pOutPut
= "<table width='100%' border=1 cellpadding=0 cellspacing=0>" &
vbcrlf
          pOutPut
= pOutPut & "<tr>" &
vbcrlf
     
End If

      pOutPut
= pOutPut & "<td><strong>" & strColName & "</strong></td>" &
vbcrlf
      intColCnt
= intColCnt + 1

 
End Sub

Se optar por especificar a nossa própria column names, então nós chamamos este método para adicionar um column names. Ele apenas acrescenta uma nova célula de nosso grid (tabela) para cada coluna, se quisermos iniciar a linha da tabela e se está em 0. Em qualquer outro momento podemos acrescentar a célula, ou não, se você usar AutoColumns.

Public Sub Bind
      pConn
.Open
pConnStr
     
Set pRec = pConn.Execute(pSqlStr)

     
If pAutoColumns = True then

         
'atribuir nomes de coluna retornados
          pOutPut = "<table width='
100%
' border=1 cellpadding=0 cellspacing=0>" & vbcrlf
          pOutPut = pOutPut & "<tr>" & vbcrlf
          Redim pColNames(pRec.Fields.Count)
          For x = 0 to pRec.Fields.Count - 1
              pOutPut = pOutPut & "<td>" & pRec.Fields(x).Name & "</td>" & vbcrlf
          Next
      End If
      pOutPut = pOutPut & "</tr>" & vbcrlf
      pArray = pRec.GetRows
      For x = 0 to UBound(pArray, 2)
          pOutPut = pOutPut & "<tr>" & vbcrlf
          For y = 0 to UBound(pArray, 1)
  pOutPut = pOutPut & "<td>" & pArray(y, x) & "</td>" & vbcrlf
          Next
          pOutPut = pOutPut & "</tr>" & vbcrlf
      Next
      pOutPut = pOutPut & "</table>" & vbcrlf
      Response.Write pOutPut
  End Sub

Basicamente, nós abrimos o recordset, se AutoColums = true então ficamos com os campos nomes e criamos células para eles ou vamos com o custom column names. Então usamos o código para percorrer a nossa matriz de valores. Tudo isto está a ser concatenado a uma string de saída, que é finalmente escrita para o browser no final.

Usando a classe em uma página ASP, salve-o como DataGrid.asp em sua pasta wwwroot, foi usado o nwind.mdb para o banco de dados.

Estrutura do banco:

[nwind]

ID – autonum

Nome – texto

Profissão – texto

Fone – texto

<%@ LANGUAGE="VBSCRIPT" %>
<% option explicit
%>
<% response.buffer=true
%>
<html>

<head>

   
<title>DataGrid Teste</title>

</head>

<!-- #include file="DataGrid.asp"-->

<body>

<%

dim meuDataGrid
,
mapPath
Set meuDataGrid= New
caDataGrid
mapPath = "nwind.mdb"
' conexao
meuDataGrid.ConnectionString =  "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="& Server.MapPath(mapPath)
meuDataGrid.SqlString =  "select nome, profissao, fone from cadastro"
meuDataGrid.Bind
set meuDataGrid= nothing

'agora permite definir nossas próprias colunas
response.write "<br><br>"

Set meuDataGrid= New
caDataGrid
meuDataGrid
.ConnectionString =  "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="& Server.MapPath(mapPath)

meuDataGrid
.SqlString =  "select nome, profissao, fone from cadastro"

meuDataGrid
.AutoColumns = false

meuDataGrid
.AddColumn("nome")

meuDataGrid
.AddColumn("profissao")

meuDataGrid
.AddColumn("fone")

meuDataGrid
.Bind

set meuDataGrid=
nothing
%>
</body>

</html>

Abaixo o código completo

<%
Class
caDataGrid
   
' variaveis private
   private pAutoColumns, pConnStr, pSqlStr, intColCnt
   Private pOutPut, pConn, pRec, x, y, pArray

'este é executado quando você cria uma referência para a classe caDataGrid
   
Private Sub Class_Initialize()

       
Set pConn = server.createobject("adodb.connection")

       
Set pRec = server.createobject("adodb.recordset")

       intColCnt
= 0

       pAutoColumns
= True

   
End Sub

   'Propriedades - todos writable
   Public Property Let ConnectionString(strConn)
       pConnStr = strConn
   End Property

   Public Property Let AutoColumns(bAutoCols)
       If bAutoCols = True or bAutoCols = False then
           pAutoColumns = bAutoCols
       End IF
   End Property

   Public Property Let SqlString(strSql)
       pSqlStr = strSql
   End Property

   'Metodos  
   
Public Sub AddColumn(strColName)

       
If intColCnt = 0 then

           pOutPut
= "<table width='100%' border=1 cellpadding=0 cellspacing=0>" &
vbcrlf
           pOutPut
= pOutPut & "<tr>" &
vbcrlf
       
End If

       pOutPut
= pOutPut & "<td><strong>" & strColName & "</strong></td>" &
vbcrlf
       intColCnt
= intColCnt + 1

   
End Sub

   Public Sub Bind
       pConn
.Open
pConnStr
       
Set pRec = pConn.Execute(pSqlStr)

       
If pAutoColumns = True then

   
'atribuir nomes de coluna retornados
           pOutPut = "<table width='
100%
' border=1 cellpadding=0 cellspacing=0>" & vbcrlf
           pOutPut = pOutPut & "<tr>" & vbcrlf
           Redim pColNames(pRec.Fields.Count)
           For x = 0 to pRec.Fields.Count - 1
               pOutPut = pOutPut & "<td>" & pRec.Fields(x).Name & "</td>" & vbcrlf
           Next
       End If
       pOutPut = pOutPut & "</tr>" & vbcrlf
       pArray = pRec.GetRows
       For x = 0 to UBound(pArray, 2)
           pOutPut = pOutPut & "<tr>" & vbcrlf
           For y = 0 to UBound(pArray, 1)
   pOutPut = pOutPut & "<td>" & pArray(y, x) & "</td>" & vbcrlf
           Next
           pOutPut = pOutPut & "</tr>" & vbcrlf
       Next
       pOutPut = pOutPut & "</table>" & vbcrlf
       Response.Write pOutPut
   End Sub

'isso é quando finalizamos nossa referência caDataGrid
   
Private Sub Class_Terminate()

       pOutPut
= ""

       pRec
.Close

       
Set pRec =
nothing
       pconn
.
close
       
Set pConn =
nothing
   
End Sub

End Class
%>


Assine o nosso Feed
1.404 assinantes,
assine você também!
Publique esse artigo no Twitter Salve este artigo no Delicious Cadastre esse artigo no Dihitt Cadastre esse artigo no UEBA Cadastre esse artigo no Rec6

1 Comment to Data Grid em ASP

  1. Março 11, 2010 at 12:06 pm | Permalink

    muito bom, adorei, ótimo artigo, ja estou usando

Deixe um Comentario

You can use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="">

X@nBuRzUm

Últimos Artigos do Autor