OK... I have kindof a sepecialised case. I am getting log data back from a DB that has 5 static properties and then any number of variable properties. The class looks like this:
Prop 1, prop 2, prop 3, collection of properties 4-n... all possible properties are known.
Based on the type of log, properties 4-n will be different, again, all possible properties will be known.
The values of these properties will always be text.
binding properties 1-3 are easy... but is it possible to bind column values to items within a sub collection? for example, key="{Binding PropCollection.Prop4}"
Thanks in advance for any help
Marc
at the moment my test page is throwing the exception posted a couple posts back
also
Brian Lagunas said: I actually have a more elegant solution to your problem and it does not involve writing any custom classes. I wrote a blog post on this issue. The blog is geared towards the DataGrid from the Silverlight Toolkit, but you can easily modify it to use the XamWebGrid like I do. The solution is here. Let me know if this is what you were looking for.
I actually have a more elegant solution to your problem and it does not involve writing any custom classes. I wrote a blog post on this issue. The blog is geared towards the DataGrid from the Silverlight Toolkit, but you can easily modify it to use the XamWebGrid like I do.
The solution is here.
Let me know if this is what you were looking for.
i was able to reproduce this with the SL Grid, tried to write the same test with the IG grid and cant even get the data to show up
i am not sure what you are refering to?
as for as going to 2010.1 i am not sure i am permitted to do that yet, got to get the bosses approval for that.
if that would be a better solutions, please share
KEEP IN MIND THIS IS ALL TEST CODE''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Public Structure TwoInts
Private _int1 As Integer Private _int2 As Integer Private _int3 As Integer
Public Property Int1() As Integer Get Return Me._int1 End Get Set(ByVal value As Integer) Me._int1 = value End Set End Property
Public Property Int2() As Integer Get Return Me._int2 End Get Set(ByVal value As Integer) Me._int2 = value End Set End Property
Public Property Parent() As Integer Get Return Me._int3 End Get Set(ByVal value As Integer) Me._int3 = value End Set End Property
Public Overloads Overrides Function Equals(ByVal obj As Object) As Boolean If obj Is Nothing Then Return False End If Return Me.Int1 = DirectCast(obj, TwoInts).Int1 End FunctionEnd Structure'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Public Class testList
Private _str As String
Property Str() As String Get Return _str End Get Set(ByVal value As String) _str = value End Set End Property
Private _lst As List(Of TwoInts) Property ListInts() As List(Of TwoInts) Get Return _lst End Get Set(ByVal value As List(Of TwoInts)) _lst = value End Set End PropertyEnd Class
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Imports Infragistics.Silverlight.ControlsImports Infragistics.Silverlight.Controls.PrimitivesImports System.Windows.Data
Public Class MyColumn Inherits TemplateColumn
Protected Overloads Overrides Function GenerateContentProvider() As ColumnContentProviderBase
Return New MyColumnContentProvider() End Function
End Class
Public Class MyColumnContentProvider Inherits TemplateColumnContentProvider
Public Overloads Overrides Function ResolveDisplayElement(ByVal cell As Cell, _ ByVal cellBinding As Binding) _ As FrameworkElement
Dim elem As FrameworkElement = MyBase.ResolveDisplayElement(cell, cellBinding)
If elem IsNot Nothing Then
Dim mdo As testList = TryCast(cell.Row.Data, testList)
If mdo IsNot Nothing Then
Dim qry = From p In mdo.ListInts Where p.Int1 = cell.Column.Key Select p '(From p In mdo.ListInts Where p.Int1 = cell.Column.Key Select p).Count() > 1 If qry.Count() > 0 Then
elem.DataContext = (From p In mdo.ListInts _ Where p.Int1 = cell.Column.Key Select p).SingleOrDefault()
'mdo.ListInts(cell.Column.Key) Else elem.DataContext = Nothing End If
'mdo.ListInts.GetType.GetProperties(0) '.GetType.GetProperties(0) '.GetType.GetProperties(cell.Column.Key) 'mdo.GetType.FindMembers(Reflection.MemberTypes.Property, cell.Column.Key) End If End If
Return elem End Function
Protected Overloads Overrides Function ResolveEditorControl(ByVal cell As Cell, _ ByVal editorValue As Object, _ ByVal availableWidth As Double, _ ByVal availableHeight As Double, _ ByVal editorBinding As Binding) _ As System.Windows.FrameworkElement
Dim editor As FrameworkElement = MyBase.ResolveEditorControl(cell, editorValue, _ availableWidth, _ availableHeight, _ editorBinding)
If editor IsNot Nothing Then
Dim qry = From p In mdo.ListInts Where p.Int1 = cell.Column.Key Select p
If qry.Count() > 0 Then
editor.DataContext = (From p In mdo.ListInts _ Where p.Int1 = cell.Column.Key Select p).SingleOrDefault()
'mdo.ListInts(cell.Column.Key) Else editor.DataContext = Nothing End If End If End If
Return editor
'Return MyBase.ResolveEditorControl(cell, editorValue, availableWidth, availableHeight, editorBinding) End FunctionEnd Class
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Generate data and columns in test page loaded event'''''''''''''' Dim li As New List(Of TwoInts) Dim li2 As New List(Of TwoInts) Dim li3 As New List(Of TwoInts) Dim li4 As New List(Of TwoInts)
Dim l As New List(Of testList) Dim val2 As Integer = 100
For x As Integer = 0 To 5
li.Add(New TwoInts() With {.Int1 = x, .Int2 = 111}) 'val2 += 1 Next
For x As Integer = 6 To 8
li2.Add(New TwoInts() With {.Int1 = x, .Int2 = 222}) Next
For x As Integer = 3 To 9
li3.Add(New TwoInts() With {.Int1 = x, .Int2 = 333}) Next
For x As Integer = 9 To 13
li4.Add(New TwoInts() With {.Int1 = x, .Int2 = 444}) Next
l.Add(New testList() With {.Str = "Row One", .ListInts = li}) l.Add(New testList() With {.Str = "Row Two", .ListInts = li2}) l.Add(New testList() With {.Str = "Row Three", .ListInts = li3}) l.Add(New testList() With {.Str = "Row Four", .ListInts = li4})
Dim template As DataTemplate = LayoutRoot.Resources("colTemplate") Dim editTemplate As DataTemplate = LayoutRoot.Resources("colTemplateEdit")
For Each y In li
If dg.Columns.Item(y.Int1.ToString()) Is Nothing Then
dg.Columns.Add(New MyColumn() With {.Key = y.Int1, _ .ItemTemplate = template, _ .EditorTemplate = editTemplate, _ .Width = New ColumnWidth(35, False)}) End If Next
For Each y In li2
For Each y In li3
For Each y In li4
dg.ItemsSource = l
''''''''''''''''''''''''''''''''''''''''''''''''''
<DataTemplate x:Key="colTemplate">
<TextBlock Text="{Binding Int2}"></TextBlock>
</DataTemplate> <DataTemplate x:Key="colTemplateEdit">
<TextBox Text="{Binding Int2}" TextAlignment="Right"></TextBox>
</DataTemplate>
'''''''''''''''''''''''''''''''''' <igGrid:XamWebGrid x:Name="dg" Margin="10" AutoGenerateColumns="False" Background="Transparent" VerticalAlignment="Top" Grid.Row="1" Grid.Column="0">
<igGrid:XamWebGrid.Columns>
<igGrid:TextColumn Key="Str" Width="75" /> </igGrid:XamWebGrid.Columns>
<igGrid:XamWebGrid.EditingSettings> <igGrid:EditingSettings AllowEditing="Cell" IsMouseActionEditingEnabled="SingleClick" IsOnCellActiveEditingEnabled="true" /> </igGrid:XamWebGrid.EditingSettings> </igGrid:XamWebGrid>
If this is refering to my Unbound column issues, i have not experienced this since moving to the release version of 2010.1 Unbound Columns
once my solution built on this goes to QA if they find issues I may ask again in a new thread, but for now i am good to go.
thanks.
I am basically trying to reproduce the sample you suplied on the first page but with slightly different requirements
i am going to have a parent / child class set up. i would like the rows in the child collection to end up being the dynamic columns
i was able to get this 'working' in a view only set up. i need to allow the users to able to edit these dynamic columns
i will post the code i am using ion the next post.