Data Grid

Published on July 2016 | Categories: Documents | Downloads: 29 | Comments: 0 | Views: 208
of 81
Download PDF   Embed   Report

Comments

Content


Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
T%T&R'A(
Tudo Sobre DataGrid
(ASP.NET e C#)
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 1 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
Autor) Ale*a#dre Ma+edo (u,es P-.i#a $ de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
0 N D ' C E
Caso Mais Simples.............................................................................................................4
Alterando a Interface Visual do DataGrid....................................................................11
Usando a Paginaço Autom!tica do DataGrid.............................................................1"
Usando a #rdenaço do DataGrid.................................................................................$%
Customi&ando o DataGrid..............................................................................................$'
Usando o Conceito de Master(Detail DataGrid.............................................................4$
Usando a #rdenaço e a Paginaço Customi&adas no DataGrid................................4)
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 1 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
'#trodu23o
Um dos controles mais poderosos no ASP.NET é, sem dúvida, o DataGrid, pois
a maioria das aplicações para a we !sen"o todas# ir"o, de al$%ma &orma,
%tili'ar este controle. ( DataGrid nada mais é )%e %ma taela )%e permite
estaelecer o v*nc%lo com %ma &onte de dados !&i)%e atento ao termo +&onte de
dados, )%e ser- e.plicado mais adiante#, apresentando esses dados de &orma
estr%t%rada.
Esse controle se aseia na %tili'aç"o de o/etos 0TA12E3 do 4T52, )%ando
estes o/etos s"o renderi'ados no &ormato ade)%ado ao comp%tador do cliente,
através de %ma série de propriedades e métodos de&inidos no servidor )%e
res%ltam na economia de inúmeras lin6as de c7di$o.
Este t%torial tem por o/etivo tratar de maneira aran$ente t%do o )%e se re&ere
ao o/eto DataGrid. Trataremos, a)%i, desde s%a implementaç"o mais simples
até %ma implementaç"o e.tremamente comple.a, )%e permite a pa$inaç"o e a
ordenaç"o c%stomi'adas. 8eremos tamém como %tili'ar %m DataGrid, dentro
de o%tro DataGrid !conceito de 5aster9Detail#.
Caso Mais Si45les
8e/a, a se$%ir, %m dos e.emplos mais simples de %tili'aç"o de %m DataGrid.
S%pondo )%e voc: este/a em %ma p-$ina va'ia asp., simplesmente crie %m
o/eto DataAdapter no ;DE do 8is%al St%dio .NET !8S.NET#, escol6endo a )%er<
de s%a pre&er:ncia !&a'endo isto com o ;DE, ele pode criar, a%tomaticamente, o
o/eto =onnection para a cone."o com o anco de dados#. Em se$%ida, $ere
%m DataSet &ortemente tipado !T<ped Dataset# através do o/eto DataAdapter
criado anteriormente, clicando com o ot"o direito do mo%se e selecionando
+Generate DataSet,. (serve )%e nada &oi escrito até a$ora> todo o processo &oi
inteiramente vis%al?
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 6 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
(1S@ Apenas a t*t%lo de e.emplo, neste t%torial estaremos %tili'ando a taela
P%s, do SA2 Server BCCC> a )%er< %tili'ada na $eraç"o do DataAdapter acima
&oi a +SE2E=T D EF(5 A%t6ors,.
;nsira a$ora %m o/eto DataGrid na p-$ina e selecione a propriedade
DataSo%rce no ;DE> e oserve a opç"o de seleç"o do DataSet )%e &oi criada e
escol6a a mesma. A partir deste momento, o (/eto DataGrid /- recon6ece os
campos da taela no DataSet. Escol6a a$ora a propriedade Data5emer e
oserve )%e /- é poss*vel escol6er +a%t6ors,.
8e/a como &ica s%a p-$ina com as d%as opções selecionadas@
Autor) Ale*a#dre Ma+edo (u,es P-.i#a de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
Note )%e, mais %ma ve', nen6%ma lin6a de c7di$o &oi escrita até a$ora.
Para )%e os dados possam ser capt%rados e o DataSet preenc6ido com esses
dados, se$%ido pelo DataGrid, vamos colocar apenas o se$%inte c7di$o no
evento load da p-$ina@
sqlConnection1.Open();
sqlDataAdapter1.Fill(DS_Authors1);
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 7 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
sqlConnection1.Close();
DG_Simples.DataBind();
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 8 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
A$ora rode a p-$ina e ve/a o res%ltado@
Autor) Ale*a#dre Ma+edo (u,es P-.i#a / de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
(serve o )%e acontece%@
( (/eto =onnection ari% a cone."o com o anco de dados> em se$%ida, o
o/eto DataAdapter pop%lo% o Dataset com os dados do anco de dados,
&ec6ando, lo$o depois, a cone."o com esse anco de dados> no passo se$%inte,
o o/eto DataGrid &oi pop%lado com os dados do DataSet. Neste momento, a
cone."o /- est- des&eita, pois estamos diante do conceito de &onte de dados e
n"o de anco de dados. Para preenc6er o DataGrid, n"o 6- necessidade de
cone."o a nen6%m anco de dados, e sim, a %ma &onte de dados. Esta &onte de
dados poderia ser, por e.emplo, %m ar)%ivo G52 )%e teria pop%lado o DataSet.
Tro%.emos este e.emplo s7 para mostrar como é simples inserir %ma taela de
dados no ASP.NET. H 7vio )%e esse e.emplo t"o simples tem po%ca %tilidade
pr-tica, por isso, no pr7.imo item, vamos e.plorar %m po%co mais o o/eto
DataGrid para mostrar s%as propriedades alterando, assim, s%a inter&ace vis%al.
8amos aos c7di$os dos ar)%ivos@
Simples.asp.@
Parte superior do formulário
Parte inferior do formulário
<%@ Page language="c#" Codebehind="Simples.aspx.cs" AutoEventWireup="false"
Inherits="CoolDataGrid.Simples" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>Simples</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema"
content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<asp:DataGrid id="DG_Simples" runat="server" DataSource="<%#
DS_Authors1 %>" DataMember="authors">
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 9 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
</asp:DataGrid>
</form>
</body>
</HTML>Parte superior do formulário
Parte inferior do formulário
Simples.asp..cs !SE5 a parte de c7di$o, $erado a%tomaticamente pelo
8S.NET#@
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;
namespace CoolDataGrid
{
public class Simples : System.Web.UI.Page
{
protected System.Data.SqlClient.SqlDataAdapter sqlDataAdapter1;
protected System.Data.SqlClient.SqlCommand sqlSelectCommand1;
protected System.Data.SqlClient.SqlCommand sqlInsertCommand1;
protected System.Data.SqlClient.SqlCommand sqlUpdateCommand1;
protected System.Data.SqlClient.SqlCommand sqlDeleteCommand1;
protected System.Data.SqlClient.SqlConnection sqlConnection1;
protected CoolDataGrid.DS_Authors DS_Authors1;
protected System.Web.UI.WebControls.DataGrid DG_Simples;
private void Page_Load(object sender, System.EventArgs e)
{
// Abre a conexão e preenche o DataSet com os Dados
// depois fecha a conexão
sqlConnection1.Open();
sqlDataAdapter1.Fill(DS_Authors1);
sqlConnection1.Close();
//Preenche a DataGrid
DG_Simples.DataBind();
}
}
}
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 10 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
Altera#do a '#ter:a+e ;isual do DataGrid
E.istem diversas propriedades do o/eto DataGrid )%e servem para alterar s%a
apresentaç"o vis%al. 8e/a, por e.emplo, como podem ser alteradas as se$%intes
propriedades do Data$rid, na p-$ina Simples.asp. !apenas o ta$ DataGrid#@
<asp:DataGrid id="DG_Simples" runat="server"
DataSource="<%# DS_Authors1 %>"
DataMember="authors"
CellPadding="2"
CellSpacing="2"
BorderStyle="Solid"
BorderWidth="2px"
Font-Size="X-Small"
Font-Names="Tahoma"
ForeColor="Navy"
GridLines="Horizontal"
BackColor="FloralWhite"
BorderColor="DarkOliveGreen">
</asp:DataGrid>
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 11 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
A taela &ica com a se$%inte apar:ncia@
4- o%tras propriedades de estilo m%ito importantes. S"o elas@
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 1$ de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
AlternatingItemStyle
Propriedade %sada para alterar o estilo da apar:ncia das lin6as
alternadas !pares# do DataGrid.
EditItemStyle
Propriedade %sada para alterar o estilo da apar:ncia da lin6a )%e se
encontra em modo de ediç"o.
FooterStyle
Propriedade %sada para alterar o estilo da apar:ncia da lin6a de rodapé
do DataGrid.
HeaderStyle
Propriedade %sada para alterar o estilo da apar:ncia da lin6a de
caeçal6o do DataGrid.
ItemStyle
Propriedade %sada para alterar o estilo da apar:ncia das lin6as
Alternadas !*mpares# do DataGrid.
PageStyle
Altera o estilo da apar:ncia dos o/etos de pa$inaç"o a%tom-tica do
DataGrid.
SelectedItemStyle
Propriedade %sada para alterar o estilo da apar:ncia da lin6a do
DataGrid selecionada !apenas )%ando %tili'ado com %m o/eto de seleç"o
de lin6a, como, por e.emplo, %m ot"o#.
No e.emplo aai.o, os itens 4eader, ;tem e Alternatin$;tem ir"o m%dar apenas
al$%mas cores e estilos de &ontes destes elementos@
<asp:DataGrid id="DG_Simples" runat="server"
DataSource="<%# DS_Authors1 %>"
DataMember="authors"
CellPadding="2"
CellSpacing="2"
BorderStyle="Solid"
BorderWidth="2px"
Font-Size="X-Small"
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 11 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
Font-Names="Tahoma"
ForeColor="Navy"
GridLines="Horizontal"
BackColor="FloralWhite"
BorderColor="DarkOliveGreen">
<AlternatingItemStyle BackColor="Silver"></AlternatingItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="Black"
BackColor="DarkSeaGreen"></HeaderStyle>
</asp:DataGrid>
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 16 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
(1S@ a mesma padroni'aç"o poderia ser &eita com Ta$s St<les, pois é poss*vel
%tili'ar o/etos St<les do 4T52 para traal6ar com os $rids. Assim, poder*amos
ter o mesmo res%ltado )%e o otido acima, com a se$%inte p-$ina Simples.asp.@
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 1 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
<%@ Page language="c#" Codebehind="Simples.aspx.cs" AutoEventWireup="false"
Inherits="CoolDataGrid.Simples" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>Simples</title>
<meta content="Microsoft Visual Studio 7.0" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5"
name="vs_targetSchema">
<style>
.table { FONT: x-small Tahoma; COLOR: navy }
.tableItem {FONT: x-small Tahoma; COLOR: navy; BACKGROUND-COLOR: floralwhite}
.tableHeader {FONT: x-small Tahoma; COLOR: black; BACKGROUND-COLOR: darkseagreen;
FONT-WEIGHT: Bold}
.alternatingItem {FONT: x-small Tahoma; COLOR: navy; BACKGROUND-COLOR: silver}
</style>
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<asp:DataGrid id="DG_Simples" runat="server"
DataSource="<%# DS_Authors1 %>"
DataMember="authors"
CellPadding="2"
CellSpacing="2"
BorderStyle="Solid"
BorderWidth="2px"
GridLines="Horizontal"
BorderColor="DarkOliveGreen"
CssClass="tableitem">
<AlternatingItemStyle CssClass="alternatingItem"></AlternatingItemStyle>
<HeaderStyle CssClass="tableHeader"></HeaderStyle>
</asp:DataGrid></form>
</body>
</HTML>
%sa#do a Pa.i#a23o Auto4-ti+a do DataGrid
=om a pa$inaç"o o pro$ramador /- começa a %tili'ar %m po%co mais de c7di$o,
mas, sem dúvida, nada )%e se compare aos processos de anti$amente.
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 17 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
S%pon6a, a$ora, )%e o res%ltado desta )%er< &osse %m re$istro enorme, com
%ma s%cess"o intermin-vel de lin6as. =ertamente, a p-$ina &icaria
e.tremamente lenta, o )%e nos ori$aria a recorrer I criaç"o de %ma pa$inaç"o.
( o/eto DataGrid /- vem com %m e.emplo de pa$inaç"o em%tido )%e %tili'a os
rec%rsos de pa$inaç"o. Para isto, recorreJse a K propriedades do o/eto
DataGrid@ Pa$eSi'e, AllowPa$in$, e Allow=%stomPa$in$.
8e/amos como isso ocorre@
Por de&a%lt, a propriedade AllowPa$in$ é Ealse> temos, ent"o, )%e con&i$%r-Jla
com Tr%e. A propriedadeJpadr"o do Pa$eSi'e é LC, portanto, neste e.emplo,
vamos con&i$%r-Jla como M, para manter as p-$inas constr%*das com a mesma
)%er< %tili'ada anteriormente. Por en)%anto dei.emos Allow=%stomPa$in$ sem
nada.
A$ora, asta criar o evento )%e c%idar- da pa$inaç"o, )%e é o evento
(nPa$e;nde.=6an$ed. Este evento dever- apontar para %m método no se%
c7di$o, como no e.emplo aai.o@
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 18 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
Na p-$ina Simples.asp. !apenas as propriedades do DataGrid#@
<asp:DataGrid id="DG_Simples" runat="server"
DataSource="<%# DS_Authors1 %>"
DataMember="authors"
CellPadding="2"
CellSpacing="2"
BorderStyle="Solid"
BorderWidth="2px"
GridLines="Horizontal"
BorderColor="DarkOliveGreen"
CssClass="tableitem"
PageSize="5"
AllowPaging="True"
OnPageIndexChanged="AlteraPage">
<AlternatingItemStyle CssClass="alternatingItem"></AlternatingItemStyle>
<HeaderStyle CssClass="tableHeader"></HeaderStyle>
</asp:DataGrid>
OnPageIndexChanged="AlteraPagina"
Na P-$ina Simples.asp..cs !apenas os métodos da classe#@
private void Page_Load(object sender, System.EventArgs e)
{
//verifica se é um submit para mesma página (PostBack)
if (!IsPostBack)
{
BindData();
}
}
protected void BindData()
{
// Abre a conexão e preenche o DataSet com os Dados
// depois fecha a conexão
sqlConnection1.Open();
sqlDataAdapter1.Fill(DS_Authors1);
sqlConnection1.Close();
//Preenche a DataGrid
DG_Simples.DataBind();
}
protected void AlteraPage(Object sender, DataGridPageChangedEventArgs e)
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 1/ de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
{
//configura nova página
DG_Simples.CurrentPageIndex=e.NewPageIndex;
BindData();
}
( evento load da p-$ina veri&ica apenas se est- ocorrendo %ma primeira
c6amada nesta p-$ina o% se é %m Post1acN, )%e si$ni&ica %m s%mit da p-$ina
para ela mesma. =aso n"o se/a %m Post1acN, o evento preenc6e os dados do
DataGrid com a rotina 1ind.
Em se$%ida, o evento )%e c%ida da pa$inaç"o adapta e devolve o *ndice da
p-$ina e, com o método 1ind, a p-$ina recarre$a os dados.
8e/a o res%ltado dessa tare&a e teste a pa$inaç"o@
A pa$inaç"o ocorre% com os caracteres +0, e +3,, para &rente e para tr-s, mas
podeJse alterar este &ormato com as propriedades de estilo do Pa$erS<le@
E.istem dois tipos -sicos de&inidos pela propriedade +5ode,@ Ne.tPrev e
N%mericPa$es. ( primeiro de&ine pa$inaç"o em te.to, e o se$%ndo, pa$inaç"o
em número. 8e/amos %m e.emplo de cada, analisando primeiramente a
pa$inaç"o em te.to@
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 19 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
De&ina a propriedade 5ode como +Ne.tPrev,, e depois de&ina as se$%intes
propriedades !)%e s7 se aplicam para este 5ode#@
<asp:DataGrid id="DG_Simples" runat="server"
DataSource="<%# DS_Authors1 %>"
DataMember="authors"
CellPadding="2"
CellSpacing="2"
BorderStyle="Solid"
BorderWidth="2px"
GridLines="Horizontal"
BorderColor="DarkOliveGreen"
CssClass="tableitem"
PageSize="5"
AllowPaging="True"
OnPageIndexChanged="AlteraPage">
<AlternatingItemStyle CssClass="alternatingItem"></AlternatingItemStyle>
<HeaderStyle CssClass="tableHeader"></HeaderStyle>
<PagerStyle NextPageText="Pr&#243;xima" PrevPageText="Anterior"
Position="TopAndBottom"></PagerStyle>
</asp:DataGrid>
Autor) Ale*a#dre Ma+edo (u,es P-.i#a $0 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
8e/a o res%ltado@
8e/amos , a$ora o e.emplo da pa$inaç"o com Números@ de&ina a propriedade
5ode como +N%mericPa$es, e de&ina as se$%intes propriedades !somente para
o St<le Pa$erSt<le#@
<PagerStyle Position="TopAndBottom" PageButtonCount="3" Mode="NumericPages"></PagerStyle>
8e/a o res%ltado@
Autor) Ale*a#dre Ma+edo (u,es P-.i#a $1 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
(1S@ tome m%ito c%idado com o rec%rso de pa$inaç"o a%tom-tica do DataGrid.
Ele s7 é recomendado para pe)%enas )%antidades de dados, pois a cada
m%dança de p-$ina é &eita %ma %sca do T(D(S os dados /%nto ao anco de
dados. Se o número de dados &or m%ito $rande, deveJse %tili'ar %ma l7$ica de
pa$inaç"o c%stomi'ada, como veremos mais adiante.
Autor) Ale*a#dre Ma+edo (u,es P-.i#a $$ de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
%sa#do a &rde#a23o do DataGrid
( %so de ordenaç"o press%põe )%e a monta$em da %sca da )%er< se/a
dinOmica, o% se/a, a ordenaç"o re)%er a %tili'aç"o de %ma cl-%s%la +(FDEF
1P, dinOmica na coleta dos dados para a p-$ina, com o %so da propriedade
SortE.pression de cada col%na do DataGrid.
Para )%e possamos alterar dinamicamente a c6amada da )%er<, vamos incl%ir
%ma vari-vel strin$ e coloc-Jla no o/eto selectcommand do DataAdapter )%e &oi
%tili'ado até a$ora. Em se$%ida, iremos alterar o método 1indData para )%e ele
re&lita essa ordenaç"o.
8amos tamém incl%ir o novo método de ordenaç"o +AlteraSort,, de&inido na
propriedade do DataGrid (nSort=ommand, e con&i$%r-Jlo como AllowSortin$ Q
Tr%e. Analisemos os c7di$os da p-$ina@
Simples.asp. !s7 a ta$ DataGrid#@
<asp:DataGrid id="DG_Simples" runat="server"
DataSource="<%# DS_Authors1 %>"
DataMember="authors"
CellPadding="2"
CellSpacing="2"
BorderStyle="Solid"
BorderWidth="2px"
GridLines="Horizontal"
BorderColor="DarkOliveGreen"
CssClass="tableitem"
PageSize="5"
AllowPaging="True"
OnPageIndexChanged="AlteraPage"
AllowSorting="True"
OnSortCommand="AlteraSort">
<AlternatingItemStyle CssClass="alternatingItem"></AlternatingItemStyle>
<HeaderStyle CssClass="tableHeader"></HeaderStyle>
<PagerStyle Position="TopAndBottom" PageButtonCount="3"
Mode="NumericPages"></PagerStyle>
</asp:DataGrid>
Autor) Ale*a#dre Ma+edo (u,es P-.i#a $1 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
Simples.asp..cs@
public class Simples : System.Web.UI.Page
{
protected System.Data.SqlClient.SqlDataAdapter sqlDataAdapter1;
protected System.Data.SqlClient.SqlCommand sqlSelectCommand1;
protected System.Data.SqlClient.SqlCommand sqlInsertCommand1;
protected System.Data.SqlClient.SqlCommand sqlUpdateCommand1;
protected System.Data.SqlClient.SqlCommand sqlDeleteCommand1;
protected System.Data.SqlClient.SqlConnection sqlConnection1;
protected CoolDataGrid.DS_Authors DS_Authors1;
protected System.Web.UI.WebControls.DataGrid DG_Simples;
protected string strSQL = "SELECT * FROM authors";
private void Page_Load(object sender, System.EventArgs e)
{
//verifica se é um submit para mesma página (PostBack)
if (!IsPostBack)
{
BindData();
}
}
protected void BindData()
{
// Abre a conexão e preenche o DataSet com os Dados
// depois fecha a conexão
sqlConnection1.Open();
this.sqlSelectCommand1.CommandText = strSQL;
sqlDataAdapter1.Fill(DS_Authors1);
sqlConnection1.Close();
//Preenche a DataGrid
DG_Simples.DataBind();
}
protected void AlteraPage(Object sender, DataGridPageChangedEventArgs e)
{
//configura nova página
DG_Simples.CurrentPageIndex=e.NewPageIndex;
BindData();
}
protected void AlteraSort(Object sender,DataGridSortCommandEventArgs e)
{
strSQL = strSQL + " ORDER BY " + e.SortExpression;
BindData();
}
}
Autor) Ale*a#dre Ma+edo (u,es P-.i#a $6 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
8e/amos o res%ltado@
Simples, n"oR A$ora, asta clicar em )%al)%er caeçal6o da taela acima para
orden-Jla a%tomaticamente.
Custo4i,a#do o DataGrid
T%do o )%e &oi &eito até a$ora pode parecer m%ito interessante, mas ainda nos
vemos diante de al$%mas limitações. Por e.emplo, n"o &oi poss*vel c%stomi'ar
%ma col%na em saparado, pois o DataGrid &e' t%do a%tomaticamente.
Entretanto, e.iste %ma maneira para traal6ar cada col%na e cada lin6a do
DataGrid com o %so do ta$ 0=ol%mns3. Uma &orma de &a'er isso é alterar a
propriedade A%toGenerate=ol%mns para Ealse !o padr"o é Tr%e#, para )%e voc:
mesmo possa inserir col%na por col%na no DataGrid, &ornecendo assim, as
in&ormações c%stomi'adas de s%a pre&er:ncia, de&inindo cada col%na do
DataGrid.
E.istem M tipos de =ol%nas do DataGrid@
Autor) Ale*a#dre Ma+edo (u,es P-.i#a $ de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
BoundColumn
Permite a inserç"o de %ma col%na diretamente vinc%lada a %m campo da
&onte de dados.
ButtonColumn
Permite a inserç"o de %ma col%na de disparo de evento, podendo este
evento estar vinc%lado a %m campo da &onte de dados.
EditCommandColumn
Permite a inserç"o de %m ot"o de comando para cada lin6a de %ma
col%na para coloc-Jla em modo de ediç"o.
HyperLinkColumn
Permite a inserç"o de %m linN para cada lin6a da col%na, mantendoJ
odiretamente vinc%lado a %m campo da &onte de dados.
TemplateColumn
Permite a inserç"o de %ma lin6a completamente c%stomi'ada em 4T52,
mantendoJovinc%lado a )%al)%er campo da &onte de dados.
(1S@ N"o 6- necessidade de colocar a vari-vel A%toGenerate=ol%mns como
Ealse para %tili'ar os itens de col%nas veri&icados acima> o )%e ocorreria é )%e
esses itens seriam adicionados, caso a opç"o de A%toGenerate=ol%mns &osse
Tr%e.
A se$%ir, analisemos %m e.emplo para cada tipo de col%na@
E.emplo 1o%nd=ol%mns
Neste e.emplo, vamos retirar a propriedade de a%toJ$eraç"o de campos do
DataGrid, e vamos criar, por en)%anto, todos os campos res$atados na )%er<
!para simpli&icar o traal6o vamos manter a p-$ina Simples.asp., emora seria
recomend-vel começar com o%tra p-$ina, para e&eito comparativo#@
Ar)%ivo Simples.asp. !completo#@
Autor) Ale*a#dre Ma+edo (u,es P-.i#a $7 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
<%@ Page language="c#" Codebehind="Simples.aspx.cs" AutoEventWireup="false"
Inherits="CoolDataGrid.Simples" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>Simples</title>
<meta content="Microsoft Visual Studio 7.0" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5"
name="vs_targetSchema">
<style>
.table { FONT: x-small Tahoma; COLOR: navy }
.tableItem { FONT: x-small Tahoma; COLOR: navy; BACKGROUND-COLOR: floralwhite }
.tableHeader { FONT: bold x-small Tahoma; COLOR: black; BACKGROUND-COLOR: darkseagreen }
.alternatingItem { FONT: x-small Tahoma; COLOR: navy; BACKGROUND-COLOR: silver }
</style>
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<asp:DataGrid id="DG_Simples" runat="server"
DataSource="<%# DS_Authors1 %>"
DataMember="authors"
CellPadding="2"
CellSpacing="2"
BorderStyle="Solid"
BorderWidth="2px"
GridLines="Horizontal"
BorderColor="DarkOliveGreen"
CssClass="tableitem"
PageSize="5"
AllowPaging="True"
OnPageIndexChanged="AlteraPage"
AllowSorting="True"
OnSortCommand="AlteraSort"
AutoGenerateColumns="False">
<AlternatingItemStyle CssClass="alternatingItem"></AlternatingItemStyle>
<HeaderStyle CssClass="tableHeader"></HeaderStyle>
<Columns>
<asp:BoundColumn Visible="False" DataField="au_id" HeaderText="au_id"></asp:BoundColumn>
<asp:BoundColumn DataField="au_fname" SortExpression="au_fname" HeaderText="First Name">
<HeaderStyle Width="100px"></HeaderStyle></asp:BoundColumn>
<asp:BoundColumn DataField="au_lname" SortExpression="au_lname" HeaderText="Last Name">
<HeaderStyle Width="100px"></HeaderStyle></asp:BoundColumn>
<asp:BoundColumn DataField="phone" HeaderText="Phone">
<HeaderStyle Width="80px"></HeaderStyle></asp:BoundColumn>
<asp:BoundColumn DataField="address" HeaderText="Address">
Autor) Ale*a#dre Ma+edo (u,es P-.i#a $8 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
<HeaderStyle Width="100px"></HeaderStyle></asp:BoundColumn>
<asp:BoundColumn DataField="city" HeaderText="City">
<HeaderStyle Width="60px"></HeaderStyle></asp:BoundColumn>
<asp:BoundColumn DataField="state" SortExpression="state" HeaderText="State">
<HeaderStyle Width="60px"></HeaderStyle></asp:BoundColumn>
<asp:BoundColumn DataField="zip" HeaderText="Zip">
<HeaderStyle Width="30px"></HeaderStyle></asp:BoundColumn>
<asp:BoundColumn DataField="contract" HeaderText="Contract">
<HeaderStyle Width="30px"></HeaderStyle></asp:BoundColumn>
</Columns>
<PagerStyle Position="TopAndBottom" PageButtonCount="3"
Mode="NumericPages"></PagerStyle>
</asp:DataGrid>
</form>
</body>
</HTML>
Ar)%ivo Simples.asp..cs !NS( se Altera#.
(1S@ é poss*vel inserir diretamente a parte =ol%mns do ar)%ivo asp., de &orma
man%al, o% %tili'ar o pr7prio ;DE do 8S.NET para &a'er a tare&a vis%almente,
astando, para isso, selecionar o DataGrid em modo Desi$n e clicar em
=ollections da propriedade =ol%mns. Aparecer- %ma /anela de con&i$%raç"o de
col%nas na )%al ser- poss*vel inserir todos os campos, a%tomaticamente, o%
con&i$%rar %m a %m. Em se$%ida, ser- poss*vel con&i$%rar cada item da seleç"o
!ve/a ima$em aai.o com %m dos itens selecionados#. Esta opç"o é m%ito
poderosa no )%e di' respeito I velocidade de pro$ramaç"o e até mesmo ao
controle de )%alidade, pois a c6ance de se errar %m c7di$o, ao escrev:Jlo é
m%ito maior do )%e se o ;DE &i'er t%do a%tomaticamente.
Autor) Ale*a#dre Ma+edo (u,es P-.i#a $/ de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
Autor) Ale*a#dre Ma+edo (u,es P-.i#a $9 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
8e/a o res%ltado@
Podemos oservar )%e e.iste %ma série de con&i$%rações. Entre elas, podemos
citar@
Visible
5ostra o% n"o a col%na !m%ito útil com campos de c6ave prim-ria, pois,
emora n"o precisem aparecer, eles tem )%e ser arma'enados nas
lin6as#.
SortExpression
E.press"o )%e ser- enviada ao o/eto de event6andler )%e ser-
disparado )%ando da ordenaç"o !pode ser )%al)%er campo da &onte de
dados, n"o 6avendo necessidade de ser o campo da col%na propriamente
dito#.
ead!nly
De&ine a col%na como n"oJedit-vel !%tili'ada )%ando a lin6a é colocada
em modo de ediç"o dei.ando esta col%na como Fead(nl<. Este t7pico
ser- aordado mais adiante, em detal6es#.
HeaderText e HeaderImage
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 10 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
De&ine a apresentaç"o )%e ser- dada ao caeçal6o da col%na.
FooterText
;dem ao anterior, s7 )%e no rodapé !apenas )%ando o rodapé
estivervis*vel, pois o padr"o é Ealse#.
"ataFormatingExpression
Utili'ado para &ormatar campos com tipos préJde&inidos, como, por
e.emplo, %m valor em &ormato =%rrenc<.
Tamém é poss*vel de&inir as col%nas para )%e elas apareçam somente em
tempo de e.ec%ç"o, emora isso n"o compense, em matéria de per&ormance,
valendo apenas em e.emplos com col%nas ainda c%stomi'adas, como veremos
mais adiante.
(1S@ Ainda para o 1o%nd=ol%mn !mas vale para AUA2AUEF col%na#, e.iste
tamém a propriedade Tidt6 de cada col%na !tamém acessada pela
=olllections# Esta opç"o pode i$%almente ser encontrada )%ando da de&iniç"o
das col%nas, selecionando o item Eormat e n"o =ol%mns I es)%erda da /anela
!ve/a &i$%ra aai.o#@
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 11 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
E.emplo Edit=ommand=ol%mn, 1%tton=ol%mn e 4<per2<nN=ol%mn
Neste e.emplo, vamos inserir K novas col%nas. =ada %ma ir- %tili'ar os tr:s
tipos de otões acima.
Para a col%na Edit=ommand=ol%mn, as propriedades importantes s"o@
1%ttonT<pe U De&ine o tipo de ot"o>
4eaderTe.t U De&ine o te.to do caeçal6o>
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 1$ de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
EditTe.t U De&ine o te.to )%e ir- disparar a ediç"o da lin6a !método
de&inido na propriedade (nEdit=ommand do DataGrid#>
UpdateTe.t U De&ine o te.to )%e ir- disparar a at%ali'aç"o da lin6a
!método de&inido na propriedade (nUpdate=ommand do DataGrid#>
=ancelTe.t U De&ine o te.to )%e ir- disparar o cancelamento da ediç"o da
lin6a !método de&inido na propriedade (n=ancel=ommand do DataGrid#>
Para a col%na 1%tton=ol%mn, as propriedades importantes s"o@
4eaderTe.t U De&ine o te.to do caeçal6o>
Te.t U De&ine o te.to )%e aparecer- em todas as lin6as da col%na>
=ommandName U De&ine o comando a ser disparado>
Para a col%na 4<per2inN=ol%mn, as propriedades importantes s"o@
4eaderTe.t U De&ine o te.to do caeçal6o>
Te.t U De&ine o te.to )%e aparecer- em todas as lin6as da col%na>
DataTe.tEield U De&ine o te.to )%e aparecer- em todas as lin6as da
col%na, aseado em %m campo da &onte de dados>
DataTe.tEormatStrin$ U De&ine o &ormato do te.to )%e aparecer- em
todas as lin6as da col%na, aseado na &ormataç"o de %m campo da &onte de
dados>
DataNavi$ateUrlEield U De&ine o campo da &onte de dados )%e servir-
para ser %tili'ado como parOmetro de %m linN de&inido na propriedade
DataNavi$ateUrlEormatStrin$>
DataNavi$ateUrlEormatStrin$ U De&ine o 2inN DinOmico )%e deve ser
disparado pela lin6a, aseado em %m campo da &onte de dados de&inido no
campo DataNavi$ateUrlEield>
Tar$et U De&ine elemento Tar$et !4T52# )%e deve ser o &oco do linN>
Navi$ateUrl U De&ine o 2inN Est-tico )%e deve ser nave$ado ao clicar em
)%al)%er lin6a>
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 11 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
(1S@
L# Para o te.to a ser in&ormado, é poss*vel %tili'ar %m tr%)%e@ para )%e se/a
colocada %ma ima$em no l%$ar de te.to, asta &ornecer a ta$ ;5G do
4T52 como te.to, como se esse te.to &osse a ima$em, de &orma )%e ela
ser- processada normalmente !ve/a esse rec%rso no e.emplo aai.o#.
B# ( pro$ramador n"o precisa de&inir )%em dispara o )%e no DataGrid, pois
o ASP.NET &a' isto a%tomaticamente, astando apenas &ornecer o nome
das rotinas de tratamento nas propriedades do DataGrid !mostrado em
desta)%e no c7di$o da p-$ina de e.emplo aai.o#.
Ar)%ivo Simples.asp. !somente o ta$ DataGrid#@
<asp:DataGrid id="DG_Simples" runat="server"
DataSource="<%# DS_Authors1 %>"
DataMember="authors"
CellPadding="2"
CellSpacing="2"
BorderStyle="Solid"
BorderWidth="2px"
GridLines="Horizontal"
BorderColor="DarkOliveGreen"
CssClass="tableitem"
PageSize="5"
AllowPaging="True"
OnPageIndexChanged="AlteraPage"
AllowSorting="True"
OnSortCommand="AlteraSort"
AutoGenerateColumns="False"
OnDeleteCommand="DeletarGrid"
OnEditCommand="EditarGrid"
OnUpdateCommand="AtualizarGrid"
OnCancelCommand="CancelarGrid">
<AlternatingItemStyle CssClass="alternatingItem"></AlternatingItemStyle>
<HeaderStyle CssClass="tableHeader"></HeaderStyle>
<Columns>
<asp:BoundColumn Visible="False" DataField="au_id" ReadOnly="True"
HeaderText="au_id"></asp:BoundColumn>
<asp:BoundColumn DataField="au_fname" SortExpression="au_fname" ReadOnly="True"
HeaderText="First Name"></asp:BoundColumn>
<asp:BoundColumn DataField="au_lname" SortExpression="au_lname" ReadOnly="True"
HeaderText="Last Name"></asp:BoundColumn>
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 16 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
<asp:BoundColumn DataField="phone" HeaderText="Phone"></asp:BoundColumn>
<asp:BoundColumn DataField="address" HeaderText="Address"></asp:BoundColumn>
<asp:BoundColumn DataField="city" HeaderText="City"></asp:BoundColumn>
<asp:BoundColumn DataField="state" SortExpression="state"
HeaderText="State"></asp:BoundColumn>
<asp:BoundColumn DataField="zip" HeaderText="Zip"></asp:BoundColumn>
<asp:BoundColumn DataField="contract" ReadOnly="True"
HeaderText="Contract"></asp:BoundColumn>
<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="Atualizar"
HeaderText="Editar Registro" CancelText="Cancelar"
EditText="Editar"></asp:EditCommandColumn>
<asp:ButtonColumn Text="Deletar" HeaderText="Comando"
CommandName="Delete"></asp:ButtonColumn>
<asp:HyperLinkColumn Text="&lt;IMG alt='Navega pelo ID do Registro' border='0'
src='Navega.jpg'&gt;" Target="_top" DataNavigateUrlField="au_id"
DataNavigateUrlFormatString="resultado.aspx?AU_ID={0}" HeaderText="Navega pelo
ID"></asp:HyperLinkColumn>
</Columns>
<PagerStyle Position="TopAndBottom" PageButtonCount="3" Mode="NumericPages"></PagerStyle>
</asp:DataGrid>
Ar)%ivo Simples.asp..cs !somente os novos métodos#@
protected void EditarGrid(Object sender, DataGridCommandEventArgs e)
{
Response.Write("Você apertou o botão de Editar!");
//define a linha clicada em modo de edição
DG_Simples.EditItemIndex=e.Item.ItemIndex;
//remonta a tela
BindData();
}
protected void AtualizarGrid(Object sender, DataGridCommandEventArgs e)
{
Response.Write("Você apertou o botão de Atualizar!");
//define nenhuma linha em modo de edição
DG_Simples.EditItemIndex=-1;
//após a rotina e atualização que estaria aqui remonta atela
BindData();
}
protected void DeletarGrid(Object sender, DataGridCommandEventArgs e)
{
//escreve na tela o Id do item a deletar
Response.Write("Você apertou o botão de Deletar o Registro de au_id = '" +
e.Item.Cells[0].Text + "'");
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 1 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
//após a rotina e exclusão que estaria aqui remontaria a tela
BindData();
}
protected void CancelarGrid(Object sender, DataGridCommandEventArgs e)
{
Response.Write("Você apertou o botão de Cancelar!");
//define nenhuma linha em modo de edição
DG_Simples.EditItemIndex=-1;
//após a rotina e cancelamento que estaria aqui remonta a tela
BindData();
}
8e/a os Fes%ltados@
Ao clicar em editar@
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 17 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
Ao clicar em deletar@
Ao clicar em Nave$ar !a)%i, é disparada %ma se$%nda p-$ina Fes%ltado.asp.,
c%/o c7di$o est- a se$%ir#@
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 18 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
E.emplo do ;temTemplate=ol%mn
1em, até a$ora, p%demos ver o )%anto o DataGrid é poderoso. Entretanto, 6-
%m o%tro rec%rso do DataGrid )%e ir- permitir )%e voc: &aça TUD( o )%e
ima$inar@ esse rec%rso é o ;temTemplate. Pelo conceito do ;temTemplate voc:
poder- montar a col%na em c7di$o 4T52, da &orma )%e )%iser. Tomemos, por
e.emplo, as col%nas de endereço, cidade, estado e =EP do e.emplo anterior e
vamos coloc-Jlos na mesma col%na, n%ma &ormataç"o )%e a trans&orme em
%ma eti)%eta de malaJdireta@
=7di$o Simples.asp. !apenas para o ta$ ;temTemplate inserido no l%$ar das
col%nas dos campos citados acima#@
<Columns>
<asp:BoundColumn Visible="False" DataField="au_id" ReadOnly="True"
HeaderText="au_id"></asp:BoundColumn>
<asp:BoundColumn DataField="au_fname" SortExpression="au_fname" ReadOnly="True"
HeaderText="First Name"></asp:BoundColumn>
<asp:BoundColumn DataField="au_lname" SortExpression="au_lname" ReadOnly="True"
HeaderText="Last Name"></asp:BoundColumn>
<asp:BoundColumn DataField="phone" HeaderText="Phone"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="Endereço" SortExpression="city">
<ItemTemplate>
<table class="table" cellpadding="0" cellspacing="0" border="0">
<tr align="justify">
<td align="left"><%# DataBinder.Eval(Container.DataItem,
"address") %>
</td>
</tr>
<tr align="justify">
<td align="left"><%# DataBinder.Eval(Container.DataItem,
"city") %>
</td>
</tr>
<tr align="justify">
<td align="left"><%# DataBinder.Eval(Container.DataItem,
"state") %>
</td>
<td align="right"><%# DataBinder.Eval(Container.DataItem,
"zip") %>
</td>
</tr>
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 1/ de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
</table>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="contract" ReadOnly="True"
HeaderText="Contract"></asp:BoundColumn>
<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="Atualizar" HeaderText="Editar
Registro" CancelText="Cancelar" EditText="Editar"></asp:EditCommandColumn>
<asp:ButtonColumn Text="Deletar" HeaderText="Comando"
CommandName="Delete"></asp:ButtonColumn>
<asp:HyperLinkColumn Text="&lt;IMG alt='Navega pelo ID do Registro' border='0'
src='Navega.jpg'&gt;" Target="_top" DataNavigateUrlField="au_id"
DataNavigateUrlFormatString="resultado.aspx?AU_ID={0}" HeaderText="Navega pelo
ID"></asp:HyperLinkColumn>
</Columns>
=7di$o Simples.asp..cs !NS( se altera#.
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 19 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
8e/a o res%ltado@
Fepare )%e o acesso aos campos se de% através da cl-%s%la@
DataBinder.Eval(Container.DataItem, "address")
Ar)%ivo Fes%ltado.asp.
<%@ Page language="c#" Codebehind="Resultado.aspx.cs" AutoEventWireup="false"
Inherits="CoolDataGrid.Resultado" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>Resultado</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema"
content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 60 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
<body MS_POSITIONING="GridLayout">
<form id="Resultado" method="post" runat="server">
<asp:Button id="Button1" style="Z-INDEX: 101; LEFT: 199px;
POSITION: absolute; TOP: 69px" runat="server" Text="Voltar"></asp:Button>
</form>
</body>
</HTML>
Ar)%ivo Fes%ltado.asp..cs !SE5 a parte a%tom-tica $erada pelo 8S.NET#
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;
namespace CoolDataGrid
{
public class Resultado : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button1;
private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
Response.Write("Voce Selecionou a Linha de ID = '" +
Request.Params["AU_ID"] + "'");
}
}
}
T%do até a$ora &oi &eito, tomandoJse em consideraç"o a monta$em dos campos
de &orma est-tica, o% se/a, antes da p-$ina ser renderi'ada. 5as a$ora é )%e
vem a p- de cal, pois os ;temTemplates podem ser alimentados de &orma
dinOmica, com AUA2AUEF controle da we.
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 61 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
8amos s%por )%e no e.emplo %tili'ado até a$ora &osse interessante para cada
lin6a apresentar os t*t%los de cada a%tor, com %m DataGrid DENTF( do
DataGrid principal. Este e.emplo ser- analisado no pr7.imo item.
%sa#do o Co#+eito de Master!Detail DataGrid
Para )%e este conceito possa ser %tili'ado, tomemos %ma col%na do tipo
;temTemplate e vamos aliment-Jla em tempo de e.ec%ç"o. Para isso, iremos
apenas inserir %ma nova col%na ;tem Template )%e n"o conten6a nen6%ma
in&ormaç"o , e vamos traal6ar o evento (n1o%nd;tem do DataGrid no c7di$o
)%e se encontra por tr-s da p-$ina !&a'endo re&er:ncia ao método nas
propriedades do DataGrid#@
Ar)%ivo Simples.asp. !somente DataGrid#@
<asp:datagrid id=DG_Simples runat="server"
DataMember="authors"
DataSource="<%# DS_Authors1 %>"
CellPadding="2"
CellSpacing="2"
BorderStyle="Solid"
BorderWidth="2px"
GridLines="Horizontal"
BorderColor="DarkOliveGreen"
CssClass="tableitem"
PageSize="5"
AllowPaging="True"
OnPageIndexChanged="AlteraPage"
AllowSorting="True"
OnSortCommand="AlteraSort"
AutoGenerateColumns="False"
OnCancelCommand="CancelarGrid"
OnUpdateCommand="AtualizarGrid"
OnEditCommand="EditarGrid"
OnItemDataBound="MontaLinha">
<AlternatingItemStyle CssClass="alternatingItem"></AlternatingItemStyle>
<HeaderStyle CssClass="tableHeader"></HeaderStyle>
<Columns>
<asp:BoundColumn Visible="False" DataField="au_id" ReadOnly="True"
HeaderText="au_id"></asp:BoundColumn>
<asp:BoundColumn DataField="au_fname" SortExpression="au_fname" ReadOnly="True"
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 6$ de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
HeaderText="First Name"></asp:BoundColumn>
<asp:BoundColumn DataField="au_lname" SortExpression="au_lname" ReadOnly="True"
HeaderText="Last Name"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="Endereço" SortExpression="city">
<ItemTemplate>
<table class="table" cellpadding="0" cellspacing="0" border="0">
<tr align="justify">
<td align="left"><%#
DataBinder.Eval(Container.DataItem, "address") %>
</td>
</tr>
<tr align="justify">
<td align="left"><%#
DataBinder.Eval(Container.DataItem, "city") %>
</td>
</tr>
<tr align="justify">
<td align="left"><%#
DataBinder.Eval(Container.DataItem, "state") %>
</td>
<td align="right"><%#
DataBinder.Eval(Container.DataItem, "zip") %>
</td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Títulos deste Autor">
</asp:TemplateColumn>
<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="Atualizar"
HeaderText="Editar Registro" CancelText="Cancelar"
EditText="Editar"></asp:EditCommandColumn>
<asp:HyperLinkColumn Text="&lt;IMG alt='Navega pelo ID do Registro' border='0'
src='Navega.jpg'&gt;" Target="_top" DataNavigateUrlField="au_id"
DataNavigateUrlFormatString="resultado.aspx?AU_ID={0}" HeaderText="Navega pelo
ID"></asp:HyperLinkColumn>
</Columns>
<PagerStyle Position="TopAndBottom" PageButtonCount="3" Mode="NumericPages"></PagerStyle>
</asp:datagrid>
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 61 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
Ar)%ivo Simples.asp..cs !somente o método 5onta2in6a#@
protected void MontaLinha(Object sender, DataGridItemEventArgs e)
{
//Verifica que tipo de linha está sendo criada
//pois queremos que rode somente em linhas Item e Alternating Item
// e não em Header e Footer
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==
ListItemType.AlternatingItem)
{
//cria um string auxiliar para montar a query
string strAux;
//Cria um novo objeto DataGrid para ser inserido
DataGrid TitulosGrid = new DataGrid();
//Formata o novo DataGrid.
TitulosGrid.BorderWidth = (Unit)1;
TitulosGrid.CellPadding = 4;
TitulosGrid.CellSpacing = 2;
TitulosGrid.GridLines = GridLines.Horizontal;
TitulosGrid.Font.Name = "Tahoma";
TitulosGrid.Font.Size = FontUnit.XSmall;
TitulosGrid.BorderColor = Color.FromName("Gray");
TitulosGrid.ItemStyle.BackColor = Color.FromName("HoneyDew");
TitulosGrid.ItemStyle.ForeColor = Color.FromName("DarkRed");
TitulosGrid.ShowHeader = true;
TitulosGrid.HeaderStyle.BackColor = Color.FromName("LightSteelBlue");
TitulosGrid.HeaderStyle.ForeColor = Color.FromName("DarkRed");
TitulosGrid.HeaderStyle.Font.Bold = true;
//Marca para não gerar automaticamente as colunas
TitulosGrid.AutoGenerateColumns = false;
//Adiciona as colunas da grid//
//Id do titulo//
BoundColumn bc = new BoundColumn();
//Configura os valores desta BoundColumn
bc.HeaderText = "ID do Título";
bc.DataField = "Id";
bc.ItemStyle.Wrap = false;
bc.Visible=false;
//Adiciona esta coluna a DataGrid.
TitulosGrid.Columns.Add(bc);
//Título//
bc = new BoundColumn();
bc.HeaderText = "Título";
bc.DataField = "Titulo";
bc.ItemStyle.Wrap = false;
TitulosGrid.Columns.Add(bc);
//Tipo do Título//
bc = new BoundColumn();
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 66 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
bc.HeaderText = "Tipo do Título";
bc.DataField = "Tipo";
bc.ItemStyle.Wrap = false;
TitulosGrid.Columns.Add(bc);
//Valor Recebido em formato Currency//
bc = new BoundColumn();
bc.HeaderText = "$ Recebido";
bc.DataField = "Earned";
bc.DataFormatString="{0:c}";
bc.ItemStyle.Wrap = false;
TitulosGrid.Columns.Add(bc);
//Fim das Colunas//
//Cria os novos objetos de Banco de dados para criação do DataReader para
alimentar
// esta DataGrid
//objeto connection PODE SER O MESMO QUE O ANTERIOR
//objeto command NÃO PODE SER O MESMO QUE O ANTERIOR (LEMBRAR QUE A CONEXAO
ESTA ABERTA
//cria o comando de acordo com o ID da linha
//verifica antes se a conexão está aberta, senão abre
if (sqlConnection1.State == ConnectionState.Closed)
{
sqlConnection1.Open();
}
strAux = strSQL2 + " WHERE authors.au_id = '" + e.Item.Cells[0].Text + "'";
System.Data.SqlClient.SqlCommand sqlComd2 = new
System.Data.SqlClient.SqlCommand(strAux,sqlConnection1);
//cria um objeto DataReader para executar o Reader
System.Data.SqlClient.SqlDataReader sqlDR;
//executa o comando para o reader
sqlDR = sqlComd2.ExecuteReader();
//preenche o DataGrid com o Reader
TitulosGrid.DataSource = sqlDR;
TitulosGrid.DataBind();
//Fecha a conexão - LEMBRAR DE FECHAR SEMPRE QUE UTILIZAR DATAREADER
sqlConnection1.Close();
//Adiciona este DataGrid ao DataGrid Original na coluna Template vazia.
//lembrar que o índice começa de 0
e.Item.Cells[4].Controls.Add(TitulosGrid);
}
}
8e/a o res%ltado@
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 6 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 67 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
A$ora vamos aos coment-rios@
L# Nada impede )%e se/a inserido mais de %m controle na mesma col%na
Template=ol%mn>
B# Nada impede )%e em %ma col%na de )%al)%er tipo !n"o somente a
Template=ol%mn#, possa receer %m novo controle !ve/a esta opç"o por
e.emplo com a alteraç"o do número da col%na na lista$em acima,
tomando apenas o c%idado de n"o colocar %m número &ora do escopo,
)%e é de 'ero até o número m-.imo de col%nas menos %m#. Além disto, a
inserç"o de controles, pode ser &eita com )%al)%er controle !n"o
necessariamente %m DataGrid como %tili'amos# e pode tamém ser mais
de %m controle !%m DataGrid, e %m 4<per2inN 1%tton por e.emplo#.
K# (s e.emplos acima &oram meramente il%strativos, e n"o receeram
nen6%m tratamento de erros. Este n"o é o mel6or procedimento. Uma
aplicaç"o pro&issional dever- sempre passar por %m om tratamento de
erros.
V# Na lista$em acima, &oi &eita a veri&icaç"o do estado da cone."o, pois
reparem )%e ela &oi &ec6ada antes )%e a rotina Data1ind tivesse sido
c6amada. 5as, se a rotina &osse c6amada ap7s a cone."o a lista$em
estaria aerta e n"o 6averia necessidade de ariJla novamente. 5antive
este e.emplo apenas para il%strar )%e toda atenç"o deve ser dedicada Is
cone.ões com o 1anco de Dados )%e s"o verdadeiros $ar$alos de
mem7ria em aplicações we>
M# Nada impediria, tamém, )%e se criasse %m novo Template=ol%mn
dentro do novo DataGrid, o% mesmo )%e se criasse %ma col%na de o%tro
tipo como 1%tton, 4<perl;nN, etc.
( último t7pico do o/eto DataGrid, a se$%ir, tratar- sore a criaç"o de %ma
pa$inaç"o e ordenaç"o c%stomi'adas.
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 68 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
%sa#do a &rde#a23o e a Pa.i#a23o Custo4i,adas #o DataGrid
W- mencionamos os lados positivos da pa$inaç"o e ordenaç"o do DataGrid. De
&ato, a pa$inaç"o e ordenaç"o s"o rec%rsos m%ito ons, desde )%e o
pro$ramador n"o se encontre em %ma sit%aç"o e.trema, na )%al ele ten6a
m%itos re$istros em %ma %sca o% em %ma taela, o% )%ando as )%eries s"o
astante comple.as. Nos casos e.tremos !m%ito com%ns, na verdade# a
pa$inaç"o e ordenaç"o n"o atendem Is e.pectativas, pois esses dois rec%rsos
sempre ir"o &a'er a %sca de T(D(S os dados da &onte de dados, &a'endo
apenas a &iltra$em a%tom-tica da)%ilo )%e &or mostrado.
N%ma aplicaç"o pro&issional recomendaJse %tili'ar o conceito de pa$inaç"o
c%stomi'ada, previsto pelo pr7prio DataGrid, através da propriedade
Allow=%stomPa$in$, )%e, como padr"o, é Ealse.
Primeiramente, vamos de&inir esta propriedade como Tr%e. Em se$%ida, vamos
criar os elementos adicionais da p-$ina )%e ir"o tratar da pa$inaç"o )%e, neste
caso, s"o os otões adicionais.
( conceito )%e se econtra por tr-s da pa$inaç"o é o de %ma Stored Proced%re
+Especial, )%e ir- &a'er todo o traal6o de ordenaç"o e pa$inaç"o no SA2,
retornando apenas os re$istros dese/ados de &orma a ma.imi'ar a per&ormance
da aplicaç"o. Este t%torial n"o tem o prop7sito de e.plicar TJSA2, portanto, no
e.emplo )%e se se$%e, ser- apenas apresentado o c7di$o da Stored Proced%re.
!(serve )%e o script &a' a veri&icaç"o da e.ist:ncia da Stored Proced%re antes
de cri-Jla. Entretanto, essa parte n"o é ori$at7ria.#
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[spPaginacao]') and
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 6/ de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[spPaginacao]
GO
CREATE PROCEDURE spPaginacao
@SQL VARCHAR(4000),
@PAGE INT,
@PAGESIZE INT,
@ORDER VARCHAR(255) = ' ',
@TIPOORDER VARCHAR(4) = 'ASC',
@ROWS_TOTAL INT OUT,
@INT_ERRO INT OUT
WITH RECOMPILE /* Esta cláusula é para garantir que seja o melhor desempenho */
AS
BEGIN
DECLARE @START_ROW INT /* LINHA DE INICIO */
DECLARE @ROWS_REQUIRED INT /* LINHAS REQUERIDAS */
DECLARE @TOTAL INT /* TOTAL DE LINHAS */
DECLARE @PARAMETERS NVARCHAR(255) /* AUXILIAR PARA GUARDAR PARÂMETRO */
DECLARE @EXECSQL NVARCHAR(4000) /* AUXILIAR PARA GUARDAR COMANDO SQL */
DECLARE @ORDEM1 NVARCHAR(4) /* AUXILIAR PARA GUARDAR A ORDENAÇAO PRIMEIRA E
TERCEIRA */
DECLARE @ORDEM2 NVARCHAR(4) /* AUXILIAR PARA GUARDAR A ORDENAÇAO SEGUNDA */
DECLARE @TEMP_NUMREG INT /* AUXILIAR PARA GUARDAR A NÚMERO DE REGISTROS
TEMPORÁRIOS */
DECLARE @TEMP_ULTPAG INT /* AUXILIAR PARA GUARDAR A ÚLTIMA PÁGINA POSSIVEL */
DECLARE @TEMP_REGULTPAG INT /* AUXILIAR PARA GUARDAR O NÚMERO DE REGISTROS DA
ÚLTIMA PÁGINA POSSIVEL */
/* **** CALCULA A LINHA DE INICIO E O NÚMERO DE LINHAS NECESSÁRIAS **** */
SET @START_ROW = (@PAGESIZE * (@PAGE - 1)) + 1
SET @ROWS_REQUIRED = @PAGESIZE
/* CALCULA O TOTAL DE REGISTROS **** */
SET @EXECSQL = N'SELECT @TOT=COUNT(*) FROM (' + @SQL + ') AS AUX'
SET @PARAMETERS =N'@TOT INT OUTPUT'
EXEC SP_EXECUTESQL @EXECSQL,@PARAMETERS,@TOT=@TOTAL OUTPUT
/* VERIFICA SE O NÚMERO DA PÁGINA É VIÁVEL **** */
IF (@TOTAL <=0)
BEGIN /* NÃO RETORNOU NENHUMA LINHA */
SET @ROWS_TOTAL = 0
SET @INT_ERRO = 0
END
ELSE
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 69 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
BEGIN
IF (@START_ROW > @TOTAL)
BEGIN /* A PÁGINA É MAIOR QUE O TOTAL */
SET @ROWS_TOTAL = 0
SET @INT_ERRO = -1
END
ELSE /* PODE RODAR O PROCEDIMENTO */
BEGIN
SET @ROWS_TOTAL=@TOTAL
SET @TEMP_ULTPAG = (FLOOR(@TOTAL/@PAGESIZE))+1
SET @TEMP_REGULTPAG = @TOTAL-(@PAGESIZE*(@TEMP_ULTPAG-1))
IF @PAGE = 0
BEGIN /* RETORNA TODA A TABELA */
SET @EXECSQL = N'SELECT * FROM (' + @SQL + ') AS AUX'
IF @ORDER <> ' '
BEGIN
SET @EXECSQL = @EXECSQL + ' ORDER BY ' + @ORDER + ' '
+ @TIPOORDER
END
END
ELSE /* RETORNA SOMENTE A PÁGINA DESEJADA */
BEGIN
IF @TIPOORDER = 'ASC'
BEGIN
SET @ORDEM1 = 'ASC'
SET @ORDEM2 = 'DESC'
END
ELSE
BEGIN
SET @ORDEM1 = 'DESC'
SET @ORDEM2 = 'ASC'
END
SET @TEMP_NUMREG = @PAGESIZE * @PAGE
SET @EXECSQL = N'SELECT TOP ' + cast(@TEMP_NUMREG as varchar(255)) + ' *
INTO #T1 FROM (' + @SQL + ') AS AUX ORDER BY ' + @ORDER + ' ' + @ORDEM1
IF ((@PAGE > 1) AND (@PAGE < @TEMP_ULTPAG))
BEGIN
SET @TEMP_NUMREG = @PAGESIZE
SET @EXECSQL = @EXECSQL + ' SELECT TOP ' +
cast(@TEMP_NUMREG as varchar(255)) + ' * INTO #T2 FROM #T1 ORDER BY ' + @ORDER + ' ' +
@ORDEM2
SET @EXECSQL = @EXECSQL + ' SELECT * FROM #T2 ORDER
BY ' + @ORDER + ' ' + @ORDEM1
END
ELSE
BEGIN
IF @PAGE = @TEMP_ULTPAG
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 0 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
BEGIN
SET @TEMP_NUMREG = @TEMP_REGULTPAG
SET @EXECSQL = @EXECSQL + ' SELECT TOP ' +
cast(@TEMP_NUMREG as varchar(255)) + ' * INTO #T2 FROM #T1 ORDER BY ' + @ORDER + ' ' +
@ORDEM2
SET @EXECSQL = @EXECSQL + ' SELECT * FROM #T2 ORDER
BY ' + @ORDER + ' ' + @ORDEM1
END
ELSE
BEGIN
SET @EXECSQL = @EXECSQL + ' SELECT * FROM #T1 ORDER
BY ' + @ORDER + ' ' + @ORDEM1
END
END
END
EXEC SP_EXECUTESQL @EXECSQL
IF @@ERROR = 0
BEGIN
SET @INT_ERRO = 0
END
ELSE
BEGIN
SET @INT_ERRO = -2
END
END
END
END
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
Esta Stored Proced%re deve estar na taela do sistema )%e se dese/a %tili'ar.
No nosso caso, adicionamos a mesma na taela P%s do SA2 Server. ( mais
importante s"o os parOmetros )%e ela %tili'a@
XSA2 8AF=4AF!VCCC# U ;nstr%ç"o SA2 )%e ser- %tili'ada na
)%er<>
XPAGE ;NT U Número da P-$ina !devendo estar
entre L e o número total de p-$inas, caso contr-rio retornar- erro>
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 1 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
XPAGES;YE ;NT U Número de P-$inas>
X(FDEF 8AF=4AF!BMM# Q Z Z U =ampo %tili'ado na ordenaç"o>
XT;P((FDEF 8AF=4AF!V# Q ZAS=Z U Tipo de (rdenaç"o !AS= o%
DES=#>
XF(TS[T(TA2 ;NT (UT U Sa*da com o Total de 2in6as>
X;NT[EFF( ;NT (UT U Sa*da com Fetorno de S%cesso !C# o%
Erro !03 C#>
Autor) Ale*a#dre Ma+edo (u,es P-.i#a $ de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
Para avaliarmos o potencial deste procedimento, asta implementar a nova
p-$ina 5asterDetail.asp. )%e %tili'a esta Stored Proced%re e os novos otões
para a nave$aç"o c%stomi'ada. Apenas a t*t%lo de in&ormaç"o, %tili'ei tamém
dois controles 2ael para identi&icar as p-$inas. 8e/a o c7di$o da p-$ina a
se$%ir@
5asterDetail.asp.@
<%@ Page language="c#" Codebehind="MasterDetail.aspx.cs" AutoEventWireup="false"
Inherits="CoolDataGrid.MasterDetail" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>MasterDetail</title>
<meta content="Microsoft Visual Studio 7.0" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5"
name="vs_targetSchema">
<style>
.table { FONT: x-small Tahoma; COLOR: navy }
.tableItem { FONT: x-small Tahoma; COLOR: navy; BACKGROUND-COLOR: floralwhite }
.tableHeader { FONT: bold x-small Tahoma; COLOR: black; BACKGROUND-COLOR:
darkseagreen }
.alternatingItem { FONT: x-small Tahoma; COLOR: navy; BACKGROUND-COLOR: silver }
</style>
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<TABLE id="Tbl_Grid" cellSpacing="0" cellPadding="4" width="1000" border="0"
style="LEFT: 0px; POSITION: absolute; TOP: 10px">
<TR>
<TD align="left" width="500" colSpan="2">
<asp:label id="Lbl_Registros" runat="server" CssClass="Table"></asp:label>
</TD>
<TD align="right" width="500" colSpan="2">
<asp:label id="Label1" runat="server" CssClass="Table">Página </asp:label>
<asp:label id="Lbl_Pagina_Atual" runat="server" CssClass="Table"></asp:label>
<asp:label id="Label3" runat="server" CssClass="Table"> de </asp:label>
<asp:label id="Lbl_Pagina_Final" runat="server" CssClass="Table"></asp:label>
</TD>
</TR>
<TR>
<TD align="middle" width="1000" colSpan="4">
<asp:datagrid id="DG_MasterDetail" runat="server" OnItemDataBound="MontaLinha"
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 1 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
AutoGenerateColumns="False" OnSortCommand="AlteraSort" AllowSorting="True"
AllowPaging="True" PageSize="5" CssClass="tableitem" BorderColor="DarkOliveGreen"
GridLines="Horizontal" BorderWidth="2px" BorderStyle="Solid" CellSpacing="2"
CellPadding="2" Width="980px" AllowCustomPaging="True" PagerStyle-Visible="False">
<AlternatingItemStyle CssClass="alternatingItem"></AlternatingItemStyle>
<HeaderStyle CssClass="tableHeader"></HeaderStyle>
<Columns>
<asp:BoundColumn Visible="False" DataField="au_id" ReadOnly="True"
HeaderText="au_id"></asp:BoundColumn>
<asp:BoundColumn DataField="au_fname" SortExpression="au_fname"
ReadOnly="True" HeaderText="First Name"></asp:BoundColumn>
<asp:BoundColumn DataField="au_lname" SortExpression="au_lname"
ReadOnly="True" HeaderText="Last Name"></asp:BoundColumn>
<asp:TemplateColumn SortExpression="city"
HeaderText="Endere&#231;o">
<ItemTemplate>
<table class="table" cellpadding="0" cellspacing="0" border="0">
<tr align="justify">
<td align="left"><%# DataBinder.Eval(Container.DataItem,
"address") %></td>
</tr>
<tr align="justify">
<td align="left"><%# DataBinder.Eval(Container.DataItem,
"city") %></td>
</tr>
<tr align="justify">
<td align="left"><%# DataBinder.Eval(Container.DataItem,
"state") %></td>
<td align="right"><%# DataBinder.Eval(Container.DataItem,
"zip") %></td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="T&#237;tulos deste
Autor"></asp:TemplateColumn>
<asp:HyperLinkColumn Text="&lt;IMG alt='Navega pelo ID do Registro'
border='0' src='Navega.jpg'&gt;" Target="_top" DataNavigateUrlField="au_id"
DataNavigateUrlFormatString="resultado.aspx?AU_ID={0}" HeaderText="Navega pelo
ID"></asp:HyperLinkColumn>
</Columns>
<PagerStyle Visible="False" Position="TopAndBottom" PageButtonCount="3"
Mode="NumericPages"></PagerStyle>
</asp:datagrid>
</TD>
</TR>
<TR>
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 6 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
<TD align="middle" width="250">
<asp:imagebutton id="Cmd_First" runat="server" CssClass="Table" ToolTip="Primeiro
Registro" AlternateText="Primeiro Registro" CommandName="First"
OnCommand="AlteraPagina" ImageUrl="First.jpg"></asp:imagebutton>
</TD>
<TD align="middle" width="250">
<asp:imagebutton id="Cmd_Previous" runat="server" CssClass="Table"
ToolTip="Registro Anterior" AlternateText="Registro Anterior"
CommandName="Previous" OnCommand="AlteraPagina"
ImageUrl="Previous.jpg"></asp:imagebutton>
</TD>
<TD align="middle" width="250">
<asp:imagebutton id="Cmd_Next" runat="server" CssClass="Table" ToolTip="Próximo
Registro" AlternateText="Próximo Registro" CommandName="Next"
OnCommand="AlteraPagina" ImageUrl="Next.jpg"></asp:imagebutton>
</TD>
<TD align="middle" width="250"><asp:imagebutton id="Cmd_Last"
runat="server" CssClass="Table" ToolTip="Último Registro" AlternateText="Último
Registro" CommandName="Last" OnCommand="AlteraPagina"
ImageUrl="Last.jpg"></asp:imagebutton>
</TD>
</TR>
</TABLE>
<asp:label id="Lbl_Order" runat="server" Visible="False"></asp:label>
<asp:label id="Lbl_Sql" runat="server" Visible="False"></asp:label>
</form>
</body>
</HTML>
5asterDetail.asp..cs !SE5 a parte $erada a%tomaticamente pelo 8S.NET#@
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 System.Data.SqlClient;
namespace CoolDataGrid
{
public class MasterDetail : System.Web.UI.Page
{
Autor) Ale*a#dre Ma+edo (u,es P-.i#a de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
protected System.Web.UI.WebControls.Label Lbl_Pagina_Final;
protected System.Web.UI.WebControls.Label Lbl_Registros;
protected System.Web.UI.WebControls.Label Lbl_Pagina_Atual;
protected System.Web.UI.WebControls.Label Label3;
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.DataGrid DG_MasterDetail;
protected System.Web.UI.WebControls.ImageButton Cmd_First;
protected System.Web.UI.WebControls.ImageButton Cmd_Previous;
protected System.Web.UI.WebControls.ImageButton Cmd_Next;
protected System.Web.UI.WebControls.ImageButton Cmd_Last;
protected System.Web.UI.WebControls.Label Lbl_Sql;
protected System.Web.UI.WebControls.Label Lbl_Order;
//tipos personalizados
protected SqlConnection sqlConn;
protected SqlCommand sqlCmd;
protected SqlDataReader sqlDR;
protected int Int_Cur_Page;
protected int Int_Tot_Page;
protected string strSQL = "SELECT au_id,au_fname,au_lname,city,address,state,zip FROM
authors";
protected string strSQL2 = "SELECT titles.title_id AS Id,titles.title AS Titulo,titles.type
AS Tipo,((price*ytd_sales*royalty)/100) AS Earned FROM titles INNER JOIN titleauthor ON
titles.title_id = titleauthor.title_id INNER JOIN authors ON titleauthor.au_id = authors.au_id";
private void Page_Load(object sender, System.EventArgs e)
{
// Roda se não for auto submit
if (! IsPostBack)
{
Int_Cur_Page=1;
//coloca os valores nas Labels para armazenar estado
Lbl_Pagina_Atual.Text=Int_Cur_Page.ToString();
Lbl_Order.Text="au_fname";
Lbl_Sql.Text=strSQL;
//monta a Grid
BindData();
}
}
private void BindData()
{
string Str_Saida="";
int int_aux;
decimal dec_aux;
//estabelece a conexão
sqlConn = new SqlConnection("Data Source=localhost;User ID=SA;Password=;Initial
Catalog=pubs");
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 7 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
sqlCmd = new SqlCommand();
sqlCmd.Connection=sqlConn;
Lbl_Registros.Text="";
//desta vez vamos colocar tratamento de erros
try
{
//define a stored procedure e seus parametros
sqlCmd.CommandText="spPaginacao";
sqlCmd.CommandType=CommandType.StoredProcedure;
//limpa apilha de parâmetros apenas para conforto (não é necessário)
sqlCmd.Parameters.Clear();
sqlCmd.Parameters.Add(new SqlParameter("@SQL",SqlDbType.VarChar,4000));
sqlCmd.Parameters["@SQL"].Value=Lbl_Sql.Text;
sqlCmd.Parameters.Add(new SqlParameter("@PAGE",SqlDbType.Int));
sqlCmd.Parameters["@PAGE"].Value=Int_Cur_Page;
sqlCmd.Parameters.Add(new SqlParameter("@PAGESIZE",SqlDbType.Int));
sqlCmd.Parameters["@PAGESIZE"].Value=DG_MasterDetail.PageSize;
sqlCmd.Parameters.Add(new SqlParameter("@ORDER",SqlDbType.VarChar,255));
sqlCmd.Parameters["@ORDER"].Value=Lbl_Order.Text;
sqlCmd.Parameters.Add(new SqlParameter("@TIPOORDER",SqlDbType.VarChar,4));
sqlCmd.Parameters["@TIPOORDER"].Value="ASC";
sqlCmd.Parameters.Add(new SqlParameter("@ROWS_TOTAL",SqlDbType.Int));
sqlCmd.Parameters["@ROWS_TOTAL"].Direction=ParameterDirection.Output;
sqlCmd.Parameters.Add(new SqlParameter("@INT_ERRO",SqlDbType.Int));
sqlCmd.Parameters["@INT_ERRO"].Direction=ParameterDirection.Output;
//abre a conexão com o banco de dados
sqlConn.Open();
//executa o reader
sqlDR=sqlCmd.ExecuteReader();
//atribui o reader a DataGrid
DG_MasterDetail.DataSource=sqlDR;
DG_MasterDetail.DataBind();
//fecha a conexão
sqlConn.Close();
//verifica se ocorreu algum erro com a query
if (((int)sqlCmd.Parameters["@INT_ERRO"].Value)==0)
{
//calcula o número total de páginas através do número de registros totais
int_aux = ((int)sqlCmd.Parameters["@ROWS_TOTAL"].Value);
dec_aux=(Decimal.Parse(int_aux.ToString()))/DG_MasterDetail.PageSize;
Int_Tot_Page=Int32.Parse(System.Math.Ceiling(Double.Parse(dec_aux.ToString())).ToString());
//preenche os Labels para armazenar o estado
Lbl_Pagina_Atual.Text=Int_Cur_Page.ToString();
Lbl_Pagina_Final.Text=Int_Tot_Page.ToString();
Lbl_Registros.Text = "Total de Registros: " + int_aux.ToString();
//verifica como apresentar os botões de acordo com a página que se
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 8 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
encontra
if (Int_Tot_Page==1)
{
Cmd_First.Visible=false;
Cmd_Next.Visible=false;
Cmd_Previous.Visible=false;
Cmd_Last.Visible=false;
}
else
{
if (Int_Cur_Page==1)
{
Cmd_First.Visible=false;
Cmd_Next.Visible=true;
Cmd_Previous.Visible=false;
Cmd_Last.Visible=true;
}
else
{
if (Int_Cur_Page==Int_Tot_Page)
{
Cmd_First.Visible=true;
Cmd_Next.Visible=false;
Cmd_Previous.Visible=true;
Cmd_Last.Visible=false;
}
else
{
Cmd_First.Visible=true;
Cmd_Next.Visible=true;
Cmd_Previous.Visible=true;
Cmd_Last.Visible=true;
}
}
}
}
else
{
Response.Write("Ocorreu um Erro com a procura!");
}
}
catch (SqlException e)
{
//trata do erro de banco de dados
for (int i=0; i<e.Errors.Count; i++)
{
Str_Saida+=e.Errors[i].Message.ToString() + "\n";
Autor) Ale*a#dre Ma+edo (u,es P-.i#a / de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
}
Response.Write("Ocorreu o seguinte erro com a conexão do banco de dados: \n"
+ Str_Saida);
}
catch (Exception er)
{
//trata o erro de página
Response.Write("Ocorreu o seguinte erro com a página: \n" + er.Message);
}
finally
{
//termina a execução
if (sqlConn.State==ConnectionState.Open)
{
sqlConn.Close();
}
}
}
public void AlteraPagina(Object sender, CommandEventArgs e)
{
//verifica que comando foi executado a partir do parâmetro CommandName dado aos
// ImageButtons e executa a montagem da página de acordo
switch (e.CommandName)
{
case "First":
Int_Cur_Page=1;
break;
case "Previous":
Int_Cur_Page =Int32.Parse(Lbl_Pagina_Atual.Text)-1;
break;
case "Next":
Int_Cur_Page =Int32.Parse(Lbl_Pagina_Atual.Text)+1;
break;
case "Last":
Int_Cur_Page=Int32.Parse(Lbl_Pagina_Final.Text);
break;
}
//monta a Grid
BindData();
}
protected void AlteraSort(Object sender,DataGridSortCommandEventArgs e)
{
//define o campo de ordenação e coloca no label de estado para ser armazenado
Lbl_Order.Text=e.SortExpression;
//pega a página atual para rodar a Stored Procedure
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 9 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
Int_Cur_Page=Int32.Parse(Lbl_Pagina_Atual.Text);
//monta a Grid
BindData();
}
protected void MontaLinha(Object sender, DataGridItemEventArgs e)
{
//Verifica que tipo de linha está sendo criada
//pois queremos que rode somente em linhas Item e Alternating Item
// e não em Header e Footer
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==
ListItemType.AlternatingItem)
{
//cria um string auxiliar para montar a query
string strAux;
//cria uma nova conexão POIS QUANDO UM DATAREADER ESTÁ SENDO EXECUTADO NÃO
// PODEMOS UTILIZAR A MESMA CONEXÃO
SqlConnection sqlConn2 = new SqlConnection("Data Source=localhost;User
ID=SA;Password=;Initial Catalog=pubs");
//define a query de acordo com a linha
strAux = strSQL2 + " WHERE authors.au_id = '" + e.Item.Cells[0].Text + "'";
//cria outro objeto command
SqlCommand sqlCmd2 = new SqlCommand(strAux,sqlConn2);
//cria um objeto DataReader para executar o Reader
SqlDataReader sqlDR2;
//Cria um novo objeto DataGrid para ser inserido
DataGrid TitulosGrid = new DataGrid();
//Formata o novo DataGrid.
TitulosGrid.BorderWidth = (Unit)1;
TitulosGrid.CellPadding = 4;
TitulosGrid.CellSpacing = 2;
TitulosGrid.GridLines = GridLines.Horizontal;
TitulosGrid.Font.Name = "Tahoma";
TitulosGrid.Font.Size = FontUnit.XSmall;
TitulosGrid.BorderColor = Color.FromName("Gray");
TitulosGrid.ItemStyle.BackColor = Color.FromName("HoneyDew");
TitulosGrid.ItemStyle.ForeColor = Color.FromName("DarkRed");
TitulosGrid.ShowHeader = true;
TitulosGrid.HeaderStyle.BackColor = Color.FromName("LightSteelBlue");
TitulosGrid.HeaderStyle.ForeColor = Color.FromName("DarkRed");
TitulosGrid.HeaderStyle.Font.Bold = true;
//Marca para não gerar automaticamente as colunas
TitulosGrid.AutoGenerateColumns = false;
//Adiciona as colunas da grid//
//Id do titulo//
BoundColumn bc = new BoundColumn();
//Configura os valores desta BoundColumn
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 70 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
bc.HeaderText = "ID do Título";
bc.DataField = "Id";
bc.ItemStyle.Wrap = false;
bc.Visible=false;
//Adiciona esta coluna a DataGrid.
TitulosGrid.Columns.Add(bc);
//Título//
bc = new BoundColumn();
bc.HeaderText = "Título";
bc.DataField = "Titulo";
bc.ItemStyle.Wrap = false;
TitulosGrid.Columns.Add(bc);
//Tipo do Título//
bc = new BoundColumn();
bc.HeaderText = "Tipo do Título";
bc.DataField = "Tipo";
bc.ItemStyle.Wrap = false;
TitulosGrid.Columns.Add(bc);
//Valor Recebido em formato Currency//
bc = new BoundColumn();
bc.HeaderText = "$ Recebido";
bc.DataField = "Earned";
bc.DataFormatString="{0:c}";
bc.ItemStyle.Wrap = false;
TitulosGrid.Columns.Add(bc);
//Fim das Colunas//
try
{
sqlConn2.Open();
//executa o comando para o reader
sqlDR2 = sqlCmd2.ExecuteReader();
//preenche o DataGrid com o Reader
TitulosGrid.DataSource=sqlDR2;
TitulosGrid.DataBind();
//Adiciona este DataGrid ao DataGrid Original na coluna Template
vazia.
//lembrar que o índice começa de 0
e.Item.Cells[4].Controls.Add(TitulosGrid);
}
catch (SqlException er)
{
//ocorreu erro como banco de dados
string Str_Saida="";
for (int i=0; i<er.Errors.Count; i++)
{
Str_Saida+=er.Errors[i].Message.ToString() + "\n";
}
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 71 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
Response.Write("Ocorreu o seguinte erro com a conexão do banco de
dados: \n" + Str_Saida);
}
finally
{
//Fecha a conexão - LEMBRAR DE FECHAR SEMPRE QUE UTILIZAR DATAREADER
sqlConn2.Close();
}
}
}
}
}
8e/a o res%ltado desta p-$ina@
=onsiderações@
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 7$ de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
L# ( leitor deve oservar )%e &oram %tili'ados o/etos DataFeader para a
alimentaç"o dos dados dos Grids, tanto o 5-ster )%anto o Detail. ( %so
do DataFeader deve ser e.plorado com m%ita e&ici:ncia, pois esta é a
cone."o mais r-pida com o anco de dados, %ma ve' )%e é &eita apenas
%ma varred%ra linear dos re$istros e nada mais. Eica, poém, %ma
per$%nta@ deveJse SE5PFE %tili'ar o DataFeaderR A resposta varia, de
acordo com o %so s ser destinado aos dados, como por e.emplo@
<oas Ra,=es 5ara se %tili,ar
DataReader
<oas Ra,=es 5ara N3o se utili,ar
DataReader
• Preenc6imento de 2istas !como
DropDown2ists...# para seleç"o>
• Preenc6imento de Grids )%e n"o
ser"o colocados em modo de
ediç"o>
• =ons%lta a Stored Proced%res de
e.ec%ç"o de res%ltado>
• 8arred%ra linear de re$istros !n%m
único sentido#>
• Preenc6imento de DataSets !com
taelas e relacionamentos#>
• Preenc6imento de Grids com
opç"o de ediç"o>
• Preenc6imento de (/etos de
dados para ediç"o, alteraç"o,
e.cl%s"o, e &iltro>
B# DeveJse ter m%ito c%idado com as propriedades do DataGrid, pois se, por
acaso, a propriedade AllowPa$in$ &or s%primida, a p-$ina p-ra de
&%ncionar ale$ando n"o ser poss*vel totali'ar os campos devido I n"oJ
%tili'aç"o de %m o/eto )%e implemente ;=ollections. Na pr-tica, astaria
selecionar esta propriedade como Tr%e.
K# Uma oa pr-tica deste tipo de rec%rso poderia até ser a de criar %m Te
User =ontrol a partir do c7di$o e.atamente i$%al ao da p-$ina anterior, e
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 71 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
traal6ar as propriedades através de re&le."o. H claro )%e isto s7 seria
interessante se a aplicaç"o viesse a %tili'ar este Grid v-rias ve'es.
Traal6ando %m e.emplo ainda mais comple.o.
Para &inali'ar este tema, vamos s%por )%e, por e.emplo, o cliente )%isesse &a'er
%ma pes)%isa dos a%tores da p-$ina %tili'ada no item anterior, s7 )%e, desta
ve', os a%tores seriam &iltrados por Estado, incl%indo todos o% al$%m Estado
espec*&ico. Uma maneira interessante de se &a'er isto é criar dois o/etos Panel@
%m com a tela anterior U totalmente i$%al U e o%tro com os o/etos de &iltra$em.
Depois, traal6aJse com as propriedades 8isile de cada %m para &a'er a
seleç"o. 8e/amos os c7di$os@
Ar)%ivo 5asterDetailB.asp.@
<%@ Page language="c#" Codebehind="MasterDetail2.aspx.cs" AutoEventWireup="false"
Inherits="CoolDataGrid.MasterDetail2" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>MasterDetail2</title>
<meta content="Microsoft Visual Studio 7.0" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5"
name="vs_targetSchema">
<style>
.table { FONT: x-small Tahoma; COLOR: navy }
.tableItem { FONT: x-small Tahoma; COLOR: navy; BACKGROUND-COLOR: floralwhite }
.tableHeader { FONT: bold x-small Tahoma; COLOR: black; BACKGROUND-COLOR: darkseagreen }
.alternatingItem { FONT: x-small Tahoma; COLOR: navy; BACKGROUND-COLOR: silver }
</style>
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<asp:Panel id="Pnl_Grid" runat="server" style="LEFT: 0px; POSITION: absolute; TOP:
10px" BorderWidth="0" BorderStyle="None">
<TABLE id="Tbl_Grid" cellSpacing="0" cellPadding="4" width="1000"
border="0">
<TR>
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 76 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
<TD align="left" width="500" colSpan="2">
<asp:label id="Lbl_Filtro" runat="server"
CssClass="Table"></asp:label>
<asp:label id="Lbl_Registros" runat="server"
CssClass="Table"></asp:label></TD>
<TD align="right" width="500" colSpan="2">
<asp:label id="Label1" runat="server"
CssClass="Table">Página </asp:label>
<asp:label id="Lbl_Pagina_Atual" runat="server"
CssClass="Table"></asp:label>
<asp:label id="Label3" runat="server"
CssClass="Table"> de </asp:label>
<asp:label id="Lbl_Pagina_Final" runat="server"
CssClass="Table"></asp:label></TD>
</TR>
<TR>
<TD align="middle" width="1000" colSpan="4">
<asp:datagrid id="DG_MasterDetail" runat="server"
CssClass="tableitem" PagerStyle-Visible="False" AllowCustomPaging="True"
Width="980px" CellPadding="2" CellSpacing="2" BorderStyle="Solid"
BorderWidth="2px" GridLines="Horizontal" BorderColor="DarkOliveGreen" PageSize="5"
AllowPaging="True" AllowSorting="True" OnSortCommand="AlteraSort"
AutoGenerateColumns="False" OnItemDataBound="MontaLinha">
<AlternatingItemStyle
CssClass="alternatingItem"></AlternatingItemStyle>
<HeaderStyle CssClass="tableHeader"></HeaderStyle>
<Columns>
<asp:BoundColumn Visible="False"
DataField="au_id" ReadOnly="True" HeaderText="au_id"></asp:BoundColumn>
<asp:BoundColumn DataField="au_fname"
SortExpression="au_fname" ReadOnly="True" HeaderText="First
Name"></asp:BoundColumn>
<asp:BoundColumn DataField="au_lname"
SortExpression="au_lname" ReadOnly="True" HeaderText="Last
Name"></asp:BoundColumn>
<asp:TemplateColumn SortExpression="city"
HeaderText="Endere&#231;o">
<ItemTemplate>
<table class="table"
cellpadding="0" cellspacing="0" border="0">
<tr align="justify">
<td align="left"><%#
DataBinder.Eval(Container.DataItem, "address") %>
</td>
</tr>
<tr align="justify">
<td align="left"><%#
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 7 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
DataBinder.Eval(Container.DataItem, "city") %>
</td>
</tr>
<tr align="justify">
<td align="left"><%#
DataBinder.Eval(Container.DataItem, "state") %>
</td>
<td align="right"><%#
DataBinder.Eval(Container.DataItem, "zip") %>
</td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="T&#237;tulos
deste Autor"></asp:TemplateColumn>
<asp:HyperLinkColumn Text="&lt;IMG
alt='Navega pelo ID do Registro' border='0' src='Navega.jpg'&gt;" Target="_top"
DataNavigateUrlField="au_id" DataNavigateUrlFormatString="resultado.aspx?
AU_ID={0}" HeaderText="Navega pelo ID"></asp:HyperLinkColumn>
</Columns>
<PagerStyle Visible="False" Position="TopAndBottom"
PageButtonCount="3" Mode="NumericPages"></PagerStyle>
</asp:datagrid>
</TD>
</TR>
<TR>
<TD align="middle" width="250">
<asp:imagebutton id="Cmd_First"
runat="server" CssClass="Table" ImageUrl="First.jpg" OnCommand="AlteraPagina"
CommandName="First" AlternateText="Primeiro Registro" ToolTip="Primeiro
Registro"></asp:imagebutton></TD>
<TD align="middle" width="250">
<asp:imagebutton id="Cmd_Previous"
runat="server" CssClass="Table" ImageUrl="Previous.jpg" OnCommand="AlteraPagina"
CommandName="Previous" AlternateText="Registro Anterior" ToolTip="Registro
Anterior"></asp:imagebutton></TD>
<TD align="middle" width="250">
<asp:imagebutton id="Cmd_Next" runat="server"
CssClass="Table" ImageUrl="Next.jpg" OnCommand="AlteraPagina" CommandName="Next"
AlternateText="Próximo Registro" ToolTip="Próximo
Registro"></asp:imagebutton></TD>
<TD align="middle" width="250">
<asp:imagebutton id="Cmd_Last" runat="server"
CssClass="Table" ImageUrl="Last.jpg" OnCommand="AlteraPagina" CommandName="Last"
AlternateText="Último Registro" ToolTip="Último Registro"></asp:imagebutton></TD>
</TR>
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 77 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
<TR align="middle">
<TD align="middle" width="1000" colSpan="4">
<asp:imagebutton id="Cmd_Filtrar"
runat="server" CssClass="Table" ImageUrl="Filtrar.jpg" AlternateText="Filtrar
Registros" ToolTip="Filtrar Registros"></asp:imagebutton></TD>
</TR>
</TABLE>
</asp:Panel>
<asp:Panel id="Pnl_Filtro" runat="server" style="LEFT: 0px; POSITION:
absolute; TOP: 10px" BorderWidth="0" BorderStyle="None" Visible="False">
<TABLE cellSpacing="3" cellPadding="2" width="600" border="0">
<TR align="middle">
<TD align="middle">
<TABLE cellSpacing="3" cellPadding="2"
width="150" border="0">
<TR>
<TD align="left">
<asp:RadioButton
id="Opt_Filtro_Todos" runat="server" CssClass="table" Width="151px" Text="Todos os
Registros" AutoPostBack="True" Checked="True"
GroupName="Opcao"></asp:RadioButton></TD>
</TR>
<TR>
<TD align="left">
<asp:RadioButton id="Opt_Filtro_Selecao" runat="server" CssClass="table"
Text="Filtrar Registros :" AutoPostBack="True"
GroupName="Opcao"></asp:RadioButton></TD>
</TR>
</TABLE>
</TD>
<TD align="middle">
<asp:ImageButton id="Cmd_Confirmar_Procura"
runat="server" CssClass="table" ImageUrl="Confirmar.jpg" AlternateText="Confirma
Procura" ToolTip="Confirma Procura"></asp:ImageButton></TD>
</TR>
<TR>
<TD align="left" colSpan="2">
<asp:panel id="Pnl_Selecao" runat="server"
Width="275px" BorderStyle="None" BorderWidth="0px" Visible="False">
<BR>
<TABLE id="Id_Selecao" cellSpacing="3"
cellPadding="2" width="600" border="0">
<TR>
<TD align="left">
<asp:CheckBox id="Chk_Nome" runat="server" CssClass="table" Text="Por
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 78 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
Primeiro Nome :"></asp:CheckBox></TD>
<TD align="left"
colSpan="2">
<asp:textbox
id="Txt_Nome" runat="server" CssClass="table" Width="340px"
MaxLength="20"></asp:textbox></TD>
</TR>
<TR>
<TD align="left">
<asp:CheckBox
id="Chk_Estado" runat="server" CssClass="table" Text="Por
Estado :"></asp:CheckBox></TD>
<TD align="left"
colSpan="2">
<asp:DropDownList id="Cmb_Estado" runat="server" CssClass="table"
Width="340px"></asp:DropDownList></TD>
</TR>
</TABLE>
</asp:panel></TD>
</TR>
</TABLE>
</asp:Panel>
<asp:label id="Lbl_Order" runat="server" Visible="False"></asp:label>
<asp:label id="Lbl_Sql" runat="server" Visible="False"></asp:label>
</form>
</body>
</HTML>
Ar)%ivo 5asterDetailB.Asp..cs !SE5 a parte $erada a%tom-ticamente pelo
8S.NET#@
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 System.Data.SqlClient;
namespace CoolDataGrid
{
public class MasterDetail2 : System.Web.UI.Page
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 7/ de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
{
protected System.Web.UI.WebControls.Label Lbl_Pagina_Final;
protected System.Web.UI.WebControls.Label Lbl_Registros;
protected System.Web.UI.WebControls.Label Lbl_Pagina_Atual;
protected System.Web.UI.WebControls.Label Label3;
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.DataGrid DG_MasterDetail;
protected System.Web.UI.WebControls.ImageButton Cmd_First;
protected System.Web.UI.WebControls.ImageButton Cmd_Previous;
protected System.Web.UI.WebControls.ImageButton Cmd_Next;
protected System.Web.UI.WebControls.ImageButton Cmd_Last;
protected System.Web.UI.WebControls.Label Lbl_Sql;
protected System.Web.UI.WebControls.Label Lbl_Order;
protected System.Web.UI.WebControls.RadioButton Opt_Filtro_Todos;
protected System.Web.UI.WebControls.RadioButton Opt_Filtro_Selecao;
protected System.Web.UI.WebControls.ImageButton Cmd_Confirmar_Procura;
protected System.Web.UI.WebControls.CheckBox Chk_Nome;
protected System.Web.UI.WebControls.TextBox Txt_Nome;
protected System.Web.UI.WebControls.CheckBox Chk_Estado;
protected System.Web.UI.WebControls.DropDownList Cmb_Estado;
protected System.Web.UI.WebControls.Panel Pnl_Selecao;
protected System.Web.UI.WebControls.Panel Pnl_Filtro;
protected System.Web.UI.WebControls.ImageButton Cmd_Filtrar;
protected System.Web.UI.WebControls.Panel Pnl_Grid;
protected System.Web.UI.WebControls.Label Lbl_Filtro;
//tipos personalizados
protected SqlConnection sqlConn;
protected SqlCommand sqlCmd;
protected SqlDataReader sqlDR;
protected int Int_Cur_Page;
protected int Int_Tot_Page;
protected string strSQL = "SELECT au_id,au_fname,au_lname,city,address,state,zip FROM
authors";
protected string strSQL2 = "SELECT titles.title_id AS Id,titles.title AS Titulo,titles.type
AS Tipo,((price*ytd_sales*royalty)/100) AS Earned FROM titles INNER JOIN titleauthor ON
titles.title_id = titleauthor.title_id INNER JOIN authors ON titleauthor.au_id = authors.au_id";
private void Page_Load(object sender, System.EventArgs e)
{
// Roda se não for auto submit
if (! IsPostBack)
{
Int_Cur_Page=1;
//coloca os valores nas Labels para armazenar estado
Lbl_Filtro.Text="Todos os Registros.";
Lbl_Pagina_Atual.Text=Int_Cur_Page.ToString();
Lbl_Order.Text="au_fname";
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 79 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
Lbl_Sql.Text=strSQL;
//monta a Grid
BindData();
//monta as combos só uma vez (neste round trip)
Bind_Combos();
}
}
private void BindData()
{
string Str_Saida="";
int int_aux;
decimal dec_aux;
//estabelece a conexão
sqlConn = new SqlConnection("Data Source=localhost;User ID=SA;Password=;Initial
Catalog=pubs");
sqlCmd = new SqlCommand();
sqlCmd.Connection=sqlConn;
Lbl_Registros.Text="";
//desta vez vamos colocar tratamento de erros
try
{
//define a stored procedure e seus parametros
sqlCmd.CommandText="spPaginacao";
sqlCmd.CommandType=CommandType.StoredProcedure;
//limpa apilha de parâmetros apenas para conforto (não é necessário)
sqlCmd.Parameters.Clear();
sqlCmd.Parameters.Add(new SqlParameter("@SQL",SqlDbType.VarChar,4000));
sqlCmd.Parameters["@SQL"].Value=Lbl_Sql.Text;
sqlCmd.Parameters.Add(new SqlParameter("@PAGE",SqlDbType.Int));
sqlCmd.Parameters["@PAGE"].Value=Int_Cur_Page;
sqlCmd.Parameters.Add(new SqlParameter("@PAGESIZE",SqlDbType.Int));
sqlCmd.Parameters["@PAGESIZE"].Value=DG_MasterDetail.PageSize;
sqlCmd.Parameters.Add(new SqlParameter("@ORDER",SqlDbType.VarChar,255));
sqlCmd.Parameters["@ORDER"].Value=Lbl_Order.Text;
sqlCmd.Parameters.Add(new SqlParameter("@TIPOORDER",SqlDbType.VarChar,4));
sqlCmd.Parameters["@TIPOORDER"].Value="ASC";
sqlCmd.Parameters.Add(new SqlParameter("@ROWS_TOTAL",SqlDbType.Int));
sqlCmd.Parameters["@ROWS_TOTAL"].Direction=ParameterDirection.Output;
sqlCmd.Parameters.Add(new SqlParameter("@INT_ERRO",SqlDbType.Int));
sqlCmd.Parameters["@INT_ERRO"].Direction=ParameterDirection.Output;
//abre a conexão com o banco de dados
sqlConn.Open();
//executa o reader
sqlDR=sqlCmd.ExecuteReader();
//atribui o reader a DataGrid
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 80 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
DG_MasterDetail.DataSource=sqlDR;
DG_MasterDetail.DataBind();
//fecha a conexão
sqlConn.Close();
//verifica se ocorreu algum erro com a query
if (((int)sqlCmd.Parameters["@INT_ERRO"].Value)==0)
{
//calcula o número total de páginas através do número de registros totais
int_aux = ((int)sqlCmd.Parameters["@ROWS_TOTAL"].Value);
dec_aux=(Decimal.Parse(int_aux.ToString()))/DG_MasterDetail.PageSize;
Int_Tot_Page=Int32.Parse(System.Math.Ceiling(Double.Parse(dec_aux.ToString())).ToString());
//preenche os Labels para armazenar o estado
Lbl_Pagina_Atual.Text=Int_Cur_Page.ToString();
Lbl_Pagina_Final.Text=Int_Tot_Page.ToString();
Lbl_Registros.Text = "Total de Registros: " + int_aux.ToString();
//verifica como apresentar os botões de acordo com a página que se encontra
if (Int_Tot_Page==1)
{
Cmd_First.Visible=false;
Cmd_Next.Visible=false;
Cmd_Previous.Visible=false;
Cmd_Last.Visible=false;
}
else
{
if (Int_Cur_Page==1)
{
Cmd_First.Visible=false;
Cmd_Next.Visible=true;
Cmd_Previous.Visible=false;
Cmd_Last.Visible=true;
}
else
{
if (Int_Cur_Page==Int_Tot_Page)
{
Cmd_First.Visible=true;
Cmd_Next.Visible=false;
Cmd_Previous.Visible=true;
Cmd_Last.Visible=false;
}
else
{
Cmd_First.Visible=true;
Cmd_Next.Visible=true;
Cmd_Previous.Visible=true;
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 81 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
Cmd_Last.Visible=true;
}
}
}
}
else
{
Response.Write("Ocorreu um Erro com a procura!");
}
}
catch (SqlException e)
{
//trata do erro de banco de dados
for (int i=0; i<e.Errors.Count; i++)
{
Str_Saida+=e.Errors[i].Message.ToString() + "\n";
}
Response.Write("Ocorreu o seguinte erro com a conexão do banco de dados: \n"
+ Str_Saida);
}
catch (Exception er)
{
//trata o erro de página
Response.Write("Ocorreu o seguinte erro com a página: \n" + er.Message);
}
finally
{
//termina a execução
if (sqlConn.State==ConnectionState.Open)
{
sqlConn.Close();
}
}
}
public void AlteraPagina(Object sender, CommandEventArgs e)
{
//verifica que comando foi executado a partir do parâmetro CommandName dado aos
// ImageButtons e executa a montagem da página de acordo
switch (e.CommandName)
{
case "First":
Int_Cur_Page=1;
break;
case "Previous":
Int_Cur_Page =Int32.Parse(Lbl_Pagina_Atual.Text)-1;
break;
case "Next":
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 8$ de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
Int_Cur_Page =Int32.Parse(Lbl_Pagina_Atual.Text)+1;
break;
case "Last":
Int_Cur_Page=Int32.Parse(Lbl_Pagina_Final.Text);
break;
}
//monta a Grid
BindData();
}
protected void AlteraSort(Object sender,DataGridSortCommandEventArgs e)
{
//define o campo de ordenação e coloca no label de estado para ser armazenado
Lbl_Order.Text=e.SortExpression;
//pega a página atual para rodar a Stored Procedure
Int_Cur_Page=Int32.Parse(Lbl_Pagina_Atual.Text);
//monta a Grid
BindData();
}
protected void MontaLinha(Object sender, DataGridItemEventArgs e)
{
//Verifica que tipo de linha está sendo criada
//pois queremos que rode somente em linhas Item e Alternating Item
// e não em Header e Footer
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==
ListItemType.AlternatingItem)
{
//cria um string auxiliar para montar a query
string strAux;
//cria uma nova conexão POIS QUANDO UM DATAREADER ESTÁ SENDO EXECUTADO NÃO
// PODEMOS UTILIZAR A MESMA CONEXÃO
SqlConnection sqlConn2 = new SqlConnection("Data Source=localhost;User
ID=SA;Password=;Initial Catalog=pubs");
//define a query de acordo com a linha
strAux = strSQL2 + " WHERE authors.au_id = '" + e.Item.Cells[0].Text + "'";
//cria outro objeto command
SqlCommand sqlCmd2 = new SqlCommand(strAux,sqlConn2);
//cria um objeto DataReader para executar o Reader
SqlDataReader sqlDR2;
//Cria um novo objeto DataGrid para ser inserido
DataGrid TitulosGrid = new DataGrid();
//Formata o novo DataGrid.
TitulosGrid.BorderWidth = (Unit)1;
TitulosGrid.CellPadding = 4;
TitulosGrid.CellSpacing = 2;
TitulosGrid.GridLines = GridLines.Horizontal;
TitulosGrid.Font.Name = "Tahoma";
TitulosGrid.Font.Size = FontUnit.XSmall;
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 81 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
TitulosGrid.BorderColor = Color.FromName("Gray");
TitulosGrid.ItemStyle.BackColor = Color.FromName("HoneyDew");
TitulosGrid.ItemStyle.ForeColor = Color.FromName("DarkRed");
TitulosGrid.ShowHeader = true;
TitulosGrid.HeaderStyle.BackColor = Color.FromName("LightSteelBlue");
TitulosGrid.HeaderStyle.ForeColor = Color.FromName("DarkRed");
TitulosGrid.HeaderStyle.Font.Bold = true;
//Marca para não gerar automaticamente as colunas
TitulosGrid.AutoGenerateColumns = false;
//Adiciona as colunas da grid//
//Id do titulo//
BoundColumn bc = new BoundColumn();
//Configura os valores desta BoundColumn
bc.HeaderText = "ID do Título";
bc.DataField = "Id";
bc.ItemStyle.Wrap = false;
bc.Visible=false;
//Adiciona esta coluna a DataGrid.
TitulosGrid.Columns.Add(bc);
//Título//
bc = new BoundColumn();
bc.HeaderText = "Título";
bc.DataField = "Titulo";
bc.ItemStyle.Wrap = false;
TitulosGrid.Columns.Add(bc);
//Tipo do Título//
bc = new BoundColumn();
bc.HeaderText = "Tipo do Título";
bc.DataField = "Tipo";
bc.ItemStyle.Wrap = false;
TitulosGrid.Columns.Add(bc);
//Valor Recebido em formato Currency//
bc = new BoundColumn();
bc.HeaderText = "$ Recebido";
bc.DataField = "Earned";
bc.DataFormatString="{0:c}";
bc.ItemStyle.Wrap = false;
TitulosGrid.Columns.Add(bc);
//Fim das Colunas//
try
{
sqlConn2.Open();
//executa o comando para o reader
sqlDR2 = sqlCmd2.ExecuteReader();
//preenche o DataGrid com o Reader
TitulosGrid.DataSource=sqlDR2;
TitulosGrid.DataBind();
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 86 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
//Adiciona este DataGrid ao DataGrid Original na coluna Template vazia.
//lembrar que o índice começa de 0
e.Item.Cells[4].Controls.Add(TitulosGrid);
}
catch (SqlException er)
{
//ocorreu erro como banco de dados
string Str_Saida="";
for (int i=0; i<er.Errors.Count; i++)
{
Str_Saida+=er.Errors[i].Message.ToString() + "\n";
}
Response.Write("Ocorreu o seguinte erro com a conexão do banco de
dados: \n" + Str_Saida);
}
finally
{
//Fecha a conexão - LEMBRAR DE FECHAR SEMPRE QUE UTILIZAR DATAREADER
sqlConn2.Close();
}
}
}
private void Bind_Combos()
{
string Str_Saida="";
sqlConn = new SqlConnection("Data Source=localhost;User ID=SA;Password=;Initial
Catalog=pubs");
sqlCmd = new SqlCommand();
sqlCmd.Connection=sqlConn;
//Estados
sqlCmd.CommandText="SELECT DISTINCT state FROM authors ORDER BY state";
sqlCmd.CommandType=CommandType.Text;
sqlCmd.Parameters.Clear();
try
{
sqlConn.Open();
sqlDR = sqlCmd.ExecuteReader();
Cmb_Estado.DataSource=sqlDR;
Cmb_Estado.DataTextField="state";
Cmb_Estado.DataValueField="state";
Cmb_Estado.DataBind();
}
catch (SqlException e)
{
for (int i=0; i<e.Errors.Count; i++)
{
Str_Saida+=e.Errors[i].Message.ToString() + "\n";
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 8 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
}
Response.Write("Ocorreu o seguinte erro com a conexão do banco de dados: \n"
+ Str_Saida);
}
finally
{
sqlConn.Close();
}
}
private void Opt_Filtro_Todos_CheckedChanged(object sender, System.EventArgs e)
{
//chama rotina de paineis
Arruma_Option();
}
private void Opt_Filtro_Selecao_CheckedChanged(object sender, System.EventArgs e)
{
//chama rotina de paineis
Arruma_Option();
}
private void Arruma_Option()
{
//apaga os paineis de filtro acordo com o option selecionado
if (Opt_Filtro_Todos.Checked==true)
{
Pnl_Selecao.Visible=false;
}
else
{
Pnl_Selecao.Visible=true;
}
}
private string Prepara_Like(string aux)
{
//rotina de tratamento de caractéres para uso da
// função LIKE do SQL utilizando um objeto stringbuilder
System.Text.StringBuilder sb_aux;
sb_aux = new System.Text.StringBuilder(aux);
//Troca * por %
sb_aux.Replace("*","%");
//Troca ' por ''
sb_aux.Replace("'","''");
return sb_aux.ToString();
}
private void Cmd_Filtrar_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
//apaga os painéis de acordo com a função
Pnl_Filtro.Visible=true;
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 87 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
Pnl_Grid.Visible=false;
}
private void Cmd_Confirmar_Procura_Click(object sender, System.Web.UI.ImageClickEventArgs
e)
{
//verifica que opção foi escolhida
if (Opt_Filtro_Todos.Checked==true)
{
//foi escolhido todos os registros
Lbl_Filtro.Text="Todos os Registros.";
Lbl_Sql.Text=strSQL;
Int_Cur_Page=Int32.Parse(Lbl_Pagina_Atual.Text);
Chk_Nome.Checked=false;
Chk_Estado.Checked=false;
Txt_Nome.Text="";
BindData();
}
else
{
//foi feita seleção
string aux_temp="";
string aux_temp2="";
//verifica o estado
if (Chk_Estado.Checked)
{
aux_temp=" WHERE authors.state = '" + Cmb_Estado.SelectedItem.Value
+ "'";
aux_temp2="Estado = '" + Cmb_Estado.SelectedItem.Text + "'";
}
//verifica o nome
if (Chk_Nome.Checked)
{
if (Txt_Nome.Text!="")
{
//verifica se já escolheu estado ou não
if (aux_temp!="")
{
aux_temp+=" AND authors.au_fname LIKE '" +
Prepara_Like(Txt_Nome.Text) + "'";
aux_temp2+=" e Nome LIKE '" + Txt_Nome.Text + "'";
}
else
{
aux_temp=" WHERE authors.au_fname LIKE '" +
Prepara_Like(Txt_Nome.Text) + "'";
aux_temp2="Nome LIKE '" + Txt_Nome.Text + "'";
}
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 88 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
}
else
{
//escolheu nome mas não preencheu
Response.Write("Você selecionou o nome, mas não forneceu
nenhum!");
}
}
else
{
Txt_Nome.Text="";
}
//monta a query e mostra na tela
Lbl_Filtro.Text=aux_temp2;
Lbl_Sql.Text=strSQL + aux_temp;
Int_Cur_Page=Int32.Parse(Lbl_Pagina_Atual.Text);
//monta a Grid
BindData();
}
//remonta os painéis
Pnl_Grid.Visible=true;
Pnl_Filtro.Visible=false;
}
}
}
A$ora 8e/a o Fes%ltado )%ando se apresenta a Tela pela primeira ve'@
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 8/ de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
8e/a, a$ora, o )%e ocorre, )%ando se clica em &iltrar, &a'endo a seleç"o por
Estado e por Nome@
Autor) Ale*a#dre Ma+edo (u,es P-.i#a 89 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
A$ora com o estado e nome selecionados@
(viamente poder*amos ter %tili'ado m%ito mais campos para a seleç"o, mas
para &ins de simplicidade optamos por apenas %m Estado e %m nome com a
opç"o 2;\E. Um re)%inte maior ainda seria o de criar col%nas de 4<per2inN )%e
c6amariam as telas de ediç"o do re$istro de cada lin6a, passando o id como
parOmetro de %rl.
Termino a)%i este t%torial. Espero )%e ten6am $ostado e )%e ele possa ser de
%tilidade em se% traal6o. Ten6o certe'a )%e este arti$o poder- servir como
&onte de in&ormaç"o e inspiraç"o para )%e voc:s possam criar s%as p-$inas
tirando proveito total do DataGrid, este poderoso controle de servidor no
ASP.NET e =].
Autor) Ale*a#dre Ma+edo (u,es P-.i#a /0 de /1
Tutorial - Tudo Sobre DataGrid (ASP.NET e C#)
vs. RTM 1.0
0!"u#!$00$
V.^KB palavras no te.to !e.cl%indo o c7di$o#.
Autor) Ale*a#dre Ma+edo (u,es P-.i#a /1 de /1

Sponsor Documents

Or use your account on DocShare.tips

Hide

Forgot your password?

Or register your new account on DocShare.tips

Hide

Lost your password? Please enter your email address. You will receive a link to create a new password.

Back to log-in

Close