2011-04-13 23 views
1

结合我知道这是不是真的做到这一点的最好办法,但我有一个特殊的场合,当我需要使用代码来新列添加到DataGrid和应用结合到它如何执行与programmation

例如,我得到这个:

<DataGrid x:Name="GridUtilisateurs" Grid.Row="1" Grid.Column="0" ItemsSource="{Binding}" Style="{StaticResource BaseGrid}"> 
       <DataGrid.Columns> 
        <DataGridTemplateColumn> 
         <DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <Canvas Background="{Binding ColorActive}"></Canvas> 
          </DataTemplate> 
         </DataGridTemplateColumn.CellTemplate> 
        </DataGridTemplateColumn> 

        <DataGridTextColumn Header="Usager" Width="*" MinWidth="50" 
               Binding="{Binding UserName}"            
               IsReadOnly="True" /> 
       </DataGrid.Columns> 
      </DataGrid> 

我如何做同样的事情,但代码?我遇到的主要问题是绑定,其余的都很好。

这是我到目前为止,但我无法使绑定工作。结合“路径”我会在XAML使用相当于oCol.ColumnName:

 

      Dim oNewColumn As DataGridColumn 
      Dim oBinding As New System.Windows.Data.Binding 

      Select Case oCol.DataType 

       Case GetType(Boolean) 
        oNewColumn = New DataGridCheckBoxColumn() 
        oNewColumn.MinWidth = 25 
        CType(oNewColumn, DataGridCheckBoxColumn).IsThreeState = False 
        CType(oNewColumn, DataGridCheckBoxColumn).Binding = oBinding 
        oNewColumn.Width = System.Windows.Controls.DataGridLength.SizeToHeader 
       Case Else 
        oNewColumn = New DataGridTextColumn() 
        oNewColumn.MinWidth = 50 
        oNewColumn.Width = New System.Windows.Controls.DataGridLength(1, System.Windows.Controls.DataGridLengthUnitType.Star) 
        CType(oNewColumn, DataGridTextColumn).Binding = oBinding 
      End Select 
      oNewColumn.Header = oCol.ColumnName 

      GridData.Columns.Add(oNewColumn) 
     Next 

     GridData.ItemsSource = MyList 

一段时间后,我终于明白什么是错的。我需要使用[说明],因为我有一个日期表。现在,这已经完成了,但我还有另一个问题。由于有时我需要日期,所以我需要使用DataTemplateColumn,并尝试使用一个日期,但目前为止我无法完成一项工作。任何人都知道如何做到这一点? 谢谢,

回答

1
Dim oNewColumn As DataGridColumn 
      Dim oBinding As New System.Windows.Data.Binding 

     Select Case oCol.DataType 

      Case GetType(Boolean) 
       oNewColumn = New DataGridCheckBoxColumn() 
       oNewColumn.MinWidth = 25 
       CType(oNewColumn, DataGridCheckBoxColumn).IsThreeState = False 
       oBinding.Path ="PathName1" 
       CType(oNewColumn, DataGridCheckBoxColumn).Binding = oBinding 
       oNewColumn.Width = System.Windows.Controls.DataGridLength.SizeToHeader 
      Case Else 
       oNewColumn = New DataGridTextColumn() 
       oNewColumn.MinWidth = 50 
       oNewColumn.Width = New System.Windows.Controls.DataGridLength(1,    System.Windows.Controls.DataGridLengthUnitType.Star) 
       oBinding.Path="PathName2" 
       CType(oNewColumn, DataGridTextColumn).Binding = oBinding 
     End Select 
     oNewColumn.Header = oCol.ColumnName 

     GridData.Columns.Add(oNewColumn) 
    Next 

    GridData.ItemsSource = MyList 
+0

我试过了,为什么(我需要的,因为我被赋予了结构的使用[PathName1],而不是没有工作,虽然现在我knwo。 – 2011-04-14 12:47:51

+0

在创建oBinding你不设置路径新的绑定对象。 – Nario 2011-04-14 12:54:36

+0

可以使用C#写这个(请)? – Nario 2011-04-14 12:55:41