0 0

关于gwt-ext grid 的问题25

  我在界面上添加了两个grid,其中一grid1显示数据库表test1中的内容,双击grid1某一行,根据双击grid1某一行某一列的数据,按条件检索数据库表test2中的数据,并在grid2中显示出来。各位大大这个功能如何实现???

问题补充:
谢谢楼上,我想我用的是服务端与客户端通信,我的现在定义了如下方法
1、已定义好impl中的queryData()方法,客户端能正常调用
public class InfoListActionImpl extends RemoteServiceServlet implements
private static final long serialVersionUID = 3340062097368093852L;

public String[][] queryData(){
String[][] allInfo = null;
String query = "select 材料名称,规格型号,计量单位,期末库存,期末库存金额 from 设备仓库库存情况表 where 期末库存>0 order by 材料名称,规格型号";

try{
Class.forName("net.sourceforge.jtds.jdbc.Driver");

String URL = "jdbc:jtds:sqlserver://127.0.0.1:1433/db_wzgl;USER=sa;PASSWORD=sa";
Connection conn = DriverManager.getConnection(URL);
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery(query);
int i = 0;
int rows = 0;
if (rs.last()){
rows = rs.getRow();
rs.beforeFirst();
}

ResultSetMetaData rsm = rs.getMetaData();
int columns = rsm.getColumnCount();

allInfo = new String[rows][columns];

while (rs.next()) {
for (int j = 0; j < columns; j++){
allInfo[i][j] = rs.getString(j + 1);
}
i++;
}
rs.close();
stmt.close();
conn.close();
}catch (ClassNotFoundException e) {
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}

return allInfo;
}
2、定义了async接口
public interface InfoListActionAsync {

public void queryData(AsyncCallback<String[][]> callback);

}
3、客户端脚本
public class InfoList implements EntryPoint {

private GridPanel grid;
private GridPanel grid1;
//@SuppressWarnings("unchecked")
public void onModuleLoad() {
InfoListActionAsync action = InfoListAction.Util.getInstance();

action.queryData(new AsyncCallback() {

public void onFailure(Throwable caught) {

}

public void onSuccess(Object result) {
Panel panel = new Panel();
panel.setBorder(false);
panel.setPaddings(15);


RecordDef recordDef = new RecordDef(new FieldDef[] {
new StringFieldDef("材料名称"),
new StringFieldDef("规格型号"),
new StringFieldDef("计量单位"),
new StringFieldDef("期末库存"),
new StringFieldDef("期末库存金额") });

String[][] data = (String[][]) result;
MemoryProxy proxy = new MemoryProxy(data);
ArrayReader reader = new ArrayReader(recordDef);
final Store store = new Store(proxy, reader,false);

ColumnConfig clmcColumn = new ColumnConfig("材料名称", "材料名称", 220, false);
clmcColumn.setAlign(TextAlign.CENTER);

ColumnConfig ggxhColumn = new ColumnConfig("规格型号", "规格型号", 400, false);
ggxhColumn.setAlign(TextAlign.CENTER);

ColumnConfig jldwColumn = new ColumnConfig("单位", "计量单位", 60, false);
jldwColumn.setAlign(TextAlign.CENTER);

ColumnConfig qmkcColumn = new ColumnConfig("数量", "期末库存", 110, false);
qmkcColumn.setAlign(TextAlign.CENTER);

ColumnConfig qmkcjeColumn = new ColumnConfig("金额", "期末库存金额", 150, false);
qmkcjeColumn.setAlign(TextAlign.CENTER);


ColumnModel columnModel = new ColumnModel(new ColumnConfig[]{
clmcColumn,
ggxhColumn,
jldwColumn,
qmkcColumn,
qmkcjeColumn
});

grid = new GridPanel();

grid.setHeight(400);
grid.setWidth(975);
grid.setTitle("库存明细查询");
grid.setStore(store);
grid.setColumnModel(columnModel);
grid.setTrackMouseOver(false);
grid.setLoadMask(true);
grid.setSelectionModel(new RowSelectionModel());
grid.setFrame(true);
grid.setStripeRows(true);
grid.setIconCls("grid-icon");

        Toolbar topToolbar = new Toolbar();
topToolbar.addFill();
grid.setTopToolbar(topToolbar);

GridSearchPlugin gridSearch = new GridSearchPlugin(GridSearchPlugin.TOP);
gridSearch.init(grid);
gridSearch.setMode(GridSearchPlugin.LOCAL);

grid.addPlugin(gridSearch);

store.load();

panel.add(grid);

RecordDef recordDef1 = new RecordDef(new FieldDef[] {
new StringFieldDef("仓库名称"),
new StringFieldDef("库存数量"),
new StringFieldDef("库存金额"),
new StringFieldDef("当月消耗"),
new StringFieldDef("消耗金额") });

String[][] data1 = null;

data1 = new String[1][5];

MemoryProxy proxy1 = new MemoryProxy(data1);
ArrayReader reader1 = new ArrayReader(recordDef1);
final Store store1 = new Store(proxy1, reader1,false);

ColumnConfig clmcColumn1 = new ColumnConfig("仓库名称", "仓库名称", 320, false);
clmcColumn1.setAlign(TextAlign.CENTER);

ColumnConfig ggxhColumn1 = new ColumnConfig("库存数量", "库存数量", 110, false);
ggxhColumn1.setAlign(TextAlign.CENTER);

ColumnConfig jldwColumn1 = new ColumnConfig("库存金额", "库存金额", 200, false);
jldwColumn1.setAlign(TextAlign.CENTER);

ColumnConfig qmkcColumn1 = new ColumnConfig("当月消耗", "当月消耗", 110, false);
qmkcColumn1.setAlign(TextAlign.CENTER);

ColumnConfig qmkcjeColumn1 = new ColumnConfig("消耗金额", "消耗金额", 200, false);
qmkcjeColumn1.setAlign(TextAlign.CENTER);


ColumnModel columnModel1 = new ColumnModel(new ColumnConfig[]{
clmcColumn1,
ggxhColumn1,
jldwColumn1,
qmkcColumn1,
qmkcjeColumn1
});

grid1 = new GridPanel();

grid1.setHeight(160);
grid1.setWidth(975);
grid1.setStore(store1);
grid1.setColumnModel(columnModel1);
grid1.setTrackMouseOver(false);
grid1.setLoadMask(true);
grid1.setSelectionModel(new RowSelectionModel());
grid1.setFrame(true);
grid1.setStripeRows(true);
grid.addGridRowListener(new GridRowListener(){
public void onRowDblClick(GridPanel grid, int rowIndex, EventObject e){
store1.load();
}

public void onRowClick(GridPanel grid, int rowIndex, EventObject e){

}

public void onRowContextMenu(GridPanel grid, int rowIndex, EventObject e){

}

});
panel.add(grid1);

RootPanel.get().add(panel);
}
});
}
}

问题是我如何在定义并调用一个带参数的queryData1()查询方法,根据前台onRowDblClick事件双击的某一行莫一列的数据检索数据库,并将数据返回前台。
                                       不胜感谢!!!!
问题补充:
我已经在服务端定义了一个querydata1方法并在onRowDblClick成功调用,但是代码很繁琐,各位能不能给优化优化,下面是我的从新写得客户端代码:
public class InfoList implements EntryPoint {

private GridPanel grid;
private GridPanel grid1;
//@SuppressWarnings("unchecked")
public void onModuleLoad() {
final InfoListActionAsync action = InfoListAction.Util.getInstance();

action.queryData(new AsyncCallback() {

public void onFailure(Throwable caught) {

}

public void onSuccess(Object result) {
Panel panel = new Panel();
panel.setBorder(false);
panel.setPaddings(15);

/*Button iconButton = new Button("执行查询", new ButtonListenerAdapter() {
public void onClick(Button button, EventObject e) {

}
});
panel.add(iconButton);*/

RecordDef recordDef = new RecordDef(new FieldDef[] {
new StringFieldDef("材料名称"),
new StringFieldDef("规格型号"),
new StringFieldDef("计量单位"),
new StringFieldDef("期末库存"),
new StringFieldDef("期末库存金额") });

String[][] data = (String[][]) result;
MemoryProxy proxy = new MemoryProxy(data);
ArrayReader reader = new ArrayReader(recordDef);
final Store store = new Store(proxy, reader,false);

ColumnConfig clmcColumn = new ColumnConfig("材料名称", "材料名称", 220, false);
clmcColumn.setAlign(TextAlign.CENTER);

ColumnConfig ggxhColumn = new ColumnConfig("规格型号", "规格型号", 400, false);
ggxhColumn.setAlign(TextAlign.CENTER);

ColumnConfig jldwColumn = new ColumnConfig("单位", "计量单位", 60, false);
jldwColumn.setAlign(TextAlign.CENTER);

ColumnConfig qmkcColumn = new ColumnConfig("数量", "期末库存", 110, false);
qmkcColumn.setAlign(TextAlign.CENTER);

ColumnConfig qmkcjeColumn = new ColumnConfig("金额", "期末库存金额", 150, false);
qmkcjeColumn.setAlign(TextAlign.CENTER);


ColumnModel columnModel = new ColumnModel(new ColumnConfig[]{
clmcColumn,
ggxhColumn,
jldwColumn,
qmkcColumn,
qmkcjeColumn
});

grid = new GridPanel();

grid.setHeight(400);
grid.setWidth(975);
grid.setTitle("库存明细查询");
grid.setStore(store);
grid.setColumnModel(columnModel);
grid.setTrackMouseOver(false);
grid.setLoadMask(true);
grid.setSelectionModel(new RowSelectionModel());
grid.setFrame(true);
grid.setStripeRows(true);
grid.setIconCls("grid-icon");

/*final PagingToolbar pagingToolbar = new PagingToolbar(store);
pagingToolbar.setPageSize(14);
pagingToolbar.setDisplayInfo(true);
pagingToolbar.setDisplayMsg("当前显示的数据为: {0} - {1} of {2}");
pagingToolbar.setEmptyMsg("无显示数据");

NumberField pageSizeField = new NumberField();
pageSizeField.setWidth(40);
pageSizeField.setSelectOnFocus(true);
pageSizeField.addListener(new FieldListenerAdapter(){
public void onSpecialKey(Field field, EventObject e){
if (e.getKey() == EventObject.ENTER){
int pageSize = Integer.parseInt(field.getValueAsString());
pagingToolbar.setPageSize(pageSize);
}
}
});

ToolTip toolTip = new ToolTip("更改每页显示的数据,按回车生效");
toolTip.applyTo(pageSizeField);

pagingToolbar.addField(pageSizeField);
grid.setBottomToolbar(pagingToolbar);

grid.addListener(new PanelListenerAdapter(){
public void onRender(Component component){
store.load(0, 14);
}
});
*/

Toolbar topToolbar = new Toolbar();
topToolbar.addFill();
grid.setTopToolbar(topToolbar);

GridSearchPlugin gridSearch = new GridSearchPlugin(GridSearchPlugin.TOP);
gridSearch.init(grid);
gridSearch.setMode(GridSearchPlugin.LOCAL);

grid.addPlugin(gridSearch);

/*Toolbar bottomToolbar = new Toolbar();
bottomToolbar.addFill();
bottomToolbar.addButton(new ToolbarButton("条件清除",
new ButtonListenerAdapter() {
public void onClick(Button button, EventObject e) {
grid.clearSortState(true);
}
}));

grid.setBottomToolbar(bottomToolbar);*/

store.load();

final RecordDef recordDef1 = new RecordDef(new FieldDef[] {
new StringFieldDef("仓库名称"),
new StringFieldDef("库存数量"),
new StringFieldDef("库存金额"),
new StringFieldDef("当月消耗"),
new StringFieldDef("消耗金额") });

ColumnConfig clmcColumn1 = new ColumnConfig("仓库名称", "仓库名称", 320, false);
clmcColumn1.setAlign(TextAlign.CENTER);

ColumnConfig ggxhColumn1 = new ColumnConfig("库存数量", "库存数量", 110, false);
ggxhColumn1.setAlign(TextAlign.CENTER);

ColumnConfig jldwColumn1 = new ColumnConfig("库存金额", "库存金额", 200, false);
jldwColumn1.setAlign(TextAlign.CENTER);

ColumnConfig qmkcColumn1 = new ColumnConfig("当月消耗", "当月消耗", 110, false);
qmkcColumn1.setAlign(TextAlign.CENTER);

ColumnConfig qmkcjeColumn1 = new ColumnConfig("消耗金额", "消耗金额", 200, false);
qmkcjeColumn1.setAlign(TextAlign.CENTER);


ColumnModel columnModel1 = new ColumnModel(new ColumnConfig[]{
clmcColumn1,
ggxhColumn1,
jldwColumn1,
qmkcColumn1,
qmkcjeColumn1
});

String[][] data1 = null;
data1 = new String[1][5];
data1[0][0]= "";
data1[0][1]= "";
data1[0][2]= "";
data1[0][3]= "";
data1[0][4]= "";

MemoryProxy proxy1 = new MemoryProxy(data1);
ArrayReader reader1 = new ArrayReader(recordDef1);
Store store1 = new Store(proxy1, reader1,false);
store1.load();
grid.addGridRowListener(new GridRowListener(){
public void onRowDblClick(GridPanel grid, int rowIndex, EventObject e){
action.queryData1(new AsyncCallback(){
public void onFailure(Throwable caught) {

}

public void onSuccess(Object result) {
final RecordDef recordDef1 = new RecordDef(new FieldDef[] {
new StringFieldDef("仓库名称"),
new StringFieldDef("库存数量"),
new StringFieldDef("库存金额"),
new StringFieldDef("当月消耗"),
new StringFieldDef("消耗金额") });

ColumnConfig clmcColumn1 = new ColumnConfig("仓库名称", "仓库名称", 320, false);
clmcColumn1.setAlign(TextAlign.CENTER);

ColumnConfig ggxhColumn1 = new ColumnConfig("库存数量", "库存数量", 110, false);
ggxhColumn1.setAlign(TextAlign.CENTER);

ColumnConfig jldwColumn1 = new ColumnConfig("库存金额", "库存金额", 200, false);
jldwColumn1.setAlign(TextAlign.CENTER);

ColumnConfig qmkcColumn1 = new ColumnConfig("当月消耗", "当月消耗", 110, false);
qmkcColumn1.setAlign(TextAlign.CENTER);

ColumnConfig qmkcjeColumn1 = new ColumnConfig("消耗金额", "消耗金额", 200, false);
qmkcjeColumn1.setAlign(TextAlign.CENTER);
ColumnModel columnModel1 = new ColumnModel(new ColumnConfig[]{
clmcColumn1,
ggxhColumn1,
jldwColumn1,
qmkcColumn1,
qmkcjeColumn1
});
String[][] data1 = (String[][]) result;
MemoryProxy proxy1 = new MemoryProxy(data1);
ArrayReader reader1 = new ArrayReader(recordDef1);
Store store1 = new Store(proxy1, reader1,false);
grid1.reconfigure(store1, columnModel1);
store1.reload();
}
});
}

public void onRowClick(GridPanel grid, int rowIndex, EventObject e){

}

public void onRowContextMenu(GridPanel grid, int rowIndex, EventObject e){

}

});

panel.add(grid);

grid1 = new GridPanel();

grid1.setHeight(160);
grid1.setWidth(975);
grid1.setStore(store1);
grid1.setColumnModel(columnModel1);
grid1.setTrackMouseOver(false);
grid1.setLoadMask(true);
grid1.setSelectionModel(new RowSelectionModel());
grid1.setFrame(true);
grid1.setStripeRows(true);

panel.add(grid1);

RootPanel.get().add(panel);
}
});
}
}
GWT 
2008年6月29日 17:08

2个答案 按时间排序 按投票排序

0 0

不好意思,gwt-ext grid我没有用过,这个问题我解决不了,很抱歉

2008年6月30日 08:39
0 0

实现grid1的rowdblclick事件处理,在事件处理方法中获取Grid1当前选择行的数据,然后组成查询条件,对grid2的store重新装载

grid.on('rowdblclick', function(grid, rowIndex, e) {
		var record = grid.getStore().getAt(rowIndex);
		if (record) {
			var params = {};
			params['cond1'/*此处是grid2的store中附加到URL后参数名*/] = record.get('field1'/*此处是grid1中的列名*/);
			params['cond2'/*此处是grid2的store中附加到URL后参数名*/] = record.get('field2'/*此处是grid1中的列名*/);
			
			var store = grid2.getStore();
			Ext.apply(store.baseParams, params);
			store.load();
		}
	});

2008年6月29日 22:23

相关推荐

Global site tag (gtag.js) - Google Analytics