2013-03-28 3 views
0

Я использую Infragistics UltraGrid, который действует как обычный datagrid.Изменение столбца DataGrid, когда null

Моя сетка выглядит следующим образом:

------------------------- 
| 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

вы уверены, что ваш DataTable имеет три столбца с именем красный, синий и зеленый? – Steve

+0

@Steve Нет моего datatable не имеет зеленой колонки. Но у моего datagrid есть три (в дизайнере), поэтому я хочу сделать, чтобы заполнить столбцы таблицы Red и Blue таблицей данных, но держать мою зеленую колонку даже жесткой, это не в datatable – phadaphunk

ответ

2

Когда вы устанавливаете свойство DataSource в свой DataTable, вы заменяете информацию о схеме, установленную через конструктор, информацией о схеме назначенной таблицы.
Насколько я знаю, нет возможности сохранить этот недостающий столбец.

Однако вы можете повторно добавить недостающие столбцы в сетке, используя событие 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

Стив прав, что нет никакой возможности сохранить информацию о схеме от конструктора, поскольку схема не соответствует источнику данных, к которому вы привязаны. В этом случае более простым решением было бы всегда добавлять столбец «ЗЕЛЕНЫЙ» в DataTable, если ожидается, что столбец будет там, что я бы предположил, если вы добавляете столбец в конструктор. – alhalama

+0

@alhalama, да, я согласен с вами в том, что было бы предпочтительнее добавить к datatable перед привязкой. Однако что-то в вопросе ОП приводит мои мысли к таблице, полученной из группы по запросу, где также могут отсутствовать столбцы RED и BLU. Поэтому я показал способ UltraGrid для обработки ситуации – Steve

Смежные вопросы