I am having problems with filtering dependent select lists. I created an example that demonstrates the problems that I am having. The example is a variant of the dependent selects example provided in the SDK. It uses data sources and a data model with foreign key constraints, that emulates the data model I have to deal with. I also uses client only data sources in XML format. My data is displayed in a ListGrid, with edit and filters enabled.
Here are my problems:
1. When I select a filter value for the Division column, then click the Department select filter for the first time, the values in the Department select are correctly filtered. Then I go back and change the value for the Division filter select. Click the Department select filter a second time and I get all the records in the department datasource (departmentDS).
2. When I attempt to edit any of the records in the table, the Department select is empty. I have verified that getPickListFilterCriteria() is getting called when clicking the dependent lists in all cases. I am not getting any Javascript errors. I am using version 5.6 (evaluation). See source code with XML data.
Here are my problems:
1. When I select a filter value for the Division column, then click the Department select filter for the first time, the values in the Department select are correctly filtered. Then I go back and change the value for the Division filter select. Click the Department select filter a second time and I get all the records in the department datasource (departmentDS).
2. When I attempt to edit any of the records in the table, the Department select is empty. I have verified that getPickListFilterCriteria() is getting called when clicking the dependent lists in all cases. I am not getting any Javascript errors. I am using version 5.6 (evaluation). See source code with XML data.
Code:
/* File: division.data.xml
<List>
<division>
<divId>1</divId>
<desc>Manufacturing</desc>
</division>
<division>
<divId>2</divId>
<desc>Marketing</desc>
</division>
<division>
<divId>3</divId>
<desc>Sales</desc>
</division>
<division>
<divId>4</divId>
<desc>Services</desc>
</division>
</List> */
/* File: department.data.xml
<List>
<department>
<deptId>10</deptId>
<divId>1</divId>
<desc>Design</desc>
</department>
<department>
<deptId>11</deptId>
<divId>1</divId>
<desc>Development</desc>
</department>
<department>
<deptId>12</deptId>
<divId>1</divId>
<desc>QA</desc>
</department>
<department>
<deptId>20</deptId>
<divId>2</divId>
<desc>Advertising</desc>
</department>
<department>
<deptId>21</deptId>
<divId>2</divId>
<desc>Community Relations</desc>
</department>
<department>
<deptId>30</deptId>
<divId>3</divId>
<desc>Channel Sales</desc>
</department>
<department>
<deptId>31</deptId>
<divId>3</divId>
<desc>Direct Sales</desc>
</department>
<department>
<deptId>40</deptId>
<divId>4</divId>
<desc>Consulting</desc>
</department>
<department>
<deptId>41</deptId>
<divId>4</divId>
<desc>Support</desc>
</department>
</List> */
/* File: employee.data.xml
<List>
<employee>
<emplId>101</emplId>
<firstName>George</firstName>
<lastName>Washington</lastName>
<divId>1</divId>
<deptId>10</deptId>
</employee>
<employee>
<emplId>470</emplId>
<firstName>Thomas</firstName>
<lastName>Jefferson</lastName>
<divId>2</divId>
<deptId>20</deptId>
</employee>
<employee>
<emplId>335</emplId>
<firstName>Theodore</firstName>
<lastName>Roosevelt</lastName>
<divId>3</divId>
<deptId>30</deptId>
</employee>
<employee>
<emplId>321</emplId>
<firstName>Abraham</firstName>
<lastName>Lincoln</lastName>
<divId>4</divId>
<deptId></deptId>
</employee>
</List> */
isc.DataSource.create({
ID:"divisionDS",
dataFormat:"xml",
clientOnly: true,
fields:{
divId:{name:"divId", type:"sequence", primaryKey:true},
desc:{name:"desc"}
},
recordXPath:"//division",
dataURL:"testdata/division.data.xml"
})
isc.DataSource.create({
ID:"departmentDS",
dataFormat:"xml",
clientOnly: true,
fields:{
deptId:{name:"deptId", type:"sequence", primaryKey:true},
divId:{name:"divId", foreignKey: "divisionDS.divId"},
desc:{name:"desc"}
},
recordXPath:"//department",
dataURL:"testdata/department.data.xml"
})
isc.DataSource.create({
ID:"employeeDS",
dataFormat:"xml",
clientOnly: true,
fields:{
empId:{name:"Empl ID", type:"sequence", primaryKey:true},
firstName:{title:"First Name", name:"firstName"},
lastName:{title:"Last Name", name:"lastName"},
divId:{title:"Division", name:"divId", foreignKey: "divisionDS.divId"},
deptId:{title:"Department", name:"deptId", foreignKey: "departmentDS.deptId"}
},
recordXPath:"//employee",
dataURL:"testdata/employee.data.xml"
})
isc.ListGrid.create({
ID:"employeeList",
selectionType: "single",
dataSource: employeeDS,
left: 50,
top: 50,
width: 500,
height: 150,
autoFetchData: true,
alternateRecordStyles:true,
showAllRecords:true,
showFilterEditor: true,
fields: [
{name: "emplId", canEdit: false},
{name: "firstName"},
{name: "lastName"},
{name: "divId", canEdit: true,
editorType: "select",
optionDataSource: divisionDS,
valueField: "divId",
displayField: "desc",
filterEditorType: "select",
filterEditorProperties: {
optionDataSource: divisionDS,
valueField: "divId",
displayField: "desc"
}
},
{name: "deptId", canEdit: true,
editorType: "select",
optionDataSource: departmentDS,
valueField: "deptId",
displayField: "desc",
editorProperties: {
getPickListFilterCriteria: function () {
var divComboValue = this.form.getValue('divId');
return {divId: divComboValue};
}
},
filterEditorType: "select",
filterEditorProperties: {
optionDataSource: departmentDS,
valueField: "deptId",
displayField: "desc",
getPickListFilterCriteria: function () {
var divComboValue = this.form.getValue('divId');
return {divId: divComboValue};
}
}
}
],
canEdit: true,
editEvent: "doubleClick"
})
Comment