Compartilhar via


Demonstra Passo a passo: Selecionando e filtragem de um subconjunto de dados com os controles GridView e LinqDataSource

Essa explicação passo a passo descreve como usar o controle LinqDataSource para criar um conjunto de dados que não está limitados aos valores de uma única tabela de banco de dados.Você usará um controle LinqDataSource para selecionar um subconjunto dos dados da tabela, calcular valores novos a partir dos valores selecionados e recuperar valores das tabelas relacionadas.Você também irá filtrar quais registros serão retornados.Em seguida, você exibirá o novo conjunto de valores usando um controle GridView.

A explicação passo a passo ilustra o acesso a dados selecionando valores principalmente da tabela Produtos do banco de dados de exemplo AdventureWorks.A tabela Produtos contém colunas que são chaves estrangeiras a outras tabelas, e você irá recuperar dados dessas tabelas relacionadas.

Você usará o Object Relational Designer para criar uma classe que representa as tabelas de banco de dados que contêm os valores.O controle LinqDataSource irá interagir com essa classe gerada para recuperar e atualizar dados.

Pré-requisitos

Para implementar os procedimentos nessa explicação passo a passo, você precisará:

  • Visual Studio 2008 ou Visual Web Developer Express Edition.

  • Uma página Web ASP.NET.

  • SQL Server Express Edition.Se você possui o SQL Server instalado, você pode usa-lo, mas você deve fazer pequenos ajustes à alguns procedimentos.

  • O banco de dados AdventureWorks instalado no seu computador.Para baixar o banco de dados AdventureWorks, consulte Exemplos do SQL servidor 2005 e bancos de dados de amostra.

  • Uma cadeia de caracteres de conexão no site Web que se conecta ao banco de dados AdventureWorks.

Criando classes para representar entidades do banco de dados

Para trabalhar com dados do banco de dados usando o controle LinqDataSource, você cria classes que representam entidades do banco de dados.Você pode usar uma ferramenta no Visual Studio 2008 para criar essas classes.

Para criar classes para as tabelas do banco de dados AdventureWorks

  1. Se a página Web ainda não possui uma pasta App_Code, em Gerenciador de Soluções, clique com o botão direito no nome da página Web, clique Adicionar Pasta ASP.NET, e então clique em App_Code.

  2. Clique com o botão direito do mouse na pasta App_Code e então clique em Adicionar Novo Item

    A caixa de diálogo Add New Item é exibida.

  3. No Modelos Instalados do Visual Studio, selecione Classes LINQ para SQL, renomeie o arquivo para AdventureWorks.dbml, e então clique em Adicionar.

    O Object Relational Designer é exibido.

  4. No Gerenciado de Servidores, arraste a tabela Produto (Produção) para dentro da Janela Designer de Objeto Relacional.

    A tabela Product (Production) e suas colunas são representadas na janela do designer como uma entidade chamada Product.

  5. Arraste a tabela ProductSubCategory UnitMeasure e para a janela de designer.

    Essas tabelas e suas colunas são representadas como entidades na janela de designer.A relação entre roduct e as duas tabelas relacionadas é exibida com a linha pontilhada.

  6. Salve o arquivo AdventureWorks.dbml.

  7. Em Gerenciador de Soluções , abra o arquivo AdventureWorks.designer.cs ou AdventureWorks.designer.vb.

    O arquivo possui classes chamadas AdventureWorksDataContext, Product, ProductSubCategory e UnitMeasure.A classe Product contém propriedades chamadas ProductSubcategory, UnitMeasure e UnitMeasure1.Essas propriedades são marcadas como chaves estrangeiras usando o atributo AssociationAttribute.Eles retornam objetos que representam as tabelas ProductSubCategory e UnitMeasure.

    A propriedade UnitMeasure representa o relacionamento de chave estrangeira com o valor na coluna SizeUnitMeasureCode.A propriedade UnitMeasure1 representa o chave estrangeira para a coluna WeightUnitMeasureCode.

Selecionar quais colunas recuperar

Se você não especificar um valor para a propriedade Select, o controle LinqDataSource retorna todas as propriedades (colunas) da classe que representa a tabela de banco de dados.

Recuperar um subconjunto dos dados com o controle LinqDataSource

  1. Em Visual Studio, criar uma nova página Web ASP.NET e alternar para Modo de exibição Source.

  2. Na guia Dados da caixa de ferramentas, arraste um controle LinqDataSource e solte-dentro do elemento form sobre a página Web.

    Você pode deixar a propriedade como LinqDataSource1.

  3. Defina a propriedade ContextTypeName como AdventureWorksDataContext.

    A classe AdventureWorksDataContext é uma classe de contexto de dados que representa o banco de dados AdventureWorks.Ele contém uma propriedade para cada tabela no banco de dados.

  4. Defina a propriedade TableName como Products.

  5. Defina a propriedade Select como a seguir:

    new(Name, Size, StandardCost, ListPrice, DaysToManufacture)
    

    Definindo a propriedade Select, você restringir quais propriedades são recuperadas da classe Products.Quando você seleciona mais de uma propriedade de uma classe, você deve colocar as propriedade no operador new.Isso ocorre porque o controle LinqDataSource não está retornando uma instância da classe especificada na propriedade TableName.Em vez disso, ele retorna uma instância de uma classe criada dinamicamente que contém somente essas propriedades.

Filtrar Quais Registros a Recuperar

Se você não especificar um valor para a propriedade Where, o controle LinqDataSource retorna todos os registros da tabela de banco de dados.Você pode filtrar quais registros são retornados pela configuração da propriedade Where.Você pode filtrar por um valor estático, como ListPrice > 0 para retornar somente registros que têm valor da propriedade ListPrice maior que zero.Você também pode atribuir um valor em tempo de execução, adicionando parâmetros para a coleção WhereParameters.

Para filtrar os dados em tempo de execução com o controle LinqDataSource

  1. Adicionar um DropDownList o controle para a página da Web e defina seu AutoPostBack propriedade para true.

    Deixe o nome padrão DropDownList1 .

  2. Adicione quatro itens de lista para o controle DropDownList1 e defina seus valores como 0, 25, 100 e 400.

  3. Adicione um elemento WhereParameters entre a marca de abertura e a de fechamento do controle LinqDataSource.

  4. Adicione um controle ControlParameter à coleção WhereParameters.

  5. Definir o ControlID propriedade das ControlParameter o controle para DropDownList1, set the Name propriedade para SelectedPricee o conjuntoType propriedade para Int32.

    Em tempo de execução, o parâmetro SelectedPrice conterá o valor selecionado da DropDownList1.

  6. Defina a propriedade Where como ListPrice > @SelectedPrice para selecionar apenas os registros cujo valor ListPrice é maior que o valor selecionado pelo usuário.

    O exemplo a seguir mostra a marcação declarativa para os controles DropDownList e LinqDataSource.

    <asp:DropDownList AutoPostBack="true" ID="DropDownList1" >
      <asp:ListItem Value="0"></asp:ListItem>
      <asp:ListItem Value="25"></asp:ListItem>
      <asp:ListItem Value="100"></asp:ListItem>
      <asp:ListItem Value="400"></asp:ListItem>
    </asp:DropDownList>
    <asp:LinqDataSource 
      ContextTypeName="AdventureWorksDataContext" 
      TableName="Products" 
      Where="ListPrice > @SelectedPrice" 
      Select="new(Name, Size, StandardCost, ListPrice, DaysToManufacture)" 
      ID="LinqDataSource1" 
      >
      <WhereParameters>
        <asp:ControlParameter 
          Name="SelectedPrice" 
          DefaultValue="0" 
          ControlID="DropDownList1" 
          Type="Int32" />
      </WhereParameters>
    </asp:LinqDataSource>
    

Adicionando um Controle para Exibir Dados

Agora você pode adicionar um controle GridView e ligá-lo ao controle LinqDataSource.O controle GridView permite que os usuários exibam linhas de dados que são gerenciados pelo controle LinqDataSource.Você permitirá que os usuários classifiquem e naveguem através dos dados.

Para exibir o subconjunto de dados no controle GridView

  1. Na guia Dados da Caixa de Ferramentas, clique duas vezes no controle GridView para adicioná-lo à página.

  2. Defina a propriedade DataSourceID do controle GridView como LinqDataSource1 .

    Isso vincula o controle GridView aos dados retornados pelo controle LinqDataSource.

  3. Definir as propriedades AllowPaging e AllowSorting para true.

    Para classificação e paginação para trabalhar com um controle LinqDataSource, as propriedades AutoSort e AutoPage devem ser true.Por padrão, esses valores são ambos true.

  4. Defina a propriedade AutoGenerateColumns como false.

  5. Para especificar a ordem das colunas, crie um controle BoundField para cada propriedade (Name, Size, StandardCost,ListPrice e DaysToManufacture)que você especificou na propriedade Where do controle LinqDataSource.

    O exemplo a seguir mostra a marcação declarativa para o controle GridView.

    <asp:GridView 
      AllowPaging="true" 
      AllowSorting="true" 
      AutoGenerateColumns="false" 
      DataSourceID="LinqDataSource1" 
      ID="GridView1" 
      >
      <Columns>
        <asp:BoundField 
            DataField="Name" 
            HeaderText="Name" 
            SortExpression="Name" />
        <asp:BoundField 
            DataField="Size" 
            HeaderText="Size" 
            SortExpression="Size" />
        <asp:BoundField 
            DataField="StandardCost" 
            HeaderText="Standard Cost" 
            SortExpression="StandardCost" />
        <asp:BoundField 
            DataField="ListPrice" 
            HeaderText="List Price" 
            SortExpression="ListPrice" />
        <asp:BoundField 
            DataField="DaysToManufacture" 
            HeaderText="Days To Manufacture" 
            SortExpression="DaysToManufacture" />
      </Columns>
    </asp:GridView>
    
  6. Salve a página e pressione CTRL + F5 para exibir a página em um navegador.

    O controle GridView exibe as colunas para os registros atuais da tabela Product.Você pode classificar os registros clicando nos títulos das coluna, e você pode paginar através de registros, clicando nos números da página.

Usando valores dos dados de origem para calcular valores novos

Além de selecionar valores a partir de uma tabela de banco de dados, você pode calcular novos valores.Você pode fazer isso se você deseja exibir um valor que só pode ser derivado efetuando um cálculo em um valor da fonte de dados.Em seguida, você pode exibir os valores no controle GridView.

Para calcular e exibir novos valores a partir da fonte de dados.

  1. Altere o valor da propriedade Select para o seguinte:

    new(Name, 
        Size, 
        StandardCost, 
        ListPrice, 
        ListPrice - StandardCost as PriceDifference, 
        DaysToManufacture / 5.0 as WeeksToManufacture)
    

    Os valores adicionais, PriceDifference e WeeksToManufacture, não existem no banco de dados.Eles podem ser exibidos somente depois que um cálculo é efetuado sobre os valores de banco de dados.

  2. No controle GridView, adicione controles BoundField para as colunas PriceDifference e WeeksToManufacture e remova o controle BoundField para DaysToManufacture.

    O exemplo a seguir mostra a marcação declarativa para os controles BoundField calculados.

        <asp:BoundField 
            DataField="PriceDifference" 
            HeaderText="Price Difference" 
            SortExpression="Price Difference" />
        <asp:BoundField 
            DataField="WeeksToManufacture" 
            HeaderText="Weeks To Manufacture" 
            SortExpression="WeeksToManufacture" />
    
  3. Salve a página e pressione CTRL + F5 para exibir a página em um navegador.

    O controle GridView mostra as colunas para os registros atuais e os valores calculados da tabela Product.

Selecionar valores de tabelas relacionadas

Você pode recuperar valores de uma tabela e de quaisquer tabelas relacionadas com um controle LinqDataSource.Quando uma tabela tem relação de chave estrangeira com outras tabelas, Object Relational Designer gera um classe de entidade que contém propriedades para cada tabela relacionada.Essas propriedades retornam um objeto que representa a tabela relacionada.O objeto sua vez, contém propriedades para todas as colunas da tabela relacionada.Você pode selecionar valores de tabelas relacionadas ao acessar os objetos na classe que representam as tabelas relacionadas.

Para recuperar dados de tabelas relacionadas

  1. Defina a propriedade Select do controle LinqDataSource como a seguir:

    new(Name, 
        Size, 
        UnitMeasure.Name as SizeMeasureName, 
        Weight, 
        UnitMeasure1.Name as WeightMeasureName, 
        ProductSubcategory.Name as SubCategoryName)
    

    As propriedades SizeMeasureName,WeightMeasureName e SubCategoryName contêm valores de tabelas que possuem relações de chave estrangeira à tabela Products.

  2. Para retornar somente os produtos que têm uma unidade de medida de tamanho ou peso, defina a propriedade Where como a seguir:

    WeightUnitMeasureCode != null || SizeUnitMeasureCode != null
    

    A filtragem desses valores ilustra como as relações de chave estrangeira são gerenciadas pelo controle LinqDataSource.O operador || executa uma operação OR lógica.Portanto, somente registros que tenham um valor atribuído a pelo menos uma das chaves estrangeiras serão retornados.

    O exemplo a seguir mostra a marcação declarativa para o controle LinqDataSource.

    <asp:LinqDataSource 
      ContextTypeName="AdventureWorksDataContext" 
      TableName="Products" 
      Where="WeightUnitMeasureCode != null || 
             SizeUnitMeasureCode != null"
      Select="new(Name,
                  Size, 
                  UnitMeasure.Name as SizeMeasureName, 
                  Weight, 
                  UnitMeasure1.Name as WeightMeasureName, 
                  ProductSubCategory.Name as SubCategoryName)" 
      ID="LinqDataSource1" 
      >
    </asp:LinqDataSource>
    
  3. No controle GridView adicione um controle BoundField para cada coluna a exibir.Essas colunas são Name, Size, SizeMeasureName, Weight, WeightMeasureName e SubCategoryName.

    O exemplo a seguir mostra a marcação declarativa para o controle GridView.

    <asp:GridView 
      AllowPaging="true" 
      AllowSorting="true" 
      AutoGenerateColumns="false" 
      DataSourceID="LinqDataSource1" 
      ID="GridView1" 
      >
      <Columns>
        <asp:BoundField 
              DataField="Name" 
              HeaderText="Name" 
              SortExpression="Name" />
        <asp:BoundField 
              DataField="Size" 
              HeaderText="Size" 
              SortExpression="Size" />
        <asp:BoundField 
              DataField="SizeMeasureName" 
              HeaderText="Size Unit of Measurement" 
              SortExpression="SizeMeasureName" />
        <asp:BoundField 
              DataField="Weight" 
              HeaderText="Weight" 
              SortExpression="Weight" />
        <asp:BoundField 
              DataField="WeightMeasureName" 
              HeaderText="Weight Unit of Measurement" 
              SortExpression="WeightMeasureName" />
        <asp:BoundField 
              DataField="SubCategoryName" 
              HeaderText="Subcategory Name" 
              SortExpression="SubCategoryName" />
      </Columns>
    </asp:GridView>
    
  4. Salve a página e pressione CTRL + F5 para exibir a página em um navegador.

    O controle GridView exibe os valores das tabelas do Product, ProductSubCategory e UnitMeasure.Você pode classificar e paginar através dos registros.

Próximas etapas

Nesta explicação passo a passo, você aprendeu como personalizar quais colunas e quais registros são retornados em uma consulta usando o controle LinqDataSource.Você pode adicionar mais recursos para o controle LinqDataSource, como os seguintes:

Consulte também

Conceitos

Visão geral sobre o controle de servidor Web LinqDataSource