Condividi tramite


Procedura: utilizzare l'oggetto DataGrid sullo Smartphone

Aggiornamento: novembre 2007

È possibile creare un'applicazione Smartphone analoga al programma Contatti di Smartphone.

Nota:

Se si utilizza una versione di .NET Compact Framework precedente alla versione 3.5, è necessario aggiungere un riferimento a System.Windows.Forms.DataGrid.dll nel progetto per utilizzarlo.

In questo esempio viene utilizzato il form principale con un elenco di nomi di prodotto in un controllo DataGrid ottenuti dal database Northwind installato con Visual Studio. Vi è inoltre contenuto un form di visualizzazione di riepilogo per la visualizzazione del record corrente e un form di visualizzazione di modifica per la modifica dei dati e l'aggiunta di nuovi record. Un oggetto BindingSource fornisce l'accesso al record correntemente selezionato nel database. Oltre ai controlli di associazione dati, un oggetto BindingSource può restituire un oggetto DataRowView della riga corrente. È possibile utilizzare DataRowView per accedere ai dati a vario scopo, ad esempio per determinare il valore corrente di una colonna.

In alternativa, è possibile impostare Visual Studio per la generazione automatica di form di riepilogo e di modifica scegliendo Genera form dati dal menu di scelta rapida per lo smart tag in un controllo DataGrid. A scopo dimostrativo, in questo esempio vengono utilizzate solo due colonne per i form di riepilogo e di modifica.

Nell'applicazione vengono utilizzati i form descritti nella tabella riportata di seguito. Sono inoltre elencate le relative opzioni di menu associate ai tasti softkey sinistro e destro dello Smartphone.

Form

Funzionalità

Tasto softkey sinistro

Tasto softkey destro

form principale

(Form1)

Consente di visualizzare una colonna della tabella nel controllo DataGrid nello stile di un elenco Contatti di Smartphone.

Se si preme il tasto Azione oppure Invio sulla tastiera con l'emulatore, viene visualizzato il form di visualizzazione di riepilogo.

Nuovo

Consente di aggiungere un record al database e di visualizzare il form EditView.

Edit

Consente di visualizzare il form EditView.

SummaryView

Consente di visualizzare i valori di colonna del record corrente ottimizzato per la visualizzazione.

Done

Consente di tornare al form principale.

(nessuno)

EditView

Consente di visualizzare i valori di colonna del record corrente ottimizzato per la modifica.

Done

Consente di accettare la finestra di dialogo, aggiornare il database e visualizzare il form principale.

Cancel

Consente di annullare la finestra di dialogo e visualizzare il form principale.

Per creare il progetto e progettare il form principale

  1. In Visual Studio, creare un progetto Smart Device e impostare la piattaforma di destinazione sull'SDK di Windows Mobile 5.0 per Smartphone o sull'SDK di Windows Mobile 6 Standard.

  2. Scegliere Aggiungi nuova origine dati dal menu Dati.

  3. Nella Configurazione guidata origine dati connettersi al database Northwind con Microsoft SQL Server Compact Edition (provider di dati .NET Framework per SQL Server CE). Il database Northwind, Northwind.sdf, si trova nella cartella C:\Programmi\Microsoft SQL Server Compact Edition\v3.5\Samples.

    Nota:

    In Windows Vista, è necessario eseguire Visual Studio come un amministratore per accedere al database Northwind. Per ulteriori informazioni sull'aggiunta dei dati a un database, vedere Procedura: aggiungere un database a un progetto per dispositivi.

  4. Nella pagina Seleziona oggetti di database della procedura guidata, selezionare la tabella Products e tutte le relative colonne.

  5. Dalla Casella degli strumenti aggiungere un controllo DataGrid al form.

  6. Per assegnare al controllo DataGrid un aspetto analogo all'elenco Contatti di Smartphone, impostarne le proprietà come descritto nella seguente tabella.

    Proprietà DataGrid

    Impostare su

    ColumnHeadersVisible

    False

    RowHeadersVisible

    False

    GridLineColor

    Window

    Location

    Struttura Point con -2 per x e -2 per y.

    Size

    Struttura Size con 184 per larghezza e 190 per altezza.

  7. Impostare la proprietà DataSource nella tabella Orders. Visual Studio aggiunge gli oggetti NorthwindDataSet, ProductsBindingSource e ProductsTableAdapter nel progetto.

  8. Fare clic sulla proprietà TableStyles nel riquadro Proprietà. Viene visualizzata la finestra di dialogo Editor dell'insieme DataGridTableStyle. Effettuare quindi le seguenti operazioni:

    1. Aggiungere un oggetto DataGridTableStyle all'insieme TableStyles.

    2. Specificare "Products" per la proprietà MappingName.

    3. Fare clic sulla proprietà GridColumnStyle. Viene visualizzata la finestra di dialogo Editor dell'insieme DataGridColumnStyle.

    4. Aggiungere un oggetto DataGridTextBoxColumn all'insieme GridColumnStyles.

    5. Fare clic sulla proprietà MappingName e selezionare Nome prodotto.

    6. Impostare Header Text e Width come desiderato.

    7. Ripetere tali operazioni per le altre colonne.

    8. Chiudere le finestre di dialogo.

  9. Aggiungere due form al progetto, uno per la visualizzazione di riepilogo e un altro per la visualizzazione di modifica. Denominarli rispettivamente SummaryView e EditView.

  10. Aggiungere un parametro ai costruttori dei form SummaryView e EditView per accettare un oggetto BindingSource. In questi form, dichiarare una variabile globale CurrentBindingSouce da impostare sull'oggetto BindingSource passato nel costruttore. La variabile deve essere impostata prima che venga chiamato il metodo InitializeComponent.

    Gli sviluppatori Visual Basic devono aggiungere un'istruzione Sub New al form aggiungendo un metodo New dall'elenco Nome metodo in alto a sinistra nel riquadro del codice.

    Dim CurrentBindingSource As BindingSource
    Public Sub New(ByVal bsource As BindingSource)
        CurrentBindingSource = bsource
        InitializeComponent()
    End Sub
    
    private BindingSource CurrentBindingSource;
    public SummaryView(BindingSource bsource)
    {
        CurrentBindingSource = bsource;
        InitializeComponent();
    }
    
  11. Nel form principale aggiungere un oggetto MenuItem denominato New(MenuItem1) e un altro denominato Edit (MenuItem2). Questi menu corrispondono ai tasti softkey sinistro e destro del dispositivo Smartphone. Aggiungere il codice fornito di seguito per gli eventi Click diNew e Edit.

    ' Add new record.
    Private Sub MenuItem1_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles MenuItem1.Click
        ProductsBindingSource.AddNew()
        Dim EditViewDialog As New EditView(ProductsBindingSource)
        If EditViewDialog.ShowDialog() <> DialogResult.OK Then
            ProductsBindingSource.CancelEdit()
        Else
            ProductsBindingSource.EndEdit()
            ProductsTableAdapter.Update(Me.NorthwindDataSet)
        End If
    End Sub
    ' Edit record.
    Private Sub MenuItem2_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles MenuItem1.Click
        Dim EditViewDialog As New EditView(ProductsBindingSource)
        If EditViewDialog.ShowDialog() <> DialogResult.OK Then
            ProductsBindingSource.CancelEdit()
        Else
            ProductsBindingSource.EndEdit()
            ProductsTableAdapter.Update(Me.NorthwindDataSet)
        End If
    End Sub
    
    // Add new record.
    private void menuItem1_Click(object sender, EventArgs e)
    {
        productsBindingSource.AllowNew = true;
        productsBindingSource.AddNew();
        EditView EditViewDialog = new EditView(productsBindingSource);
        if (EditViewDialog.ShowDialog() != DialogResult.OK)
        {
            productsBindingSource.CancelEdit();
        }
        else
        {
            ProductsBindingSource.EndEdit();
            this.productsTableAdapter.Update(this.northwindDataSet);
         }
    }
    // Edit record (Edit).
    private void menuItem2_Click(object sender, EventArgs e)
    {
        EditView EditViewDialog = new EditView(productsBindingSource);
        if (EditViewDialog.ShowDialog() != DialogResult.OK)
        {
            productsBindingSource.CancelEdit();
        }
        else
        {
            productsBindingSource.EndEdit();
            this.productsTableAdapter.Update(this.northwindDataSet);
        }
    }
    
  12. Nel form principale aggiungere codice per l'evento KeyDown generato quando l'utente preme il tasto Action sul dispositivo Smartphone. A seguito di tale operazione dell'utente, viene visualizzato il form SummaryView.

    Private Sub DataGrid1_KeyDown(ByVal sender As System.Object, _
        ByVal e As System.Windows.Forms.KeyEventArgs) _
        Handles DataGrid1.KeyDown
        If (e.KeyCode = Keys.Enter) Then
            Dim SummaryViewDialog As SummaryView = New SummaryView(ProductsBindingSource)
            Cursor.Current = Cursors.Default
            SummaryView.ShowDialog()
        End If
    End Sub
    
    private void dataGrid1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            SummaryView SummaryViewDialog = 
              new SummaryView(productsBindingSource);
            SummaryViewDialog.ShowDialog();
         }
    }
    
  1. Aggiungere i seguenti controlli al form:

    • Un controllo Label per l'intestazione di Product Name, ad esempio "Product Name:".

    • Un controllo Label per il valore di Product Name.

    • Un controllo Label per il valore Discontinued, visualizzato solo quando il valore della colonna Discontinued della tabella Products è true. Denominare l'etichetta "DISCONTINUED" utilizzando un carattere di colore rosso.

  2. Aggiungere il codice fornito di seguito al costruttore per il form SummaryView per impostare le associazioni dati. Dichiarare una variabile di form denominata CurrentBindingSource da impostare sull'istanza BindingSource passata nel costruttore del form. Un oggetto DataRowView determina che, se la colonna Discontinued è true, viene visualizzata l'etichetta Discontinued.

    Public Sub New(ByVal bsource As BindingSource)
        CurrentBindingSource = bsource
    
        ' This call is required by the Windows Forms Designer.
        InitializeComponent()
        ' Bind the label that shows the product name.
        ProductNameLabelVal.DataBindings.Add("Text", _
          CurrentBindingSource, "Product Name")
            ' Show the Discontinued label if
            ' that value is true in the database.
            Dim drView As DataRowView
            drView = CurrentBindingSource.Current
            If drView.Item("Discontinued") = True Then
                DiscontinuedLabel.Visible = True
            Else
                DiscontinuedLabel.Visible = False
            End If
        End Sub
    
    private BindingSource CurrentBindingSource;
    public SummaryView(BindingSource bsource)
    {
        CurrentBindingSource = bsource;
        InitializeComponent();
        // Bind the label that shows the product name.
        ProductNameLabelVal.DataBindings.Add("Text",
          CurrentBindingSource, "Product Name");
        // Show the Discontinued label if
        // that value is true in the database.
        DataRowView drView;
        drView = (DataRowView) CurrentBindingSource.Current;
        if (drView["Discontinued"] == true)
        {
            DiscontinuedLabel.Visible = true;
        }
        else
        {
            DiscontinuedLabel.Visible = false;
        }
    }
    
  3. Aggiungere un oggetto MenuItem denominato Done da associare al tasto softkey sinistro per la chiusura del form e il ritorno al form principale.

    Private Sub MenuItem1_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles MenuItem1.Click
        Me.Close
    End Sub
    
    private void MenuItem1_Click(object sender, System.EventArgs e)
    {
        this.Close();
    }
    

Per creare la visualizzazione di modifica

  1. Aggiungere un riferimento allo spazio dei nomi Microsoft.WindowsCE.Forms nel progetto. necessario per impostare la modalità InputMode del dispositivo Smartphone sui controlli casella di testo.

  2. Aggiungere i seguenti controlli al form:

    • Un controllo Label per la casella di testo Product Name.

    • Un controllo TextBox per la colonna Product Name.

    • Un controllo CheckBox per il valore di Discontinued.

  3. Per impostare le associazioni dati, aggiungere il seguente codice al costruttore del form dopo la chiamata a InitializeComponent. Mediante tale codice è possibile aggiungere un nuovo record o modificare un record esistente. Se viene aggiunto un nuovo record, un oggetto DataRowView determina se la colonna Discontinued contiene un valore null. Se il valore è null, la casella di controllo è impostata su false.

    Public Sub New(ByVal bsource As BindingSource)
        CurrentBindingSource = bsource
    
        ' This call is required by the Windows Forms Designer.
        InitializeComponent()
    
        ' Add any initialization after the InitializeComponent() call.
    
        ' Set the Smartphone input mode.
        InputModeEditor.SetInputMode(ProductNameTextBox,_
          InputMode.AlphaT9)
        ProductNameTextBox.DataBindings.Add("Text",_
          CurrentBindingSource, "Product Name")
    
        ' Determine the Discontinued value.
        ' If null, change to False.
        Dim drView As DataRowView
        drView = CurrentBindingSource.Current
        ' Set the bindings.
        If IsDBNull(drView("Discontinued")) Then
            DiscontinuedCheckBox.DataBindings.Add("CheckState",_
              CurrentBindingSource, "Discontinued", True,_
              DataSourceUpdateMode.OnValidation, False, "")
        Else
            DiscontinuedCheckBox.DataBindings.Add("Checked",_
              CurrentBindingSource, "Discontinued")
         End If
    End Sub
    
    public EditView(BindingSource bsource)
    {
        CurrentBindingSource = bsource;
        InitializeComponent();
        // Set the Smartphone input mode.
        InputModeEditor.SetInputMode(ProductNameTextBox,
          InputMode.AlphaT9);
        // Set the bindings.
        ProductNameTextBox.DataBindings.Add("Text",
          CurrentBindingSource,"Product Name");
        // Determine the Discontinued value.
        // If null, change to False.
        DataRowView drView;
        drView = (DataRowView) CurrentBindingSource.Current;
        if(drView("Discontinued")== null)
        {
            DiscontinuedCheckBox.DataBindings.Add("CheckState",
              CurrentBindingSource, "Discontinued",
              true,DataSourceUpdateMode.OnValidation,false,"");
        }
        else
        {
            DiscontinuedCheckBox.DataBindings.Add("Checked",
              CurrentBindingSource, "Discontinued");
        }
    }
    
  1. Aggiungere un oggetto MenuItem denominato Doneda associare al tasto softkey destro per l'aggiornamento del database con le modifiche e il ritorno al form principale.

    Private Sub MenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1.Click
        Me.DialogResult = DialogResult.OK
        Me.Close()
    End Sub
    
    Private void MenuItem1_Click(object sender, System.EventArgs e)
    {
        this.DialogResult = DialogResult.OK;
        this.Close();
    }
    
  1. Aggiungere un oggetto MenuItem denominato Cancelda associare al tasto softkey destro per l'annullamento delle modifiche e il ritorno al form principale.

    Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1.Click
        Me.DialogResult = DialogResult.Cancel
        Me.Close()
    End Sub
    
    Private void MenuItem2_Click(object sender, System.EventArgs e)
    {
        this.DialogResult = DialogResult.Cancel;
        this.Close();
    }
    

Compilazione del codice

In questo esempio sono richiesti riferimenti ai seguenti spazi dei nomi:

Vedere anche

Attività

Procedura: utilizzare l'oggetto DataGrid sul Pocket PC

Concetti

Generazione di DataSet fortemente tipizzati (ADO.NET)

Altre risorse

Accesso ai dati e supporto XML in .NET Compact Framework