2012-04-10 40 views
0

我正在設計具有datagridview的winform。
我將一個datatable分配給該datagridview。將字符串數組綁定到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; 

列項是一個字符串數組。我想在網格的一個coloum中顯示這個數組。 但是,通過簡單地將數據表分配爲datagridview的數據源並沒有幫助。

+0

究竟是怎麼回事? – ImGreg 2012-04-10 19:35:04

回答

0

你使用的語法有點奇怪。有重載會允許您添加一個新行並同時設置一個值。

此外,您不能將字符串數組作爲單元格的字段。您可以創建自定義類,而不是使用DataTable,並將它們的列表綁定到DataGridView。這樣你就可以擁有一個基礎字段,它是一個字符串數組,然後擁有一個公共屬性,可以根據需要設置它們的格式,然後在DataGridView中顯示它們。

下面是如何處理這個樣本:

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