2012-04-10 2 views
0

datagridview가있는 winform을 디자인하고 있습니다.
해당 datagridview에 datatable을 할당하고 있습니다.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의 데이터 소스로 datatable을 할당하면 도움이되지 않습니다.

+0

:

다음은이 문제를 접근하는 방법의 샘플입니까? – ImGreg

답변

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 
관련 문제