2013-03-28 49 views
0

我使用Infragistics UltraGrid,它的行为与常规datagrid相似。DataGrid列更改为空

我的网格看起来是这样的:

------------------------- 
| Red | Blue | Green | 
------------------------- 
| null | null | null | 
------------------------- 

我建立一个DataTable将其指定为DataSource我的网格。我DataTable

  • 5个红色项目
  • 2个蓝色物品

当我给你我的数据源是这样的:
myGrid.DataSource = myDataTable或类似这样的
myGrid.SetDataBinding(myTable, Nothing, True)

我得到这个电网:

------------------ 
| Red | Blue | 
------------------ 
| 5 | 2 | 
------------------ 

当我应该有这样的:

--------------------------- 
| Red | Blue | Green | 
--------------------------- 
| 5 | 2 | null | 
---------------------------- 

有一些财产我失踪,允许我的表调整到非空列?

+0

你确定你的数据表中有三列命名为红色,蓝色和绿色网格? – Steve

+0

@Steve没有我的数据表没有绿色的列。但我的数据网格有三个(在设计器中),所以我想要做的是用数据表填充红色和蓝色表格列,但保持我的绿色列甚至艰难,它不在数据表中 – phadaphunk

回答

2

当您将DataSource属性设置为您的DataTable时,您将使用指定的表的架构信息替换通过Designer设置的架构信息。
据我所知,没有办法保留那个缺失的列。

但是你可以在缺少的列重新添加到使用InitializeLayout事件

Private Sub myGrid_InitializeLayout(sender As object, _ 
      e As Infragistics.Win.UltraWinGrid.InitializeLayoutEventArgs) 
    Dim b As UltraGridBand = e.Layout.Bands[0]; 
    if Not b.Columns.Exists("RED") Then 
     Dim colRed As UltraGridColumn = b.Columns.Add("RED", "RED"); 
     colRed.NullText = "Null" 
     colRed.Header.VisiblePosition = 0 
    End if 
    if Not b.Columns.Exists("BLU") Then 
     Dim colBlu As UltraGridColumn = b.Columns.Add("BLU", "BLU"); 
     colBlu.NullText = "Null" 
     colBlu.Header.VisiblePosition = 1 
    End if 
    if Not b.Columns.Exists("GREEN") Then 
     Dim colGreen As UltraGridColumn = b.Columns.Add("GREEN", "GREEN"); 
     colGreen.NullText = "Null" 
     colGreen.Header.VisiblePosition = 2 
    End if 
End Sub 
+0

谢谢,我确信这是我会做什么..! – phadaphunk

+0

Steve是正确的,因为架构与您绑定的数据源不匹配,所以没有任何方法可以保留设计器的架构信息。在这种情况下,一个简单的解决方案是,如果列预期存在,那么总是将“GREEN”列添加到DataTable中,如果您在设计器中添加列,那么这将是我所假设的。 – alhalama

+0

@alhalama,是的,我同意你最好在绑定之前添加到数据表中。然而,关于OP问题的一些问题已经将我的想法推到了通过查询获得的表格中,其中也可能丢失了RED和BLU列。因此,我已经展示了UltraGrid处理 – Steve