Sunteți pe pagina 1din 81

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 Paginao Autom!tica do DataGrid.............................................................1"
Usando a #rdenao do DataGrid.................................................................................$%
Customi&ando o DataGrid..............................................................................................$'
Usando o Conceito de Master(Detail DataGrid.............................................................4$
Usando a #rdenao e a Paginao 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 dvida, o DataGrid, pois
a maioria das aplicaes 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,
atravs de %ma srie de propriedades e mtodos de&inidos no servidor )%e
res%ltam na economia de inmeras 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 tamm 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# atravs 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 opes 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 formulrio
Parte inferior do formulrio
<%@ 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 formulrio
Parte inferior do formulrio
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 conexo e preenche o DataSet com os Dados
// depois fecha a conexo
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
caeal6o 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 /- comea a %tili'ar %m po%co mais de c7di$o,
mas, sem dvida, 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 mtodo 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 mtodos da classe#@
private void Page_Load(object sender, System.EventArgs e)
{
//verifica se um submit para mesma pgina (PostBack)
if (!IsPostBack)
{
BindData();
}
}
protected void BindData()
{
// Abre a conexo e preenche o DataSet com os Dados
// depois fecha a conexo
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 pgina
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 mtodo 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 nmero. 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 Nmeros@ 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%dana de p-$ina &eita %ma %sca do T(D(S os dados /%nto ao anco de
dados. Se o nmero 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%pe )%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 mtodo 1indData para )%e ele
re&lita essa ordena"o.
8amos tamm incl%ir o novo mtodo 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 pgina (PostBack)
if (!IsPostBack)
{
BindData();
}
}
protected void BindData()
{
// Abre a conexo e preenche o DataSet com os Dados
// depois fecha a conexo
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 pgina
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 caeal6o 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 limitaes. 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&ormaes 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 comear 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 srie de con&i$%raes. 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 caeal6o 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 prJde&inidos, como, por
e.emplo, %m valor em &ormato =%rrenc<.
Tamm poss*vel de&inir as col%nas para )%e elas apaream somente em
tempo de e.ec%"o, emora isso n"o compense, em matria 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
tamm a propriedade Tidt6 de cada col%na !tamm 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 otes 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 caeal6o>
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 !mtodo
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
!mtodo 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 !mtodo 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 caeal6o>
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 caeal6o>
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 mtodos#@
protected void EditarGrid(Object sender, DataGridCommandEventArgs e)
{
Response.Write("Voc apertou o boto de Editar!");
//define a linha clicada em modo de edio
DG_Simples.EditItemIndex=e.Item.ItemIndex;
//remonta a tela
BindData();
}
protected void AtualizarGrid(Object sender, DataGridCommandEventArgs e)
{
Response.Write("Voc apertou o boto de Atualizar!");
//define nenhuma linha em modo de edio
DG_Simples.EditItemIndex=-1;
//aps a rotina e atualizao 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 boto 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$
//aps a rotina e excluso que estaria aqui remontaria a tela
BindData();
}
protected void CancelarGrid(Object sender, DataGridCommandEventArgs e)
{
Response.Write("Voc apertou o boto de Cancelar!");
//define nenhuma linha em modo de edio
DG_Simples.EditItemIndex=-1;
//aps 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: &aa 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 endereo, 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="Endereo" 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% atravs 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 mtodo 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="Endereo" 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="Ttulos 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 mtodo 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 no 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 no 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 Ttulo";
bc.DataField = "Id";
bc.ItemStyle.Wrap = false;
bc.Visible=false;
//Adiciona esta coluna a DataGrid.
TitulosGrid.Columns.Add(bc);
//Ttulo//
bc = new BoundColumn();
bc.HeaderText = "Ttulo";
bc.DataField = "Titulo";
bc.ItemStyle.Wrap = false;
TitulosGrid.Columns.Add(bc);
//Tipo do Ttulo//
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 Ttulo";
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 criao do DataReader para
alimentar
// esta DataGrid
//objeto connection PODE SER O MESMO QUE O ANTERIOR
//objeto command NO 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 conexo est aberta, seno 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 conexo - LEMBRAR DE FECHAR SEMPRE QUE UTILIZAR DATAREADER
sqlConnection1.Close();
//Adiciona este DataGrid ao DataGrid Original na coluna Template vazia.
//lembrar que o ndice comea 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 nmero da col%na na lista$em acima,
tomando apenas o c%idado de n"o colocar %m nmero &ora do escopo,
)%e de 'ero at o nmero m-.imo de col%nas menos %m#. Alm disto, a
inser"o de controles, pode ser &eita com )%al)%er controle !n"o
necessariamente %m DataGrid como %tili'amos# e pode tamm 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 aplicaes we>
M# Nada impediria, tamm, )%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, atravs 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 otes 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 clusula 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 PARMETRO */
DECLARE @EXECSQL NVARCHAR(4000) /* AUXILIAR PARA GUARDAR COMANDO SQL */
DECLARE @ORDEM1 NVARCHAR(4) /* AUXILIAR PARA GUARDAR A ORDENAAO PRIMEIRA E
TERCEIRA */
DECLARE @ORDEM2 NVARCHAR(4) /* AUXILIAR PARA GUARDAR A ORDENAAO SEGUNDA */
DECLARE @TEMP_NUMREG INT /* AUXILIAR PARA GUARDAR A NMERO DE REGISTROS
TEMPORRIOS */
DECLARE @TEMP_ULTPAG INT /* AUXILIAR PARA GUARDAR A LTIMA PGINA POSSIVEL */
DECLARE @TEMP_REGULTPAG INT /* AUXILIAR PARA GUARDAR O NMERO DE REGISTROS DA
LTIMA PGINA POSSIVEL */
/* **** CALCULA A LINHA DE INICIO E O NMERO DE LINHAS NECESSRIAS **** */
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 NMERO DA PGINA VIVEL **** */
IF (@TOTAL <=0)
BEGIN /* NO 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 PGINA 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 PGINA 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 Nmero da P-$ina !devendo estar
entre L e o nmero 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 Nmero 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 otes
para a nave$a"o c%stomi'ada. Apenas a t*t%lo de in&orma"o, %tili'ei tamm
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">Pgina </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="Prximo
Registro" AlternateText="Prximo 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 no 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 conexo
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 parmetros apenas para conforto (no necessrio)
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 conexo 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 conexo
sqlConn.Close();
//verifica se ocorreu algum erro com a query
if (((int)sqlCmd.Parameters["@INT_ERRO"].Value)==0)
{
//calcula o nmero total de pginas atravs do nmero 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 botes de acordo com a pgina 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 conexo do banco de dados: \n"
+ Str_Saida);
}
catch (Exception er)
{
//trata o erro de pgina
Response.Write("Ocorreu o seguinte erro com a pgina: \n" + er.Message);
}
finally
{
//termina a execuo
if (sqlConn.State==ConnectionState.Open)
{
sqlConn.Close();
}
}
}
public void AlteraPagina(Object sender, CommandEventArgs e)
{
//verifica que comando foi executado a partir do parmetro CommandName dado aos
// ImageButtons e executa a montagem da pgina 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 ordenao e coloca no label de estado para ser armazenado
Lbl_Order.Text=e.SortExpression;
//pega a pgina 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 no 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 conexo POIS QUANDO UM DATAREADER EST SENDO EXECUTADO NO
// PODEMOS UTILIZAR A MESMA CONEXO
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 no 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 Ttulo";
bc.DataField = "Id";
bc.ItemStyle.Wrap = false;
bc.Visible=false;
//Adiciona esta coluna a DataGrid.
TitulosGrid.Columns.Add(bc);
//Ttulo//
bc = new BoundColumn();
bc.HeaderText = "Ttulo";
bc.DataField = "Titulo";
bc.ItemStyle.Wrap = false;
TitulosGrid.Columns.Add(bc);
//Tipo do Ttulo//
bc = new BoundColumn();
bc.HeaderText = "Tipo do Ttulo";
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 comea 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 conexo do banco de
dados: \n" + Str_Saida);
}
finally
{
//Fecha a conexo - LEMBRAR DE FECHAR SEMPRE QUE UTILIZAR DATAREADER
sqlConn2.Close();
}
}
}
}
}
8e/a o res%ltado desta p-$ina@
=onsideraes@
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, pom, %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 atravs 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">Pgina </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="Prximo Registro" ToolTip="Prximo
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 no 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 conexo
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 parmetros apenas para conforto (no necessrio)
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 conexo 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 conexo
sqlConn.Close();
//verifica se ocorreu algum erro com a query
if (((int)sqlCmd.Parameters["@INT_ERRO"].Value)==0)
{
//calcula o nmero total de pginas atravs do nmero 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 botes de acordo com a pgina 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 conexo do banco de dados: \n"
+ Str_Saida);
}
catch (Exception er)
{
//trata o erro de pgina
Response.Write("Ocorreu o seguinte erro com a pgina: \n" + er.Message);
}
finally
{
//termina a execuo
if (sqlConn.State==ConnectionState.Open)
{
sqlConn.Close();
}
}
}
public void AlteraPagina(Object sender, CommandEventArgs e)
{
//verifica que comando foi executado a partir do parmetro CommandName dado aos
// ImageButtons e executa a montagem da pgina 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 ordenao e coloca no label de estado para ser armazenado
Lbl_Order.Text=e.SortExpression;
//pega a pgina 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 no 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 conexo POIS QUANDO UM DATAREADER EST SENDO EXECUTADO NO
// PODEMOS UTILIZAR A MESMA CONEXO
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 no 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 Ttulo";
bc.DataField = "Id";
bc.ItemStyle.Wrap = false;
bc.Visible=false;
//Adiciona esta coluna a DataGrid.
TitulosGrid.Columns.Add(bc);
//Ttulo//
bc = new BoundColumn();
bc.HeaderText = "Ttulo";
bc.DataField = "Titulo";
bc.ItemStyle.Wrap = false;
TitulosGrid.Columns.Add(bc);
//Tipo do Ttulo//
bc = new BoundColumn();
bc.HeaderText = "Tipo do Ttulo";
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 comea 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 conexo do banco de
dados: \n" + Str_Saida);
}
finally
{
//Fecha a conexo - 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 conexo 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 caractres para uso da
// funo 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 painis de acordo com a funo
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 opo 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 seleo
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 no
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 no preencheu
Response.Write("Voc selecionou o nome, mas no 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 painis
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

S-ar putea să vă placă și