我需要在Eclipse RCP应用程序中的一个TableViewer中创建动态列。
我的想法是我需要创建一个交叉表。
Column 0 | Column 1| Column 2| Column 3| Column n
=================================================
Data 0,0 | Data 0,1| Data 0,2| Data 0,3| Data 0,n
Data 1,0 | Data 1,1| Data 1,2| Data 1,3| Data 1,n
Data 2,0 | Data 2,1| Data 2,2| Data 2,3| Data 2,n
Data 3,0 | Data 3,1| Data 3,2| Data 3,3| Data 3,n
我正在使用它来创建动态列。
//Recuperar Crossing Block del Grupo
for (int i=0; i < cbsCombinado.size(); i++) {
tableViewerColumn = new TableViewerColumn(this.tableCombinadoViewer, SWT.NONE);
tblclmnParcela = tableViewerColumn.getColumn();
tblclmnParcela.setWidth(100);
tblclmnParcela.setText( cbsCombinado.get(i).getNroParcela().toString());
tblclmnParcela.setData(cbsCombinado.get(i)); //Asigno el Participante.
};
所以我正在从数据库中读取记录,并为每条记录创建一个列。
问题是我需要检索我在te列中设置的数据。 我需要获取列n和行i的Id,以查询数据库。
有什么想法吗? 最诚挚的问候
嗨,我的方法就是现在。 使用列的ArrayList创建一个类:
class Grilla {
private BloqueCruzamiento bc_x;
private ArrayList<BloqueCruzamiento> bc_list_y;
private Boolean selected;
}
和ContentProvider:
class BloqueCruzaCombContentProvider implements IStructuredContentProvider {
public void dispose() {
// TODO Auto-generated method stub
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// TODO Auto-generated method stub
}
@SuppressWarnings("unchecked")
public Object[] getElements(Object obj) {
ArrayList<Grilla> grid = (ArrayList<Grilla>) obj;
return grid.toArray();
}
}
这就是我填充ArrayList的方法:
List<Grilla> cbsArrayL = new ArrayList<Grilla>() ;
Grilla grid = new Grilla();
for (BloqueCruzamiento cb : cbs) {
grid.bc_x = cb;
grid.bc_list_y = new ArrayList<BloqueCruzamiento>();
grid.selected = false;
for (BloqueCruzamiento ccb : cbsCombinado)
{
grid.bc_list_y.add(ccb);
}
cbsArrayL.add(grid);
grid = new Grilla();
}
tableCombinadoViewer.setContentProvider(new BloqueCruzaCombContentProvider());
tableCombinadoViewer.setLabelProvider(new BloqueCruzaCombLabelProvider());
if (cbs!=null) tableCombinadoViewer.setInput(cbsArrayL);
我现在的目标是让每个CELL都可以编辑,但在某些情况下不应该是可编辑的。 再次问候
答案 0 :(得分:0)
我假设您将要显示的每个表结构都有一个java类。因此,您可以使用java反射API为表查看器列提供标题并显示数据
编辑: 我看到你的代码几乎有70%需要完成。为了便于理解,我只是重复一些其他细节的步骤
Employee
Tableviewer.setInput(empList)
getValue()
方法中,您应该使用反射API来调用您希望显示的表字段的getXXXX()
。一个很好的参考是here。反射只不过是Java提供的内省API,它获取有关类及其属性的详细信息。EditingSupport
类进行子类化并将实例添加到列查看器的addEditingSupport()
方法请记住,tableviewer列标题可以是Employee
类的字段名称,也可以通过反射API获取。
希望这澄清