Gewusst wie: Verwenden von "DataGrid" auf dem Pocket PC
Aktualisiert: November 2007
In diesem Beispiel werden Verfahren zum Verwenden des DataGrid-Steuerelements in Formularen veranschaulicht, um einen im DataGrid-Steuerelement ausgewählten Datensatz anzuzeigen und zu bearbeiten sowie der Datenbank einen neuen Datensatz hinzuzufügen. Zum Bearbeiten von DataGrid-Werten muss eine Benutzeroberfläche bereitgestellt werden, da .NET Compact Framework das Bearbeiten von DataGrid-Zellen nicht unterstützt. In diesem Beispiel wird die mit Visual Studio installierte Northwind-Datenbank verwendet.
![]() |
---|
Wenn Sie .NET Compact Framework-Version 2.0 verwenden, müssen Sie dem Projekt einen Verweis auf System.Windows.Forms.DataGrid.dll hinzufügen, um das DataGrid-Steuerelement verwenden zu können. |
Ein BindingSource-Objekt ermöglicht den Zugriff auf den aktuell ausgewählten Datensatz in der Datenbank, der an den Konstruktor des Zusammenfassungs- und Bearbeitungsformulars übergeben wird, sodass für alle Formulare dieselbe Bindungsquelle verwendet wird. Zusätzlich zu Steuerelementen für die Datenbindung kann ein BindingSource-Objekt ein DataRowView-Objekt der aktuellen Zeile zurückgeben. Mithilfe von DataRowView können Sie zu verschiedenen Zwecken auf Daten zugreifen, so beispielsweise, um den aktuellen Wert einer Spalte zu ermitteln. Beachten Sie, dass in diesem Beispiel zu Demonstrationszwecken nur zwei Spalten für das Zusammenfassungs- und das Bearbeitungsformular verwendet werden.
Sie können auch festlegen, dass Visual Studio automatisch ein Zusammenfassungs- und ein Bearbeitungsformular generieren soll, indem Sie im Kontextmenü des Smarttags eines DataGrid-Steuerelements die Option Datenformulare generieren auswählen. Weitere Informationen zu diesem Feature finden Sie unter Gewusst wie: Generieren von Zusammenfassungs- und Bearbeitungsansichten für Datenanwendungen (Geräte).
Diese Anwendung enthält die in der folgenden Tabelle beschriebenen Formulare. Zudem werden die zugehörigen Menüoptionen aufgeführt.
Formular |
Features |
Menüoptionen |
---|---|---|
Hauptformular (Form1) |
Zeigt das DataGrid-Steuerelement an. |
New Fügt der Datenbank einen neuen Datensatz hinzu und zeigt das EditView-Formular an. Edit Zeigt das EditView-Formular an. |
SummaryView |
Zeigt Spaltenwerte des aktuellen Datensatzes in einem für die Anzeige optimierten Format an. |
(keine) |
EditView |
Zeigt Spaltenwerte des aktuellen Datensatzes in einem für die Bearbeitung optimierten Format an. |
Done Nimmt im Dialogfeld vorgenommene Änderungen an, aktualisiert die Datenbank und zeigt das Hauptformular an. Cancel Schließt das Dialogfeld und zeigt das Hauptformular an. |
So erstellen Sie das Projekt und entwerfen das Hauptformular
Erstellen Sie in Visual Studio ein Smart Device-Projekt und legen Sie die Zielplattform auf Windows Mobile 5.0 Pocket PC SDK oder Windows Mobile 6 Professional SDK fest.
Klicken Sie im Menü Daten auf Neue Datenquelle hinzufügen.
Stellen Sie im Assistenten zum Konfigurieren von Datenquellen mithilfe von Microsoft SQL Server Compact Edition (.NET Framework-Datenanbieter für SQL Server CE) eine Verbindung mit der Northwind-Datenbank her. Die Northwind-Datenbank, Northwind.sdf, ist im Ordner \Program Files\Microsoft SQL Server Compact Edition\v3\Samples installiert.
Hinweis:
Unter Windows Vista müssen Sie Visual Studio als Administrator ausführen, um auf die Northwind-Datenbank zuzugreifen. Weitere Informationen zum Hinzufügen einer Datenbank finden Sie unter Gewusst wie: Hinzufügen einer Datenbank zu einem Geräteprojekt.
Wählen Sie im Assistenten auf der Seite Datenbankobjekte auswählen die Tabelle Products sowie alle darin enthaltenen Spalten aus.
Fügen Sie dem Formular aus der Toolbox ein DataGrid-Steuerelement hinzu. Legen Sie die Eigenschaften für Größe und Layout entsprechend Ihren Vorstellungen fest.
Legen Sie die DataSource-Eigenschaft auf die Products-Tabelle fest. Visual Studio fügt das NorthwindDataSet-Objekt, das ProductsBindingSource-Objekt und das ProductsTableAdapter-Objekt dem Projekt hinzu.
Entwerfen Sie das DataGrid-Steuerelement so, dass eine oder zwei Spalten der Tabelle angezeigt werden. Dazu fügen Sie der TableStyles-Auflistung ein DataGridTableStyle-Objekt hinzu. Klicken Sie im Bereich Eigenschaften auf die TableStyles-Eigenschaft. Mit dieser Aktion wird das Dialogfeld DataGridTableStyle-Auflistungs-Editor angezeigt. Nun können Sie wie folgt verfahren:
Fügen Sie der TableStyles-Auflistung ein DataGridTableStyle-Objekt hinzu.
Geben Sie für die MappingName-Eigenschaft "Products" an.
Klicken Sie auf die GridColumnStyle-Eigenschaft. Mit dieser Aktion wird das Dialogfeld DataGridColumnStyle-Auflistungs-Editor angezeigt.
Fügen Sie der GridColumnStyles-Auflistung ein DataGridTextBoxColumn-Objekt hinzu.
Klicken Sie auf die MappingName-Eigenschaft, und wählen Sie Product Name aus.
Legen Sie den gewünschten Headertext und die gewünschte Breite fest.
Wiederholen Sie diesen Vorgang für weitere Spalten.
Schließen Sie die Dialogfelder.
Fügen Sie dem Projekt zwei Formulare hinzu, eines für die Zusammenfassungsansicht und eines für die Bearbeitungsansicht. Nennen Sie das eine SummaryView und das andere EditView.
Fügen Sie den Konstruktoren des SummaryView-Formulars und des EditView-Formulars einen Parameter zum Übernehmen eines BindingSource-Objekts hinzu. Deklarieren Sie in diesen Formularen die globale Variable CurrentBindingSouce, die auf das im Konstruktor übergebene BindingSource-Objekt festgelegt werden muss. Beachten Sie, dass die Festlegung erfolgen muss, bevor die InitializeComponent-Methode aufgerufen wird.
Visual Basic-Entwickler müssen dem Formular Sub New hinzufügen. Zu diesem Zweck wird aus der Dropdownliste Methodenname oben rechts im Codebereich eine New-Methode hinzugefügt.
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(); }
Fügen Sie im Hauptformular ein MenuItem-Objekt mit dem Namen New(MenuItem1) und ein weiteres mit dem Namen Edit (MenuItem2) hinzu. Fügen Sie den folgenden Code für die Click-Ereignisse für New und Edit hinzu.
' Add new record. Private Sub MenuItem1_Click(ByVal sender As System.Object,_ ByVal e As System.EventArgs) Handles MenuItem1.Click ProductsBindingSource.AllowNew = True ProductsBindingSource.AddNew() ' Pass the binding source to the form. Dim EditViewDialog As New EditView(ProductsBindingSource) If EditViewDialog.ShowDialog() <> DialogResult.OK Then ProductsBindingSource.CancelEdit() Else ProductsBindingSource.EndEdit() Me.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 MenuItem2.Click ' Pass the binding source to the form. Dim EditViewDialog As New EditView(ProductsBindingSource) If EditViewDialog.ShowDialog() <> DialogResult.OK Then ProductsBindingSource.CancelEdit() Else ProductsBindingSource.EndEdit() Me.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); } }
Fügen Sie im Hauptformular Code für das KeyDown-Ereignis für das DataGrid-Steuerelement hinzu, das auftritt, wenn die Aktionstaste des Pocket PC gedrückt wird. Durch diese Aktion wird das SummaryView-Formular angezeigt.
' Action button pressed. 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 New SummaryView(ProductsBindingSource) SummaryViewDialog.ShowDialog() End If End Sub
// Action button pressed. private void dataGrid1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { SummaryView SummaryViewDialog = new SummaryView(productsBindingSource); SummaryViewDialog.ShowDialog(); } }
So erstellen Sie die Zusammenfassungsansicht
Fügen Sie dem SummaryView-Formular folgende Steuerelemente hinzu:
Ein Label-Steuerelement für die Überschrift Product Name, z. B. "Product Name:".
Ein Label-Steuerelement für den Wert von Product Name.
Ein Label-Steuerelement für den Wert von Discontinued, das nur dann angezeigt wird, wenn der Wert der Spalte Discontinued der Tabelle Products true lautet. Geben Sie als Bezeichnung "DISCONTINUED" ein, und weisen Sie rote Schrift zu.
Fügen Sie dem Konstruktor für das SummaryView-Formular den folgenden Code hinzu, um die Datenbindungen festzulegen. Deklarieren Sie eine Formularvariable mit dem Namen CurrentBindingSource, die auf die übergebene BindingSource-Instanz im Konstruktor des Formulars festgelegt werden muss. Durch ein DataRowView-Objekt wird festgelegt, dass die Bezeichnung Discontinued angezeigt wird, wenn der Wert der Spalte Discontinued true lautet.
'Dim CurrentBindingSource As BindingSource 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. ' 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; } }
So erstellen Sie die Bearbeitungsansicht
Fügen Sie im Projekt einen Verweis auf den Microsoft.WindowsCE.Forms-Namespace hinzu.
Ziehen Sie eine InputPanel-Komponente aus der Toolbox auf das EditView-Formular. Es wird nur eine Instanz benötigt, um dem Benutzer das Soft Input Panel (SIP) zur Eingabe von Text in ein Textfeld bereitzustellen.
Fügen Sie dem Formular folgende Steuerelemente hinzu:
Ein Label-Steuerelement für das Textfeld Product Name.
Ein TextBox-Steuerelement für die Spalte Product Name.
Ein CheckBox-Steuerelement für die Spalte Discontinued. Legen Sie die entsprechende ThreeState-Eigenschaft auf true fest.
Um Datenbindungen festzulegen, fügen Sie dem Konstruktor des Formulars nach dem InitializeComponent-Aufruf den folgenden Code hinzu. Dieser Code ermöglicht das Hinzufügen eines neuen Datensatzes oder das Bearbeiten eines vorhandenen Datensatzes. Wird ein neuer Datensatz hinzugefügt, bestimmt ein DataRowView-Objekt, ob die entsprechende Spalte Discontinued einen NULL-Wert aufweist. Außerdem legt es die NullValue-Eigenschaft der Bindung auf den Indeterminate-Wert der CheckState-Eigenschaft fest.
Public Sub New(ByVal bsource As BindingSource) CurrentBindingSource = bsource InitializeComponent() ' Add the bindings. ProductNameTextBox.DataBindings.Add("Text",_ CurrentBindingSource, "Product Name") Dim drView As DataRowView drView = CurrentBindingSource.Current If IsDBNull(drView("Discontinued")) Then DiscontinuedCheckBox.DataBindings.Add("CheckState",_ CurrentBindingSource, "Discontinued", True,_ DataSourceUpdateMode.OnValidation, _ CheckState.Indeterminate) Else DiscontinuedCheckBox.DataBindings.Add("Checked",_ CurrentBindingSource, "Discontinued") End If End Sub
public EditView(BindingSource bsource) { CurrentBindingSource = bsource; InitializeComponent(); CurrentBindingSource = bsource; InitializeComponent(); // Add the bindings. productNameTextBox.DataBindings.Add("Text", CurrentBindingSource, "Product Name"); DataRowView drView; drView = (DataRowView) CurrentBindingSource.Current; if (drView("Discontinued") == null) { DiscontinuedCheckBox.DataBindings.Add("CheckState", CurrentBindingSource, "Discontinued", true, DataSourceUpdateMode.OnValidation, CheckState.Indeterminate); } else { DiscontinuedCheckBox.DataBindings.Add("Checked", CurrentBindingSource, "Discontinued"); } }
Fügen Sie ein MenuItem-Objekt mit dem Namen Donehinzu, um die Datenbank mit den Änderungen zu aktualisieren und zum Hauptformular zurückzukehren.
' Done 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 // Done private void menuItem1_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.OK; this.Close(); }
Fügen Sie auf derselben Ebene wie Done ein MenuItem-Objekt mit dem Namen Cancelhinzu, um die Änderungen zu verwerfen und zum Hauptformular zurückzukehren.
' Cancel 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
// Cancel private void menuItem1_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; this.Close(); }
Kompilieren des Codes
Für dieses Beispiel sind Verweise auf die folgenden Namespaces erforderlich:
Siehe auch
Aufgaben
Gewusst wie: Verwenden von "DataGrid" auf dem Smartphone
Konzepte
Erstellen stark typisierter 'DataSets' (ADO.NET)
Weitere Ressourcen
Datenzugriff und XML-Unterstützung in .NET Compact Framework