更新tableviwer中的列

时间:2017-01-19 10:02:02

标签: swt

我已从数据库中检索数据,并且我能够在表格查看器的表格中显示它,但我的任务是点击一行,数据应该以另一种形式出现,我可以在其中编辑它并点击更新视图应该使用新值更新。我使用viewer.addSelectionChangedListener来检索所选行,但我没有得到如何更新表。请给我一些想法

我在我的类的构造函数中编写了以下代码,因此每当创建对象时都会生成表,而l1是我传递给另一个UI的数据列表

input[i] = new MyModel(persons[i].getDateOfRegistration(), persons[i].getFirstName(),
                persons[i].getMiddleName(), persons[i].getLastName(), persons[i].getGender(),
                persons[i].getDob(), persons[i].getContactNumber(), persons[i].getMaritalStatus(),
                persons[i].getAddress(), persons[i].getCountry(), persons[i].getBloodGroup(),
                persons[i].getInsuranceDetails().getPolicyHolderName(),
                persons[i].getInsuranceDetails().getPolicyNumber(),
                persons[i].getInsuranceDetails().getSubscriberName(),
                persons[i].getInsuranceDetails().getRelationshipToPatient());
    viewer.setInput(input);

    table.setHeaderVisible(true);
    table.setLinesVisible(true);

    GridData gridData = new GridData();
    gridData.verticalAlignment = GridData.FILL;
    gridData.horizontalSpan = 2;
    gridData.grabExcessHorizontalSpace = true;
    gridData.grabExcessVerticalSpace = true;
    gridData.horizontalAlignment = GridData.FILL;
    viewer.getControl().setLayoutData(gridData);
    viewer.addSelectionChangedListener(new ISelectionChangedListener() {
        public void selectionChanged(SelectionChangedEvent event) {
            IStructuredSelection selection = (IStructuredSelection) event.getSelection();

            StringBuffer sb = new StringBuffer("Selection - ");

            int j = 0;
            String[] s;
            for (Iterator iterator = selection.iterator(); iterator.hasNext();) {

                sb.append(iterator.next() + ", ");
                System.out.println("Testing::" + sb);

            }
            System.out.println(sb);
            String result[] = new String[18];
            List l1 = new ArrayList(100);
            String[] parts = sb.toString().split("=");
            for (int i = 0; i < parts.length; i++) {
                System.out.println("s" + parts[i]);
                String[] s1 = parts[i].split(",");
                l1.add(s1[0]);
            }
            SWTPatientRegistrationUpdatePageEventView swtPatientRegistrationUpdatePageEventView = new SWTPatientRegistrationUpdatePageEventView();
         swtPatientRegistrationUpdatePageEventView.openParentUpdateShell(l1);
        // viewer.refresh();
            //flag=false;
            //refreshingData(list);

        }
    });

1 个答案:

答案 0 :(得分:0)

确保我们将始终遵循表查看器MVC架构。我们可以采取的措施来解决您的问题:

  1. 创建适当的数据结构(Model Class)来保存数据。并在viewer.setInput()

  2. 中设置的数组中使用相同的数组
  3. 单击/双击表格行时,获取数据并将其保存在创建的数据结构中(使用新对象)。

  4. 将该数据结构传递给表单对话框。

  5. 完成表单更新后。再次在新的Model对象中填充更新的数据。

  6. 表单关闭后,将该模型对象传回父级。

  7. 使用从Form Dialog收到的对象更新了相应的数组元素,并刷新了tableviewer。

  8. 如果您需要一些代码模块,请告诉我。感谢