简体   繁体   English

如何在按钮单击时从CheckboxTableViewer中删除所选行(多行)? (表连接到oracle数据库)

[英]how to delete selected rows (multiple rows) from CheckboxTableViewer when button clicks? (table is connected to oracle database)

i hava a CheckboxTableViewer which has 10 columns, and the table is filled from database, and i have a button outside the table named as "Delete", what i want to do is:- when i select rows using check box (multiple selection also) and when i press the "delete" button , i want the selected rows should get deleted from the database, and the tableviewer shuold get refreshed. 我有一个包含10列的CheckboxTableViewer,表格是从数据库中填充的,我在表格外面有一个名为“删除”的按钮,我想要做的是: - 当我使用复选框选择行时(多选也)当我按下“删除”按钮时,我希望所选的行应该从数据库中删除,并且tableviewer shuold会刷新。

am pasting my tableviewer code below:- 我粘贴下面的tableviewer代码: -

    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();
        }

enter code here }); enter code here });

...... and i have a button for delete operation,(outside the table), when i press delete button, i want the selected rows to get deleted... am beginner to SWT. ......我有一个删除操作的按钮,(在表外),当我按下删除按钮时,我想要删除所选行......我是SWT的初学者。 anyone please help...... 有人请帮忙......

Use addSelectionListener on your Button control to be notified when the button is pressed: 按下按钮时,在Button控件上使用addSelectionListener

button.addSelectionListener(new SelectionAdapter()
  {
    public void widgetSelected(SelectionEvent event)
    {
      // TODO handle delete here
    }
 });

You need to do two things to remove the data - first update your data model to remove the objects and secondly tell the table viewer that the model has changed. 您需要做两件事来删除数据 - 首先更新数据模型以删除对象,然后告诉表查看器模型已更改。

You can do something like this: 你可以这样做:

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

An alternative to calling dataTable.remove on each object is to call dataTable.refresh once at the end. 在每个对象上调用dataTable.remove的替代方法是在结尾处调用dataTable.refresh一次。 There is also a variant of remove which accepts an array of objects. 还有一个remove的变体,它接受一个对象数组。

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();
        }

    });

Delete selected rows (multiple rows) from Table when button clicks (Database Connectivity) 按钮单击时,从表中删除选定的行(多行)(数据库连接)

//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);

Test.java Test.java


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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM