Java 单击按钮时如何从CheckboxTableViewer中删除选定行(多行)?(表已连接到oracle数据库)
我有一个CheckboxTableViewer,它有10列,表格是从数据库填充的, 我在表外有一个名为“删除”的按钮, 我想做的是:- 当我使用复选框选择行(也可多选)并按下“删除”按钮时,我希望所选行应从数据库中删除,并且tableviewer shuold得到刷新 我正在将我的tableviewer代码粘贴到下面:-Java 单击按钮时如何从CheckboxTableViewer中删除选定行(多行)?(表已连接到oracle数据库),java,swt,tableviewer,Java,Swt,Tableviewer,我有一个CheckboxTableViewer,它有10列,表格是从数据库填充的, 我在表外有一个名为“删除”的按钮, 我想做的是:- 当我使用复选框选择行(也可多选)并按下“删除”按钮时,我希望所选行应从数据库中删除,并且tableviewer shuold得到刷新 我正在将我的tableviewer代码粘贴到下面:- final CheckboxTableViewer dataTable = CheckboxTableViewer.newCheckList(TableComposit
final CheckboxTableViewer dataTable = CheckboxTableViewer.newCheckList(TableComposite2, SWT.MULTI | SWT.H_SCROLL
| SWT.V_SCROLL | SWT.BORDER |SWT.DM_FILL_BACKGROUND|SWT.FULL_SELECTION);
dataTable .getTable().setHeaderVisible(true);
dataTable .getTable().setLinesVisible(true);
dataTable .setContentProvider(new ArrayContentProvider());
//Action Check box
TableColumn columnCHead=new TableColumn(dataTable .getTable(),SWT.NONE);
columnCHead.setText("Delete");
columnCHead.setWidth(50);
// setting column input
TableViewerColumn columnC=new TableViewerColumn(dataTable ,columnCHead);
columnC.setLabelProvider(new ColumnLabelProvider()
{
public String getText(Object Element)
{
return null;
}
});
TableColumn columnFS1Head=new TableColumn(dataTable .getTable(),SWT.NONE);
columnFS1Head.setText("SOURCE DIRECTORY");
columnFS1Head.setWidth(300);
TableViewerColumn columnFS1=new TableViewerColumn(dataTable ,columnFS1Head);
columnFS1.setLabelProvider(new ColumnLabelProvider()
{
public String getText(Object Element)
{
AgedFileMaster a=(AgedFileMaster)Element;
return a.getDIRECTORY_PATH();
}
在此处输入代码
})
。。。。。。
我有一个删除操作的按钮,(在桌子外面),
当我按delete按钮时,我希望所选行被删除。。。
我是SWT的初学者。
任何人请帮忙 TableViewerColumn操作snamecol=新的TableViewerColumn(查看器,列);
TableViewerColumn actionsNameCol = new TableViewerColumn(viewer, column);
actionsNameCol.setLabelProvider(new ColumnLabelProvider(){
//make sure you dispose these buttons when viewer input changes
Map<Object, Button> buttons = new HashMap<Object, Button>();
@Override
public void update(ViewerCell cell) {
TableItem item = (TableItem) cell.getItem();
Button button;
if(buttons.containsKey(cell.getElement()))
{
button = buttons.get(cell.getElement());
}
else
{
button = new Button((Composite) cell.getViewerRow().getControl(),SWT.NONE);
button.setText("Remove");
buttons.put(cell.getElement(), button);
}
TableEditor editor = new TableEditor(item.getParent());
editor.grabHorizontal = true;
editor.grabVertical = true;
editor.setEditor(button , item, cell.getColumnIndex());
editor.layout();
}
});
actionsNameCol.setLabelProvider(新的ColumnLabelProvider(){
//确保在查看器输入更改时处理这些按钮
映射按钮=新建HashMap();
@凌驾
公共无效更新(ViewerCell单元格){
TableItem=(TableItem)cell.getItem();
按钮;
if(buttons.containsKey(cell.getElement()))
{
button=buttons.get(cell.getElement());
}
其他的
{
button=新按钮((复合)单元格.getViewErrorw().getControl(),SWT.NONE);
按钮.setText(“删除”);
buttons.put(cell.getElement(),button);
}
TableEditor=newTableEditor(item.getParent());
editor.grabHorizontal=true;
editor.grabVertical=true;
setEditor(按钮、项、单元格.getColumnIndex());
编辑器。布局();
}
});
在按钮
控件上使用添加选择侦听器
,按下按钮时会收到通知:
button.addSelectionListener(new SelectionAdapter()
{
public void widgetSelected(SelectionEvent event)
{
// TODO handle delete here
}
});
要删除数据,需要做两件事——首先更新数据模型以删除对象,然后告诉表查看器模型已更改
您可以这样做:
dataTable.getTable().setRedraw(false); // Stop redraw during update
IStructuredSelection selection = (IStructuredSelection)dataTable.getSelection();
for (Iterator<?> iterator = selection.iterator(); iterator.hasNext(); )
{
Object selectedObject = iterator.next();
// TODO remove from data model array
// Tell table view the object has been removed
dataTable.remove(selectedObject);
}
dataTable.getTable().setRedraw(true); // Allow updates to be drawn
dataTable.getTable().setRedraw(false);//更新期间停止重画
IsStructuredSelection=(IsStructuredSelection)dataTable.getSelection();
for(Iterator Iterator=selection.Iterator();Iterator.hasNext();)
{
Object selectedObject=iterator.next();
//TODO从数据模型数组中删除
//告诉表视图对象已被删除
dataTable.remove(已选择对象);
}
dataTable.getTable().setRedraw(true);//允许绘制更新
对每个对象调用dataTable.remove
的替代方法是调用dataTable.refresh
一次。还有一个变量remove
,它接受一个对象数组
单击按钮时从表中删除选定行(多行)(数据库连接)
dataTable.remove(索引);谢谢你的回答。。。。但是我还需要从数据库中删除选定的行。。。请。帮帮忙
//Java ArrayList class uses a dynamic array for storing the elements
List<String> id_list=new ArrayList<String>();
//Button Text:Selected Row Delete
Button btnNewButton = new Button(parent, SWT.NONE);
btnNewButton.setText("Selected Row Delete");
btnNewButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
TableItem[] item=table.getItems();
for(int i=0;i<table.getItemCount();i++)
{
if(item[i].getChecked()&&!item[i].getText(1).equals(""))
{
String id=item[i].getText(1);
id_list.add(id);//Add ID into List
}
}
for(int j=0;j<id_list.size();j++)
{
//class:Test
//Method:DeleteData(String ID) pass id to delete rows
// type cast object into string
Test.DeleteData((String) id_list.get(j));
}
}
});
btnNewButton.setImage(ResourceManager.getPluginImage("RCP_Demo", "icons/delete.png"));
btnNewButton.setBounds(18, 370, 68, 23);
public class Test {
static Connection conn = null;
static PreparedStatement presta=null;
public static void DeleteData(String ID)
{
String url = "jdbc:sqlite:Demo.db";
try{
Class.forName("org.sqlite.JDBC");
conn = DriverManager.getConnection(url);
presta = conn.prepareStatement("delete from Student where sid=?");
presta.setString(1, ID);
presta.executeUpdate();
DisplayData();
}catch(Exception e)
{
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
}
}//End DeleteData()
}//End Test class