как удалить выбранные строки (несколько строк) из CheckboxTableViewer при нажатии кнопки? (таблица подключена к базе данных оракула)

у меня есть CheckboxTableViewer, который имеет 10 столбцов, и таблица заполняется из базы данных, и у меня есть кнопка вне таблицы с именем «Удалить», что я хочу сделать, это: - когда я выбираю строки с помощью флажка (множественный выбор также ) и когда я нажимаю кнопку «удалить», я хочу, чтобы выбранные строки удалялись из базы данных, а средство просмотра таблиц должно обновляться.

я вставляю свой код просмотра таблицы ниже: -

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

...... и у меня есть кнопка для операции удаления (вне таблицы), когда я нажимаю кнопку удаления, я хочу, чтобы выбранные строки удалялись ... я новичок в SWT. помогите кто нибудь......


person Shenoy    schedule 13.03.2014    source источник


Ответы (3)


Используйте addSelectionListener на элементе управления Button, чтобы получать уведомления при нажатии кнопки:

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.remove для каждого объекта является однократный вызов dataTable.refresh в конце. Существует также вариант remove, который принимает массив объектов.

person greg-449    schedule 13.03.2014

Удалить выбранные строки (несколько строк) из таблицы при нажатии кнопки (подключение к базе данных)

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

Тест.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
person Chetan Bhagat    schedule 20.01.2017

person    schedule
comment
dataTable.remove (индекс); - person Prasanth Np; 13.03.2014
comment
спасибо за ваш ответ .... Но мне также нужно удалить выбранные строки из базы данных ... плз. помогите с этим - person Shenoy; 13.03.2014