2012-04-10 2 views
0

Ich entwerfe eine Winform, die eine Datagridview haben.
Ich ordne dieser Datagridview eine Datentabelle zu.Binden Sie ein Array von Zeichenfolgen an eine Spalte einer Datagridview

DataTable dt = new DataTable(); 
dt.Columns.Add("items", typeof(string[])); 
dt.Columns.Add("dateSold", typeof(string)); 

for (int i = 0; i < 6; i++) 
{ 
    dt.Rows.Add(dt.NewRow()); 
    dt.Rows[i]["items"] = new string[] { "pencil" + i, "sharpner" + i }; 
    dt.Rows[i]["dateSold"] = "0" + i + "/0" + i + "/0" + i; 
} 
dataGridView1.DataSource = dt; 

Spaltenelemente sind ein Array von Strings. Ich möchte dieses Array in einem Raster des Rasters zeigen. Aber durch einfaches Zuweisen der Datentabelle als Datenquelle der Datagridview hilft nicht.

+0

Was genau geschieht? – ImGreg

Antwort

0

Die Syntax, die Sie verwenden, ist ein bisschen seltsam. Es gibt Überladungen, mit denen Sie eine neue Zeile hinzufügen und gleichzeitig einen Wert festlegen können.

Sie können auch kein String-Array als Feld für eine Zelle definieren. Anstatt eine DataTable zu verwenden, können Sie eine benutzerdefinierte Klasse erstellen und eine Liste an die DataGridView binden. Auf diese Weise können Sie ein zugrunde liegendes Feld haben, das ein Array von Zeichenfolgen ist, und dann über eine öffentliche Eigenschaft verfügen, die sie nach Wunsch formatiert und dann in der DataGridView anzeigt.

Hier ist ein Beispiel dafür, wie dies zu nähern:

Imports System.ComponentModel 

Public Class Form1 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     Dim sales As New BindingList(Of SaleTransaction) 

     For i As Integer = 1 To 6 
      sales.Add(New SaleTransaction(i)) 
     Next 

     ' None of this is necessary since the DGV will automatically read the public properties.. ' 

     DataGridView1.AutoGenerateColumns = False 

     Dim itemsColumn As New DataGridViewTextBoxColumn 

     itemsColumn.HeaderText = "Items" 
     itemsColumn.ValueType = GetType(String) 
     itemsColumn.DataPropertyName = "Items" 

     DataGridView1.Columns.Add(itemsColumn) 

     Dim dateColumn As New DataGridViewTextBoxColumn 

     dateColumn.HeaderText = "Date Sold" 
     dateColumn.ValueType = GetType(String) 
     dateColumn.DataPropertyName = "DateSold" 

     DataGridView1.Columns.Add(dateColumn) 

     DataGridView1.DataSource = sales 

    End Sub 

    Public Class SaleTransaction 
     Private _items As List(Of String) 

     Public ReadOnly Property Items As String 
      Get 
       Return String.Join(", ", _items) 
      End Get 
     End Property 

     Public Property DateSold As Date 

     Public Sub New(ByVal itemNumber As Integer) 
      Me._items = New List(Of String) From {"Pencil" & itemNumber, "Sharpner" & itemNumber} 
      Me.DateSold = Date.Parse(String.Format("0{0}/0{0}/0{0}", itemNumber)) 
     End Sub 

    End Class 

End Class 
Verwandte Themen