【问题标题】:Bind an array of strings to a column of a datagridview将字符串数组绑定到 datagridview 的列
【发布时间】:2012-04-23 02:28:48
【问题描述】:

我正在设计一个带有 datagridview 的 winform。
我正在为该 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;

列项是一个字符串数组。我想在网格的一个列中显示这个数组。 但简单地将数据表分配为 datagridview 的数据源并没有帮助。

【问题讨论】:

    标签: .net winforms datagridview datatable


    【解决方案1】:

    您使用的语法有点奇怪。有一些重载允许您同时添加一个新行并设置一个值。

    此外,您不能将字符串数组作为单元格的字段。您可以创建一个自定义类,并将它们的列表绑定到 DataGridView,而不是使用 DataTable。这样你就可以有一个底层字段,它是一个字符串数组,然后有一个公共属性,可以根据需要格式化它们,然后在 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      • 1970-01-01
      • 1970-01-01
      • 2021-09-05
      • 2015-09-25
      • 2015-09-02
      相关资源
      最近更新 更多