将项添加到每列而不是每行的datatale

时间:2018-04-11 07:18:11

标签: vb.net datatable

半天的搜索至少使我的数据在wpf应用程序的数据网格中可读。 我的问题是(或者我认为是什么问题)将在我创建的列中添加数据。

我的数据来源来自字典of string, list(of string),其中我的字典key为标题,List为其项目,也是字典及其字典。 s内容没有固定的长度。

为了显示我的数据,我使用了DataTableDataGrid

的组合

这是我的代码段

Dim files As New Dictionary(Of String, List(Of String))
Dim dt As New DataTable
For Each item As KeyValuePair(Of String, List(Of String)) In files
    dt.Columns.Add(item.Key)
    For Each file As String In item.Value
        Dim dr As DataRow = dt.NewRow
        dr(dt.Columns(item.Key).Ordinal) = file
        dt.Rows.Add(dr)
     Next
Next
DGrid.ItemsSource = dt.AsDataView

它(稍微)有效,但是你们都猜到了所有后续显示的列项目在最后一个列表项目最后一次开始之后(看起来像楼梯)。

所以问题是我是否必须改变我存储数据的方式(字典)或者我遗漏了一些东西,这可以工作,因为有一种方法可以为每列添加数据而不是行?

更新

它并不漂亮,我知道那里有更好的解决方案。

我首先要做的只是渲染/实例化表格及其内容

Dim dt As New DataTable
    For Each item As KeyValuePair(Of String, List(Of String)) In files
        dt.Columns.Add(item.Key)

        For Each file As String In item.Value
            Dim dr As DataRow = dt.NewRow
            dr(item.Key) = Nothing
            dt.Rows.Add(dr)
        Next
    Next

然后编辑它的内容:

For Each item As KeyValuePair(Of String, List(Of String)) In files
        For file_index As Integer = 0 To item.Value.Count - 1
            dt.Rows(file_index)(item.Key) = item.Value(file_index)
        Next
    Next

这是一个糟糕的解决方案,但它确实有效。还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您需要为此重用现有行。只有当你有更多项目然后行时才添加新的。

Dim Files As New Dictionary(Of String, List(Of String))
Dim T As New DataTable, R As DataRow
For Each Pair As KeyValuePair(Of String, List(Of String)) In Files
    T.Columns.Add(Pair.Key)
    For i As Integer = 0 To Pair.Value.Count - 1
        If i < T.Rows.Count Then
            R = T.Rows(i)  
        Else
            R = T.NewRow()
            T.Rows.Add(R)
        End If
        R(Pair.Key) = Pair.Value(i)
    Next
Next