Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Manchmal ist es nützlich, eine Tabelle mit Informationen anzuzeigen, die in einer Sammlung von Geschäftsobjekten gespeichert sind. Wenn Sie ein DataGridView Steuerelement an eine solche Auflistung binden, wird jede öffentliche Eigenschaft in einer eigenen Spalte angezeigt, es sei denn, die Eigenschaft wurde als nicht durchbrochen mit einer BrowsableAttribute. Eine Auflistung von Customer
Objekten würde z. B. Spalten wie Name und Adresse aufweisen.
Wenn diese Objekte zusätzliche Informationen und Code enthalten, auf die Sie zugreifen möchten, können Sie sie über Zeilenobjekte erreichen. Im folgenden Codebeispiel können Benutzer mehrere Zeilen auswählen und auf eine Schaltfläche klicken, um eine Rechnung an jeden der entsprechenden Kunden zu senden.
So greifen Sie auf zeilengebundene Objekte zu
Verwenden Sie die DataGridViewRow.DataBoundItem-Eigenschaft.
void invoiceButton_Click(object sender, EventArgs e) { foreach (DataGridViewRow row in this.dataGridView1.SelectedRows) { Customer cust = row.DataBoundItem as Customer; if (cust != null) { cust.SendInvoice(); } } }
Private Sub InvoiceButton_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles InvoiceButton.Click For Each row As DataGridViewRow In Me.DataGridView1.SelectedRows Dim cust As Customer = TryCast(row.DataBoundItem, Customer) If cust IsNot Nothing Then cust.SendInvoice() End If Next End Sub
Beispiel
Das vollständige Codebeispiel enthält eine einfache Customer
Implementierung und bindet DataGridView an ein ArrayList, das einige Customer
Objekte enthält. Der Click Ereignishandler des System.Windows.Forms.Button Objekts muss über die Zeilen auf die Customer
Objekte zugreifen, da die Kundenkollektion außerhalb des Form.Load Ereignishandlers nicht zugänglich ist.
using System;
using System.Windows.Forms;
public class DataGridViewObjectBinding : Form
{
// These declarations and the Main() and New() methods
// below can be replaced with designer-generated code.
private Button invoiceButton = new Button();
private DataGridView dataGridView1 = new DataGridView();
// Entry point code.
[STAThreadAttribute()]
public static void Main()
{
Application.Run(new DataGridViewObjectBinding());
}
// Sets up the form.
public DataGridViewObjectBinding()
{
this.dataGridView1.Dock = DockStyle.Fill;
this.Controls.Add(this.dataGridView1);
this.invoiceButton.Text = "invoice the selected customers";
this.invoiceButton.Dock = DockStyle.Top;
this.invoiceButton.Click += new EventHandler(invoiceButton_Click);
this.Controls.Add(this.invoiceButton);
this.Load += new EventHandler(DataGridViewObjectBinding_Load);
this.Text = "DataGridView collection-binding demo";
}
void DataGridViewObjectBinding_Load(object sender, EventArgs e)
{
// Set up a collection of objects for binding.
System.Collections.ArrayList customers = new System.Collections.ArrayList();
customers.Add(new Customer("Harry"));
customers.Add(new Customer("Sally"));
customers.Add(new Customer("Roy"));
customers.Add(new Customer("Pris"));
// Initialize and bind the DataGridView.
this.dataGridView1.SelectionMode =
DataGridViewSelectionMode.FullRowSelect;
this.dataGridView1.AutoGenerateColumns = true;
this.dataGridView1.DataSource = customers;
}
// Calls the SendInvoice() method for the Customer
// object bound to each selected row.
void invoiceButton_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow row in this.dataGridView1.SelectedRows)
{
Customer cust = row.DataBoundItem as Customer;
if (cust != null)
{
cust.SendInvoice();
}
}
}
}
public class Customer
{
private String nameValue;
public Customer(String name)
{
nameValue = name;
}
public String Name
{
get
{
return nameValue;
}
set
{
nameValue = value;
}
}
public void SendInvoice()
{
MessageBox.Show(nameValue + " has been billed.");
}
}
Imports System.Windows.Forms
Public Class DataGridViewObjectBinding
Inherits Form
' These declarations and the Main() and New() methods
' below can be replaced with designer-generated code.
Private WithEvents InvoiceButton As New Button()
Private WithEvents DataGridView1 As New DataGridView()
' Entry point code.
<STAThreadAttribute()> _
Public Shared Sub Main()
Application.Run(New DataGridViewObjectBinding())
End Sub
' Sets up the form.
Public Sub New()
Me.DataGridView1.Dock = DockStyle.Fill
Me.Controls.Add(Me.DataGridView1)
Me.InvoiceButton.Text = "invoice the selected customers"
Me.InvoiceButton.Dock = DockStyle.Top
Me.Controls.Add(Me.InvoiceButton)
Me.Text = "DataGridView collection-binding demo"
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
' Set up a collection of objects for binding.
Dim customers As New System.Collections.ArrayList()
customers.Add(New Customer("Harry"))
customers.Add(New Customer("Sally"))
customers.Add(New Customer("Roy"))
customers.Add(New Customer("Pris"))
' Initialize and bind the DataGridView.
Me.DataGridView1.SelectionMode = _
DataGridViewSelectionMode.FullRowSelect
Me.DataGridView1.AutoGenerateColumns = True
Me.DataGridView1.DataSource = customers
End Sub
' Calls the SendInvoice() method for the Customer
' object bound to each selected row.
Private Sub InvoiceButton_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles InvoiceButton.Click
For Each row As DataGridViewRow In Me.DataGridView1.SelectedRows
Dim cust As Customer = TryCast(row.DataBoundItem, Customer)
If cust IsNot Nothing Then
cust.SendInvoice()
End If
Next
End Sub
End Class
Public Class Customer
Private nameValue As String
Public Sub New(ByVal name As String)
nameValue = name
End Sub
Public Property Name() As String
Get
Return nameValue
End Get
Set(ByVal value As String)
nameValue = value
End Set
End Property
Public Sub SendInvoice()
MsgBox(nameValue & " has been billed.")
End Sub
End Class
Code kompilieren
In diesem Beispiel ist Folgendes erforderlich:
- Verweise auf die Assemblys „System“ und „System.Windows.Forms“.
Siehe auch
.NET Desktop feedback