Ligação a dados usando o controle de fonte de dados
Os controles da fonte de dados ampliam muito os recursos dos controles ligados a dados, como os controles GridView, FormView e DetailsView.Trabalhando juntos, os controles da fonte de dados e os controles ligados a dados permitem a você recuperar, modificar, executar paginação, classificar e filtrar dados de fontes de dados diferentes com pouco ou nenhum código.
Ligação Usando a Propriedade DataSourceID
Você pode trabalhar com dados em um controle vinculado a dados ligando o controle vinculado a dados à um controle da fonte de dados como um controle LinqDataSource, ObjectDataSource, ou SqlDataSource.O controle da fonte de dados se conecta a um fonte de dados como um banco de dados, classe de entidade, ou objeto de meia fila e, em seguida, recupera ou atualiza os dados.O controle associado a dados, pode então usar esses dados.Para executar a ligação, defina a propriedade DataSourceID do controle associado a dados para apontar para um controle da fonte de dados.Quando um controle associado a dados é vinculado a um controle da fonte de dados, pouco ou nenhum código adicional é necessário para operações de dados.O controle associado a dados pode automaticamente aproveitar os serviços de dados fornecidos pelo controle da fonte de dados.
Observação: |
---|
Em versões anteriores do ASP.NET, controles ligados a dados eram vinculados a dados usando a propriedade DataSource.Isso necessitava que você escrevesse código para manipular operações como exibição, paginação, classificação, edição e exclusão de dados.Embora você possa vincular controles a dados usando a propriedade DataSource (e usar o código existente), você pode também executar associação de dados usando a propriedade DataSourceID em vez disso.Em geral, o uso da propriedade DataSourceID fornece mais funcionalidade automática do que o uso da propriedade DataSource. |
O exemplo a seguir mostra um controle FormView que é vinculado a um controle LinqDataSource para exibir dados de um banco de dados.Para que o exemplo funcione, você deve criar classes que representam o banco de dados e a tabela.Você pode criar essas classes, usando o Object Relational Designer.Para obter mais informações, consulte Object Relational Designer (O/R Designer).
<%@ Page language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
<title>FormView Example</title>
</head>
<body>
<form id="form1" >
<h3>FormView Example</h3>
<table cellspacing="10">
<tr>
<td valign="top">
<asp:FormView ID="ProductsFormView"
DataSourceID="LinqDataSource1"
AllowPaging="true"
>
<HeaderStyle forecolor="white" backcolor="Blue" />
<ItemTemplate>
<table>
<tr>
<td align="right"><b>Product ID:</b></td>
<td><asp:Label id="ProductIDLabel" Text='<%# Eval("ProductID") %>' /></td>
</tr>
<tr>
<td align="right"><b>Product Name:</b></td>
<td><asp:Label id="ProductNameLabel" Text='<%# Eval("ProductName") %>' /></td>
</tr>
<tr>
<td align="right"><b>Category ID:</b></td>
<td><asp:Label id="CategoryIDLabel" Text='<%# Eval("CategoryID") %>' /></td>
</tr>
<tr>
<td align="right"><b>Quantity Per Unit:</b></td>
<td><asp:Label id="QuantityPerUnitLabel" Text='<%# Eval("QuantityPerUnit") %>' /></td>
</tr>
<tr>
<td align="right"><b>Unit Price:</b></td>
<td><asp:Label id="UnitPriceLabel" Text='<%# Eval("UnitPrice") %>' /></td>
</tr>
</table>
</ItemTemplate>
<PagerTemplate>
<table>
<tr>
<td><asp:LinkButton ID="FirstButton" CommandName="Page" CommandArgument="First" Text="<<" RunAt="server"/></td>
<td><asp:LinkButton ID="PrevButton" CommandName="Page" CommandArgument="Prev" Text="<" RunAt="server"/></td>
<td><asp:LinkButton ID="NextButton" CommandName="Page" CommandArgument="Next" Text=">" RunAt="server"/></td>
<td><asp:LinkButton ID="LastButton" CommandName="Page" CommandArgument="Last" Text=">>" RunAt="server"/></td>
</tr>
</table>
</PagerTemplate>
</asp:FormView>
</td>
</tr>
</table>
<asp:LinqDataSource
ContextTypeName="NorthwindDataContext"
TableName="Products"
ID="LinqDataSource1"
>
</asp:LinqDataSource>
</form>
</body>
</html>
<%@ Page language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
<title>FormView Example</title>
</head>
<body>
<form id="form1" >
<h3>FormView Example</h3>
<table cellspacing="10">
<tr>
<td valign="top">
<asp:FormView ID="ProductsFormView"
DataSourceID="LinqDataSource1"
AllowPaging="true"
>
<HeaderStyle forecolor="white" backcolor="Blue" />
<ItemTemplate>
<table>
<tr>
<td align="right"><b>Product ID:</b></td>
<td><asp:Label id="ProductIDLabel" Text='<%# Eval("ProductID") %>' /></td>
</tr>
<tr>
<td align="right"><b>Product Name:</b></td>
<td><asp:Label id="ProductNameLabel" Text='<%# Eval("ProductName") %>' /></td>
</tr>
<tr>
<td align="right"><b>Category ID:</b></td>
<td><asp:Label id="CategoryIDLabel" Text='<%# Eval("CategoryID") %>' /></td>
</tr>
<tr>
<td align="right"><b>Quantity Per Unit:</b></td>
<td><asp:Label id="QuantityPerUnitLabel" Text='<%# Eval("QuantityPerUnit") %>' /></td>
</tr>
<tr>
<td align="right"><b>Unit Price:</b></td>
<td><asp:Label id="UnitPriceLabel" Text='<%# Eval("UnitPrice") %>' /></td>
</tr>
</table>
</ItemTemplate>
<PagerTemplate>
<table>
<tr>
<td><asp:LinkButton ID="FirstButton" CommandName="Page" CommandArgument="First" Text="<<" RunAt="server"/></td>
<td><asp:LinkButton ID="PrevButton" CommandName="Page" CommandArgument="Prev" Text="<" RunAt="server"/></td>
<td><asp:LinkButton ID="NextButton" CommandName="Page" CommandArgument="Next" Text=">" RunAt="server"/></td>
<td><asp:LinkButton ID="LastButton" CommandName="Page" CommandArgument="Last" Text=">>" RunAt="server"/></td>
</tr>
</table>
</PagerTemplate>
</asp:FormView>
</td>
</tr>
</table>
<asp:LinqDataSource
ContextTypeName="NorthwindDataContext"
TableName="Products"
ID="LinqDataSource1"
>
</asp:LinqDataSource>
</form>
</body>
</html>
Para mais informações sobre controles da fonte de dados, consulte Controles Servidores da Web com fonte de dados.
Selecionando dados
A maneira que um controle da fonte de dados recupera dados é determinada pelo controle propriamente dito.O controle ObjectDataSource lê dados chamando os métodos especificado na propriedade SelectMethod.O exemplo a seguir mostra um controle ObjectDataSource que retorna dados usando o método GetAllEmployees da classe EmployeeLogic.
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.VB" Assembly="Samples.AspNet.VB" %>
<%@ Page language="vb" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>ObjectDataSource - Visual Basic Example</title>
</head>
<body>
<form id="Form1" method="post" >
<asp:gridview
id="GridView1"
datasourceid="ObjectDataSource1" />
<asp:objectdatasource
id="ObjectDataSource1"
selectmethod="GetAllEmployees"
typename="Samples.AspNet.VB.EmployeeLogic" />
</form>
</body>
</html>
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS" Assembly="Samples.AspNet.CS" %>
<%@ Page language="c#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>ObjectDataSource - C# Example</title>
</head>
<body>
<form id="Form1" method="post" >
<asp:gridview
id="GridView1"
datasourceid="ObjectDataSource1" />
<asp:objectdatasource
id="ObjectDataSource1"
selectmethod="GetAllEmployees"
typename="Samples.AspNet.CS.EmployeeLogic" />
</form>
</body>
</html>
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.JSL" Assembly="Samples.AspNet.JSL" %>
<%@ Page language="VJ#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>ObjectDataSource - VJ# Example</title>
</head>
<body>
<form id="Form1" method="post" >
<asp:gridview
id="GridView1"
datasourceid="ObjectDataSource1" />
<asp:objectdatasource
id="ObjectDataSource1"
selectmethod="GetAllEmployees"
typename="Samples.AspNet.JSL.EmployeeLogic" />
</form>
</body>
</html>
Para obter mais informações, consulte Visão geral sobre o controle de servidor Web ObjectDataSource.
Os controles SqlDataSource e AccessDataSource selecionam dados executando uma consulta SQL que é especificada na propriedade SelectCommand.O exemplo a seguir mostra um controle SqlDataSource que retorna dados da tabela Funcionários do banco de dados Northwind de exemplo:
<%@ Page language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
<title>ASP.NET Example</title>
</head>
<body>
<form id="form1" >
<asp:SqlDataSource
id="SqlDataSource1"
DataSourceMode="DataReader"
ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
SelectCommand="SELECT LastName FROM Employees">
</asp:SqlDataSource>
<asp:ListBox
id="ListBox1"
DataTextField="LastName"
DataSourceID="SqlDataSource1">
</asp:ListBox>
</form>
</body>
</html>
<%@ Page language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
<title>ASP.NET Example</title>
</head>
<body>
<form id="form1" >
<asp:SqlDataSource
id="SqlDataSource1"
DataSourceMode="DataReader"
ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
SelectCommand="SELECT LastName FROM Employees">
</asp:SqlDataSource>
<asp:ListBox
id="ListBox1"
DataTextField="LastName"
DataSourceID="SqlDataSource1">
</asp:ListBox>
</form>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
<title>ASP.NET Example</title>
</head>
<body>
<form id="form1" >
<asp:SqlDataSource
id="SqlDataSource1"
DataSourceMode="DataReader"
ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
SelectCommand="SELECT LastName FROM Employees">
</asp:SqlDataSource>
<asp:ListBox
id="ListBox1"
DataTextField="LastName"
DataSourceID="SqlDataSource1">
</asp:ListBox>
</form>
</body>
</html>
Para obter mais informações, consulte Selecionando Dados Usando o Controle SqlDataSource.
Quando você usa o controle LinqDataSource, se você não definir sua propriedade Select, o controle retorna dados para todas as propriedades na classe de dados.Você pode especificar um subconjunto de propriedades ou calcular novos valores, definindo a propriedade Select.O exemplo a seguir mostra um controle LinqDataSource que retorna três propriedades de uma fonte de dados que contém propriedades adicionais.
<asp:LinqDataSource
ContextTypeName="ExampleDataContext"
TableName="Products"
Select="new(Name, Category, Price)"
ID="LinqDataSource1"
>
</asp:LinqDataSource>
<asp:GridView
DataSourceID="LinqDataSource1"
ID="GridView1"
>
</asp:GridView>
<asp:LinqDataSource
ContextTypeName="ExampleDataContext"
TableName="Products"
Select="new(Name, Category, Price)"
ID="LinqDataSource1"
>
</asp:LinqDataSource>
<asp:GridView
DataSourceID="LinqDataSource1"
ID="GridView1"
>
</asp:GridView>
O XmlDataSource não permite que você selecione elementos específicos da fonte de dados XML.No entanto, você pode especificar um filtro usando a propriedade XPath.Para obter mais informações, consulte Filtrando dados usando o controle XmlDataSource.
Modificando Dados
Os controles LinqDataSource, ObjectDataSource, e SqlDataSource podem ser configurados para que os usuários possam modificar dados.Para obter mais informações, consulte Modificando Dados Usando Controles de Fonte de Dados.