2010-08-11 78 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数据库做类似的事情等