NUNCA MAIS PASSE RAIVA POR NÃO CONSEGUIR RESOLVER UM PROBLEMA COM O EXCEL - GARANTIDO!
UNIVERSIDADE DO VBA - Domine o VBA no Excel Criando Sistemas Completos - Passo a Passo - CLIQUE AQUI
« Lição anterior | Δ Página principal | ¤ Capítulos | Próxima lição » |
ASP.NET - CURSO COMPLETO Autor: Júlio Battisti |
||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Lição 090 - Capítulo 10 - O objeto DataView | ||||||||||||||||||||||||||
Para entender a função do objeto DataView, vamos fazer uma recaptulação dos objetos que já estudamos, neste capítulo:
Nesta figura fica, bem destacado, o papel de ponte entre o objeto DataSet e o controle DataGrid, exercido pelo objeto DataView. No exemplo da figura, utilizamos o controle DataGrid, mas poderia ser qualquer outro Web Form Control capaz de acessar dados de um DataView. Um objeto DataView pode ser configurado para retornar apenas uma parte dos dados de um objeto DataTable. Podemos, por exemplo, ter dois objetos DataView, ligados com o mesmo objeto DataTable, porém exibindo diferentes dados. Vamos estudar mais alguns detalhes sobre o objeto DataView. Na Tabela 10.13 temos uma descrição das principais propriedades da classe DataView:
Tabela 10.13 Principais propriedades da classe DataView. Na Tabela 10.14 temos uma descrição dos principais métodos da classe DataView:
Tabela 10.14 Principais métodos da classe DataView. Vamos apresentar alguns exemplos de utilização do objeto DataView. Exemplo 1: Neste exemplo faremos uma conexão com o banco de dados C:\Meus documentos\Northwind.mdb. Vamos retornar os seguintes campos da tabela Funcionários:
Os dados serão apresentados na página, utilizando um controle DataGrid. Também apresentaremos um controle ListBox, onde o usuário poderá selecionar um campo pelo qual os dados serão ordenados em ordem Crescente. Por padrão os dados são classificados pelo CódigoDoFuncionário. Na Listagem 10.5 temos o código para o exemplo proposto. Listagem 10.5 – Um exemplo completo com DataView. <%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<html>
<script language="C#" runat="server">
protected void Page_Load(Object Src, EventArgs E )
{
// Crio uma conexão com o banco de dados do Microsoft Access.
// C:\Meus documentos\NorthWind.mdb.
String DefineConexão= "PROVIDER=MICROSOFT.JET.OLEDB.4.0;" +
"DATA SOURCE=c:\\meus documentos\\NorthWind.mdb";
OleDbConnection MinhaConexão = new OleDbConnection(DefineConexão);
// Utilizamos um objeto DataAdapter para executar um comando SQL,
// o qual retorna todos os dados da tabela "Clientes".
OleDbDataAdapter MeuComando = new OleDbDataAdapter("SELECT
CódigoDoFuncionário," + "Nome,Cargo,DataDeNascimento,Cidade
FROM Funcionários", MinhaConexão);
// Criamos e preenchemos um objeto DataSet.
// Observe que não temos mais o objeto Recordset,
// como era de praxe com o ASP 3.0.
DataSet ds = new DataSet();
// Utilizo o método Fill do objeto DataAdapter, para preencher
// o objeto DataSet, com os dados retornados pelo comando SQL.
MeuComando.Fill(ds);
// Conectamos um controle DataGrid com o DataSet criado anteriormente.
// MinhaGrade é o id (nome) de um controle do tipo
// DataGrid que está na seção de apresentação da página.
DataView source = new DataView(ds.Tables[0]);
// Utilizamos uma instrução Switch para definir a
// classificação dos dados com base no valor selecionado
// na lista CampoClassificar.
string aux = CampoClassificar.SelectedItem.Value;
switch (aux)
{
case "Cargo":
source.Sort="Cargo ASC";
break;
case "Cidade":
source.Sort="Cidade ASC";
break;
case "Código do Funcionário":
source.Sort="CódigoDoFuncionário ASC";
break;
case "Data de Nascimento":
source.Sort="DataDeNascimento ASC";
break;
case "Nome":
source.Sort="Nome ASC";
break;
default:
// outras opções.
break;
}
MinhaGrade.DataSource = source ;
MinhaGrade.DataBind();
}
</script>
<body>
<%-- Exibe as informações do DataGrid no corpo da página. --%>
<h3><font face="Verdana">Funcionários da empresa North Wind!!!</font></h3>
<BR>
<form runat=server>
<h3><font face="Verdana">Classificar por:</font></h3>
<asp:ListBox id="CampoClassificar"
Rows="1"
Width="200px"
runat="server">
<asp:ListItem>Cargo</asp:ListItem>
<asp:ListItem>Cidade</asp:ListItem>
<asp:ListItem selected="True">Código do Funcionário</asp:ListItem>
<asp:ListItem>Data de Nascimento</asp:ListItem>
<asp:ListItem>Nome</asp:ListItem>
</asp:ListBox>
<ASP:DataGrid id="MinhaGrade" runat="server"
Width="700"
BackColor="#ccccff"
BorderColor="black"
ShowFooter="false"
CellPadding=3
CellSpacing="0"
Font-Name="Verdana"
Font-Size="8pt"
HeaderStyle-BackColor="#aaaadd"
MaintainState="false"
/>
<BR>
<B>Clique para Classificar --></B></td>
<input type=submit value="Classificar" runat="server">
</form>
</body>
</html>
Digite o código da Listagem 10.5 e salve o mesmo em um arquivo chamado chap10ex5.aspx, na pasta chap10, dentro da pasta wwwroot, conforme descrito no item: “Check List para acompanhar os exemplos deste livro”, no Capítulo 6. Para acessar esta página utilize o seguinte endereço: http://localhost/chap10/chap10ex5.aspx você irá obter a página indicada na Figura 10.15.
Observe que a listagem está classificada em ordem crescente do Código do Funcionário. Vamos testar o nosso exemplo. Na lista “Classificar Por”, selecione Nome e dê um clique no botão Classificar. Você obterá uma listagem classificada pelo nome do funcionário, conforme indicado na Figura 10.15:
Comentários sobre o código do exemplo – Chap10Ex5.aspx.
<asp:ListBox id="CampoClassificar"
Rows="1"
Width="200px"
runat="server">
<asp:ListItem>Cargo</asp:ListItem>
<asp:ListItem>Cidade</asp:ListItem>
<asp:ListItem selected="True">Código do Funcionário</asp:ListItem>
<asp:ListItem>Data de Nascimento</asp:ListItem>
<asp:ListItem>Nome</asp:ListItem>
</asp:ListBox>
Observe que, por padrão, ao carregarmos a página, a opção Código do Funcionário vem selecionada – selected=”True”. Para maiores informações sobre o controle ListBox, consulte o Capítulo 9.
string aux = CampoClassificar.SelectedItem.Value;
switch (aux)
{
case "Cargo":
source.Sort="Cargo ASC";
break;
case "Cidade":
source.Sort="Cidade ASC";
break;
case "Código do Funcionário":
source.Sort="CódigoDoFuncionário ASC";
break;
case "Data de Nascimento":
source.Sort="DataDeNascimento ASC";
break;
case "Nome":
source.Sort="Nome ASC";
break;
default:
// outras opções.
break;
}
Primeiro criamos uma string aux e atribuímos a esta string, o valor do item selecionado na ListBox CampoClassificar: string aux = CampoClassificar.SelectedItem.Value;
Em seguida, utilizamos a string aux como variável de comparação para a instrução switch/case. Com base no valor da string aux, definimos a classificação dos dados do DataView. Para definir a classificação utilizamos a propriedade Sort do objeto source, objeto este que é do tipo DataView, como no exemplo a seguir: source.Sort="CódigoDoFuncionário ASC";
A propriedade Sort é uma String que contém o nome do campo seguido de um espaço e da palavra ASC para classificação crescente ou DESC para classificação decrescente. Nota: Para maiores informações sobre a instrução switch/case e sobre as demais instruções de controle de fluxo do C#, consulte o Capítulo 3. Exemplo 2: Neste exemplo faremos uma conexão com o banco de dados C:\Meus documentos\Northwind.mdb. Vamos retornar os seguintes campos da tabela Pedidos:
Os dados serão apresentados na página, utilizando um controle DataGrid. Também apresentaremos dois controles ListBox. O usuário poderá classificar os dados por um ou dois campos. Caso deseje classificar apenas por um campo, basta selecionar “Não classificar”, na segunda lista. Por padrão os dados são classificados apenas pelo NúmeroDoPedido. Também apresentaremos dois controles do tipo RadioButton, onde o usuário pode selecionar classificação Crescente ou Decrescente. Na Listagem 10.6 temos o código para o exemplo proposto. Listagem 10.6 – Um exemplo completo com DataView e o método Sort com dois campos. <%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<html>
<script language="C#" runat="server">
protected void Page_Load(Object Src, EventArgs E )
{
// Crio uma conexão com o banco de dados do Microsoft Access.
// C:\Meus documentos\NorthWind.mdb.
String DefineConexão= "PROVIDER=MICROSOFT.JET.OLEDB.4.0;" +
"DATA SOURCE=c:\\meus documentos\\NorthWind.mdb";
OleDbConnection MinhaConexão = new OleDbConnection(DefineConexão);
// Utilizamos um objeto DataAdapter para executar um comando SQL,
// o qual retorna todos os dados da tabela "Clientes".
OleDbDataAdapter MeuComando = new OleDbDataAdapter("SELECT NúmeroDoPedido," +
// Criamos e preenchemos um objeto DataSet.
// Observe que não temos mais o objeto Recordset,
// como era de praxe com o ASP 3.0.
DataSet ds = new DataSet();
// Utilizo o método Fill do objeto DataAdapter, para preencher
// o objeto DataSet, com os dados retornados pelo comando SQL.
MeuComando.Fill(ds);
// Conectamos um controle DataGrid com o DataSet criado anteriormente.
// MinhaGrade é o id (nome) de um controle do tipo
// DataGrid que está na seção de apresentação da página.
DataView source = new DataView(ds.Tables[0]);
// Crio uma variável string chamada aux.
// Na variável aux vamos concatenando os valores
// Selecionados nas listas CampoClassificar1 e
// CampoClassificar2, além das opções ASC ou DESC,
// dependendo da escolha do usuário.
string aux = CampoClassificar1.SelectedItem.Value;
// Se o usuário selecionou Crescente, concateno ASC,
// caso contrário, concateno DESC.
if (Crescente.Checked)
{
aux = aux + " ASC,";
}
else
{
aux = aux + " DESC,";
}
aux = aux + CampoClassificar2.SelectedItem.Value;
if (Crescente.Checked)
{
aux = aux + " ASC";
}
else
{
aux = aux + " DESC";
}
// Ordeno passando aux para a propriedade Sort.
source.Sort = aux;
MinhaGrade.DataSource = source ;
MinhaGrade.DataBind();
}
</script>
<body>
<%-- Exibe as informações do DataGrid no corpo da página. --%>
<h3><font face="Verdana">Funcionários da empresa North Wind!!!</font></h3>
<form runat=server>
<B>Clique para Classificar --></B></td>
<input type=submit value="Classificar" runat="server">
<BR>
<BR>
<table>
<tr>
<td>
<B><font face="Verdana">Classificar primeiro por:</font></B>
</td>
<td>
<B><font face="Verdana"> Em seguida por:</font></B>
</td>
<td>
<B><font face="Verdana"> Em qual ordem?</font></B>
</td>
</tr>
<tr>
<td>
<asp:ListBox id="CampoClassificar1"
Rows="1"
Width="200px"
runat="server">
<asp:ListItem>CidadeDeDestino</asp:ListItem>
<asp:ListItem>DataDoPedido</asp:ListItem>
<asp:ListItem selected="True">NúmeroDoPedido</asp:ListItem>
<asp:ListItem>PaísDeDestino</asp:ListItem>
</asp:ListBox>
</td>
<td>
<asp:ListBox id="CampoClassificar2"
Rows="1"
Width="200px"
runat="server">
<asp:ListItem>CidadeDeDestino</asp:ListItem>
<asp:ListItem selected="True">DataDoPedido</asp:ListItem>
<asp:ListItem>NúmeroDoPedido</asp:ListItem>
<asp:ListItem>PaísDeDestino</asp:ListItem>
</asp:ListBox>
</td>
<td>
<asp:RadioButton
id="Crescente"
Text="Crescente"
Checked="True"
GroupName="Ordem"
runat="server"
/>
<asp:RadioButton
id="Decrescente"
Text="Decrescente"
GroupName="Ordem"
runat="server"
/>
</td>
</tr>
</table>
<asp:DataGrid
id="MinhaGrade"
runat="server"
Width="700"
BackColor="#ccccff"
BorderColor="black"
ShowFooter="false"
CellPadding=3
CellSpacing="0"
Font-Name="Verdana"
Font-Size="8pt"
HeaderStyle-BackColor="#aaaadd"
MaintainState="false"
/>
<BR>
</form>
</body>
</html>
Digite o código da Listagem 10.6 e salve o mesmo em um arquivo chamado chap10ex6.aspx, na pasta chap10, dentro da pasta wwwroot, conforme descrito no item: “Check List para acompanhar os exemplos deste livro”, no Capítulo 6. Para acessar esta página utilize o seguinte endereço: http://localhost/chap10/chap10ex6.aspx você irá obter a página indicada na Figura 10.16.
Observe que a listagem está classificada primeiro em ordem crescente do NúmeroDoPedido, em seguida em ordem Crescente da DataDoPedido. Vamos testar o nosso exemplo. Na primeira lista selecione PaísDeDestino e na segunda lista selecione CidadeDeDestino. Para ordem de classificação clique na opção Decrescente. Dê um clique no botão Classificar. Você obterá uma listagem classificada pelo nome de Pedidos. Parte do resultado está indicado na Figura 10.17:
Comentários sobre o código do exemplo – Chap10Ex6.aspx.
string aux = CampoClassificar1.SelectedItem.Value;
// Se o usuário selecionou Crescente, concateno ASC,
// caso contrário, concateno DESC.
if (Crescente.Checked)
{
aux = aux + " ASC,";
}
else
{
aux = aux + " DESC,";
}
aux = aux + CampoClassificar2.SelectedItem.Value;
if (Crescente.Checked)
{
aux = aux + " ASC";
}
else
{
aux = aux + " DESC";
}
// Ordeno passando aux para a propriedade Sort.
source.Sort = aux;
Observe que no segundo if, não acrescentamos a vírgula após ASC ou DESC. No primeiro if acrescentamos, pois quando temos dois ou mais campos para definir a propriedade Sort, precisamos separar estes campos por vírgula. Se o usuário selecionar PaísDeDestino na primeira lista, CidadeDeDestino na segunda lista e Crescente, a variável aux terá o seguinte valor: aux = “PaísDeDestino ASC, CidadeDeDestino ASC”
Este valor é passado para a propriedade Sort para que a classificação seja feita de acordo com os critérios selecionados pelo usuário.
Exercício: Vou propor um exercício para o amigo leitor. Caso você tenha alguma dificuldade para resolvê-lo, é só entrar em contato através do e-mail: batisti@hotmail.com ou batisti@juliobattisti.com.br. Na página Chap10ex6.aspx podemos definir somente um critério de classificação para os campos selecionados nas duas listas, ou seja, somente Crescente ou somente Decrescente. O exercício que fica para o leitor é tornar o nosso exemplo um pouco mais flexível, de tal maneira que possamos escolher uma ordem de classificação independente para cada campo. Explico um pouco melhor: Selecionar classificação Crescente para o campo PaísDeDestino e dentro de um mesmo país, classificação Decrescente por CidadeDeDestino. Fica o desafio. Em caso de dúvida é só entrar em contato. |
||||||||||||||||||||||||||
« Lição anterior | Δ Página principal | ¤ Capítulos | Próxima lição » |
Contato: Telefone: (51) 3717-3796 | E-mail: webmaster@juliobattisti.com.br | Whatsapp: (51) 99627-3434
Júlio Battisti Livros e Cursos Ltda | CNPJ: 08.916.484/0001-25 | Rua Vereador Ivo Cláudio Weigel, 537 - Universitário, Santa Cruz do Sul/RS, CEP: 96816-208
Todos os direitos reservados, Júlio Battisti 2001-2024 ®
LIVRO: MACROS E PROGRAMAÇÃO VBA NO EXCEL 2016 - CURSO COMPLETO E PRÁTICO
DOMINE A PROGRAMAÇÃO VBA NO EXCEL - 878 PÁGINAS - CLIQUE AQUI