2010-08-11 43 views
1

我有一個自定義項目類(基本上兩個與之相關的屬性的字符串值),如下:VB.NET使用LINQ移調一個ObservableCollection

Public Class itmDataDetails 
    Private _strDataName As String 
    Private _strDataValue As String 

    Public Property strDataName() As String 
     Get 
      Return _strDataName 
     End Get 
     Set(ByVal value As String) 
      _strDataName = value 
     End Set 
    End Property 

    Public Property strDataValue() As String 
     Get 
      Return _strDataValue 
     End Get 
     Set(ByVal value As String) 
      _strDataValue = value 
     End Set 
    End Property 

    Public Sub New(Optional ByVal strDataNameIn As String = "", Optional ByVal strDataValueIn As String = "") 
     strDataName = strDataNameIn 
     strDataValue = strDataValueIn 
    End Sub 

並圍繞這個一個ObservableCollection包裝類。我想將這個ObservableCollection轉換(即將數據名稱轉換爲列和它們的相關值到行中)以便在WPF ListView中顯示。

這是我到目前爲止有:

Private Sub Transpose() 
    Dim colGroupedValues = From x In MyBase.Items Group x By Key = x.strDataName Into Group Select strName = Key, colValues = Group 
    MyBase.Clear() 
    For Each x In colGroupedValues 
     MyBase.Add(x) 
    Next 
End Sub 

當然,這並不爲x工作不能被添加到的ObservableCollection(中itmDataDetails)。有關如何完成此任務的任何建議?我不太瞭解LINQ,所以我不會驚訝地發現我做錯了。

在此先感謝大家。

+0

不應該在WPF而不是在你的後端處理? – 2010-08-11 16:27:40

+0

如果你知道如何做,請告訴。 – Riddari 2010-08-11 16:51:00

回答

1

所以我想我在這裏問錯了問題。我真正想要的是將GridView中的每列設置爲DataMetaData的DataName部分,並將其相應的記錄設置爲DataValue。

要做到這一點,我也跟着在有用的指南:http://weblogs.asp.net/psheriff/archive/2010/03/08/using-a-wpf-listview-as-a-datagrid.aspx

所以整個事情被替換爲:

Private Sub FillDataList() 
    Dim strConnectionString As String = "INSERT CONNECTION INFO HERE" 
    Dim strCommandString As String = "INSERT QUERY HERE" 
    Dim objCommand As New OleDb.OleDbCommand(strCommandString) 
    Dim objConnection As New OleDb.OleDbConnection(strConnectionString) 
    Dim objAdapter As New OleDb.OleDbDataAdapter 
    Dim ds As New DataSet 

    objConnection.Open() 
    objAdapter.SelectCommand = objCommand 
    objCommand.Connection = objConnection 
    objAdapter.Fill(ds) 
    lsvData.View = BuildDataView(ds) 
    lsvData.DataContext = ds.Tables(0) 
    lsvData.SetBinding(ListView.ItemsSourceProperty, New Binding) 
    objConnection.Close() 

End Sub 

Public Function BuildDataView(ByVal ds As DataSet) As GridView 
    Dim gv As New GridView 
    For Each item As DataColumn In ds.Tables(0).Columns 
     Dim gvc As New GridViewColumn 
     gvc.DisplayMemberBinding = New Binding(item.ColumnName) 
     gvc.Header = item.ColumnName 
     gvc.Width = [Double].NaN 
     gv.Columns.Add(gvc) 
    Next 
    Return gv 
End Function 

這給我我想要的東西。對不起,如果有任何誤解。我仍然會接受比我的解決方案更好的解決方案(慈善等)

我還懷疑數據庫引擎在這裏並不重要,所以您可能可以爲Oracle數據庫做類似的事情等