Condividi tramite


Procedura: utilizzare ASP.NET Dynamic Data nei controlli con associazione a dati e basati su modelli

Aggiornamento: novembre 2007

È possibile utilizzare ASP.NET Dynamic Data con controlli con associazione a dati che utilizzano modelli quali ListView, FormView e Repeater. Utilizzando i modelli, è possibile avere un controllo completo sul layout e l'aspetto dei dati nel controllo, ma le pagine sono specifiche per la tabella che si utilizza dal momento che i modelli non possono generare automaticamente colonne. Ciò si rivela utile quando si desidera creare pagine personalizzate che utilizzano le funzionalità di Dynamic Data con i controlli con associazione a dati basati su modelli.

Quando si utilizzano controlli con associazione a dati basati su modelli, è possibile aggiungere il controllo DynamicControl ai modelli per avvalersi delle funzionalità di Dynamic Data . Quando si utilizza un controllo DynamicControl, è possibile sfruttare le seguenti funzionalità di Dynamic Data:

Oltre a utilizzare il controllo DynamicControl nei controlli con associazione a dati basati su modelli, è possibile utilizzarlo in un campo TemplateField di un controllo GridView o DetailsView.

Run un esempio in linea di questa funzionalità (informazioni in lingua inglese).

Per aggiungere un controllo DynamicControl per visualizzare i dati

  1. Aggiungere un controllo DynamicControl a uno dei modelli del controllo con associazione a dati.

    Nota:

    In genere nel modello ItemTemplate dei controlli basati su modelli è possibile aggiungere campi di sola lettura perché si tratta del modello responsabile della visualizzazione dei dati. È tuttavia possibile aggiungere un campo di sola lettura agli altri modelli quando non si desidera che il valore del campo venga modificato.

  2. Impostare la proprietàDataField sul nome della colonna che si desidera visualizzare, come illustrato nell'esempio seguente:

    <asp:DynamicControl 
      DataField="ProductName"
       />
    
    Nota:

    Il valore predefinito per la proprietà Mode è ReadOnly, pertanto non è necessario impostare questa proprietà per visualizzare solo i dati.

  3. Ripetere i passaggi precedenti per ogni campo dati che si desidera visualizzare.

Per aggiungere un controllo DynamicControl per le operazioni di modifica

  1. Aggiungere un controllo DynamicControl al modello EditItemTemplate del controllo con associazione a dati o al campo modello.

  2. Impostare la proprietà DataField sul nome della colonna che si desidera modificare.

  3. Impostare la proprietà Mode su Edit, come mostrato nell'esempio seguente:

    <asp:DynamicControl 
      DataField="ProductName"
      Mode="Edit"
       />
    
  4. Ripetere i passaggi precedenti per ogni campo dati che si desidera modificare.

Per aggiungere un controllo DynamicControl per le operazioni di inserimento

  1. Aggiungere un controllo DynamicControl al modello InsertItemTemplate del controllo con associazione a dati o al campo modello.

  2. Impostare la proprietà DataField sul nome della colonna per cui si desidera inserire i dati.

  3. Impostare la proprietà Mode su Insert, come mostrato nell'esempio seguente:

    <asp:DynamicControl 
      DataField="ProductName"
      Mode="Insert"
       />
    
  4. Ripetere i passaggi precedenti per ogni campo dati per cui si desidera inserire i dati.

Esempio

Nell'esempio seguente viene mostrato un controllo FormView che utilizza i controlli DynamicControl per creare una pagina personalizzata che utilizza le funzionalità di Dynamic Data.

<%@ Page Language="VB" %>

<script >

  Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs)
    DynamicDataManager1.RegisterControl(FormView1)
  End Sub

</script>

<!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>DynamicControl and Templated Data-Bound Controls Sample</title>
  <link href="~/Site.css" rel="stylesheet" type="text/css" />
</head>
<body>
  <form id="form1" >
    <div>

      <h2>Address Table</h2>

      <asp:DynamicDataManager ID="DynamicDataManager1" 
        AutoLoadForeignKeys="true" />

      <asp:FormView ID="FormView1"  
        DataSourceID="FormDataSource" 
        AllowPaging="true">
        <ItemTemplate>
          <table>
            <tr>
              <td>Address Line 1:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine1" />
              </td>
            </tr>
            <tr>
              <td>Address Line 2:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine2" />
              </td>
            </tr>
            <tr>
              <td>City:</td>
              <td>
                <asp:DynamicControl  DataField="City" />
              </td>
            </tr>
            <tr>
              <td>State/Province:</td>
              <td>
                <asp:DynamicControl  DataField="StateProvince" />
              </td>
            </tr>
            <tr>
              <td>Country:</td>
              <td>
                <asp:DynamicControl  DataField="CountryRegion" />
              </td>
            </tr>
            <tr>
              <td>Postal Code:</td>
              <td>
                <asp:DynamicControl  DataField="PostalCode" />
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <asp:LinkButton ID="InsertButton"  CommandName="New" CausesValidation="false" Text="New" />
                <asp:LinkButton ID="EditButton"  CommandName="Edit" CausesValidation="false" Text="Edit" />
                <asp:LinkButton ID="DeleteButton"  CommandName="Delete" CausesValidation="false" Text="Delete" />
              </td>
            </tr>
          </table>
        </ItemTemplate>
        <EditItemTemplate>
          <table>
            <tr>
              <td>Address Line 1:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine1" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>Address Line 2:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine2" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>City:</td>
              <td>
                <asp:DynamicControl  DataField="City" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>State/Province:</td>
              <td>
                <asp:DynamicControl  DataField="StateProvince" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>Country:</td>
              <td>
                <asp:DynamicControl  DataField="CountryRegion" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>Postal Code:</td>
              <td>
                <asp:DynamicControl  DataField="PostalCode" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <asp:LinkButton ID="UpdateButton"  CommandName="Update">Update</asp:LinkButton>
                <asp:LinkButton ID="CancelEditButton"  CommandName="Cancel" CausesValidation="false">Cancel</asp:LinkButton>
              </td>
            </tr>
          </table>
        </EditItemTemplate>
        <InsertItemTemplate>
          <table>
            <tr>
              <td>Address Line 1:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine1" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>Address Line 2:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine2" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>City:</td>
              <td>
                <asp:DynamicControl  DataField="City" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>State/Province:</td>
              <td>
                <asp:DynamicControl  DataField="StateProvince" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>Country:</td>
              <td>
                <asp:DynamicControl  DataField="CountryRegion" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>Postal Code:</td>
              <td>
                <asp:DynamicControl  DataField="PostalCode" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <asp:LinkButton ID="InsertButton"  CommandName="Insert" Text="Insert" />
                <asp:LinkButton ID="CancelInsertButton"  CommandName="Cancel" CausesValidation="false" Text="Cancel" />
              </td>
            </tr>
          </table>
        </InsertItemTemplate>
        <PagerSettings Position="Bottom" Mode="NumericFirstLast" />
      </asp:FormView>

      <!-- This example uses Microsoft SQL Server and connects   -->
      <!-- to the AdventureWorksLT sample database.              -->
      <asp:LinqDataSource ID="FormDataSource" 
        TableName="Addresses" 
        ContextTypeName="AdventureWorksLTDataContext"
        EnableDelete="true"
        EnableInsert="true"
        EnableUpdate="true">
      </asp:LinqDataSource>

    </div>
  </form>
</body>
</html>
<%@ Page Language="C#" %>

<script >
    protected void Page_Init(object sender, EventArgs e) {
        DynamicDataManager1.RegisterControl(FormView1);
    }
</script>

<!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>DynamicControl and Templated Data-Bound Controls Sample</title>
  <link href="~/Site.css" rel="stylesheet" type="text/css" />
</head>
<body>
  <form id="form1" >
    <div>

      <h2>Address Table</h2>

      <asp:DynamicDataManager ID="DynamicDataManager1" 
        AutoLoadForeignKeys="true" />

      <asp:FormView ID="FormView1"  
        DataSourceID="FormDataSource" 
        AllowPaging="true">
        <ItemTemplate>
          <table>
            <tr>
              <td>Address Line 1:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine1" />
              </td>
            </tr>
            <tr>
              <td>Address Line 2:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine2" />
              </td>
            </tr>
            <tr>
              <td>City:</td>
              <td>
                <asp:DynamicControl  DataField="City" />
              </td>
            </tr>
            <tr>
              <td>State/Province:</td>
              <td>
                <asp:DynamicControl  DataField="StateProvince" />
              </td>
            </tr>
            <tr>
              <td>Country:</td>
              <td>
                <asp:DynamicControl  DataField="CountryRegion" />
              </td>
            </tr>
            <tr>
              <td>Postal Code:</td>
              <td>
                <asp:DynamicControl  DataField="PostalCode" />
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <asp:LinkButton ID="InsertButton"  CommandName="New" CausesValidation="false" Text="New" />
                <asp:LinkButton ID="EditButton"  CommandName="Edit" CausesValidation="false" Text="Edit" />
                <asp:LinkButton ID="DeleteButton"  CommandName="Delete" CausesValidation="false" Text="Delete" />
              </td>
            </tr>
          </table>
        </ItemTemplate>
        <EditItemTemplate>
          <table>
            <tr>
              <td>Address Line 1:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine1" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>Address Line 2:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine2" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>City:</td>
              <td>
                <asp:DynamicControl  DataField="City" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>State/Province:</td>
              <td>
                <asp:DynamicControl  DataField="StateProvince" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>Country:</td>
              <td>
                <asp:DynamicControl  DataField="CountryRegion" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>Postal Code:</td>
              <td>
                <asp:DynamicControl  DataField="PostalCode" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <asp:LinkButton ID="UpdateButton"  CommandName="Update">Update</asp:LinkButton>
                <asp:LinkButton ID="CancelEditButton"  CommandName="Cancel" CausesValidation="false">Cancel</asp:LinkButton>
              </td>
            </tr>
          </table>
        </EditItemTemplate>
        <InsertItemTemplate>
          <table>
            <tr>
              <td>Address Line 1:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine1" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>Address Line 2:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine2" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>City:</td>
              <td>
                <asp:DynamicControl  DataField="City" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>State/Province:</td>
              <td>
                <asp:DynamicControl  DataField="StateProvince" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>Country:</td>
              <td>
                <asp:DynamicControl  DataField="CountryRegion" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>Postal Code:</td>
              <td>
                <asp:DynamicControl  DataField="PostalCode" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <asp:LinkButton ID="InsertButton"  CommandName="Insert" Text="Insert" />
                <asp:LinkButton ID="CancelInsertButton"  CommandName="Cancel" CausesValidation="false" Text="Cancel" />
              </td>
            </tr>
          </table>
        </InsertItemTemplate>
        <PagerSettings Position="Bottom" Mode="NumericFirstLast" />
      </asp:FormView>

      <!-- This example uses Microsoft SQL Server and connects   -->
      <!-- to the AdventureWorksLT sample database.              -->
      <asp:LinqDataSource ID="FormDataSource" 
        TableName="Addresses" 
        ContextTypeName="AdventureWorksLTDataContext"
        EnableDelete="true"
        EnableInsert="true"
        EnableUpdate="true">
      </asp:LinqDataSource>

    </div>
  </form>
</body>
</html>

Compilazione del codice

Per questo esempio sono necessari i seguenti requisiti:

  • Sito Web Dynamic Data o applicazione Web Dynamic Data.

  • Database di esempio AdventureWorks o AdventureWorksLT. Per informazioni su come scaricare e installare il database di esempio di SQL Server, vedere Microsoft SQL Server Product Samples: Database (informazioni in lingua inglese) nel sito Web CodePlex. Assicurarsi di installare la versione del database di esempio appropriata per la versione di SQL Server in esecuzione (SQL Server 2005 o SQL Server 2008).

  • Classe LINQ to SQL configurata per l'accesso alla tabella di indirizzi del database AdventureWorks o AdventureWorksLT.

  • Il contesto dati viene registrato con il motore di Dynamic Data nel file Global.asax.

  • Le colonne rowguid e ModifiedData della tabella di indirizzi sono impostate per essere automaticamente generate nella Progettazione relazionale oggetti. In altre parole, verificare che la proprietà IsDbGenerated per queste due colonne sia impostata su true. Ciò è necessario solo per l'operazione di inserimento.

Programmazione efficiente

Le seguenti condizioni possono generare un'eccezione:

  • Database non disponibile

Vedere anche

Concetti

Cenni preliminari su ASP.NET Dynamic Data

Cenni preliminari sul modello di ASP.NET Dynamic Data

Riferimenti

DynamicControl

DetailsView

FormView

GridView

ListView

Repeater