# TableViewerColumn dynamisch erzeugen



## Proton (3. Dez 2012)

Hallo zusammen!

Das Forum hat mir bisher schon oft geholfen, aber 
zu diesem Thema habe ich bisher leider nichts gefunden.

Ich lese ein excel-Dokument aus und bekomme eine
verschachtelte Liste als Ergebnis.
Aus dieser sollen für jedes Sheet ein TabItem erzeugt werden
in der dann ein TableViewer angezeigt wird.
Das funktioniert, bis zu dem Moment, wo ich die TableViewerColumn 
anlege. Im ersten Tab zeigt er mir die Spalten mit den Bezeichnungen an.
Klicke ich auf den zweiten Tab wird folgendene Exception geworfen:


```
org.eclipse.core.runtime.AssertionFailedException: assertion failed: Unknown column layout data
```


```
String[] arr = {"0", "1", "2"};
						for (Entry<String, Map<Integer, Map<Integer, Object>>> res : sourceResultList.entrySet()) {
							String resKey = res.getKey();

							TabItem tabItem = new TabItem(tabFolder, SWT.NONE);
							tabItem.setText(resKey);
							tabItemArray.add(tabItem);
							
							Composite composite = new Composite(tabFolder, SWT.NONE);
							tabItem.setControl(composite);
							composite.setLayout(new TableColumnLayout());
							
							TableViewer tableViewer = new TableViewer(composite, SWT.BORDER | SWT.FULL_SELECTION);

					        Table table = tableViewer.getTable();
					        table.setHeaderVisible(true);
					        table.setLinesVisible(true);
					        
							for(int j = 0; j < arr.length; j++){
								TableViewerColumn tableColumn = new TableViewerColumn(tableViewer, SWT.LEFT);
								tableColumn.getColumn().setText(arr[j]);
								tableColumn.getColumn().setWidth(80);
							}
}
```

Ich hoffe sehr, dass mir hier jemand helfen kann. 

Schönen Gruß
Proton


----------



## Proton (3. Dez 2012)

Sorry, habe die ganze Zeit rumprobiert und deswegen den falschen 
Code kopiert. Das 
	
	
	
	





```
tabItem.setControl(composite);
```
muss unter die table-Anweisungen. 
Sollte also so aussehen:

```
Composite composite = new Composite(tabFolderSourceRollout, SWT.NONE);
							composite.setLayout(new TableColumnLayout());
							TableViewer tableViewer = new TableViewer(composite, SWT.BORDER | SWT.FULL_SELECTION);
					        Table table = tableViewer.getTable();
					        table.setHeaderVisible(true);
					        table.setLinesVisible(true);
					        
							tabItem.setControl(composite);
```


----------



## Proton (3. Dez 2012)

Der Grund des Problems scheint zu sein:

```
You can only add the Layout to a container whose only child is the Table control you want the Layout applied to.
```

Lösung folgt hoffentlich noch.


----------



## Proton (3. Dez 2012)

So, ich habe jetzt statt dem TableColumnLayout das FillLayout genommen und jetzt macht er das was er soll.


----------

