konto usunięte

Temat: comboBox - dane pobierane z bazy

Nie wiem jak to ugryźć, wszędzie przykłady są z tablicami stałymi
a potrzebuje zrobić coś takiego:
mam w ColumnModel pobierane dane z bazy danych z jednej tabeli i wyśietlane jest to wszystko w tabelce.
W jednej kolumnie mam id rekordów z innej tabeli, i chcę teraz zrobić tak aby komórka ta była listą select z wartościami pobranymi z osobnej tabeli w bazie.
Podrzućcie jakiś przykład jak to rozwiązać.
Dzięki

coś w tym stylu jak na zdjęciu, dane z selecta mają być pobierane z osobnej tabeli.

Obrazek
Dawid Sandylewski edytował(a) ten post dnia 10.03.11 o godzinie 14:07
Paweł Kozicki

Paweł Kozicki Główny programista

Temat: comboBox - dane pobierane z bazy

musisz zrobić to na Ext.grid.EditorGridPanel i w colModel dać editor jako combo.

Przykład:


columns:[
{id:'province_name', header:'Województwo', dataIndex:'province_name', sortable:true, align:'right',
editor:
{
xtype : 'combo'
,store : new Ext.data.JsonStore( {
proxy : new Ext.data.HttpProxy( {
url : '../contractors/fetchprovinces'
,method : 'post'
})
,totalProperty : 'count'
,root : 'data'
,remoteSort : true
,sortInfo : {
field : 'province_id'
,direction : 'DESC'
},
fields : [ {
name : 'province_id'
,type : 'int'
}, {
name : 'province_name'
,type : 'string'
} ]
})
,name : 'province_name'
,mode : 'remote'
,allowBlank : true
,anchor: '95%'
,valueField: 'province_name'
,displayField: 'province_name'
,loadingText : 'Czekaj...'
,triggerAction : 'all'
,blankText : 'Musisz wypełnić.'
}
},
{id:'contractor_address_city', header:'Miasto', dataIndex:'contractor_address_city', sortable:true, align:'right', editor: {xtype: 'textfield'}}
]
Paweł Kozicki edytował(a) ten post dnia 10.03.11 o godzinie 15:53

konto usunięte

Temat: comboBox - dane pobierane z bazy

Ja właśnie próbowałem troszkę inaczej to zrobić
w Ext.grid.ColumnModel w columns: mam takie coś

{
header: 'kategoria',
dataIndex: 'id_kategoria',
width: 100,
editor: new Ext.form.ComboBox({
store: KategoriaDataStore,
displayField: 'name',
typeAhead: true,
mode: 'remote',
triggerAction: 'all',
selectOnFocus:true
}),
hidden:false
},


store odwołuje się do KategoriaDataStore


KategoriaDataStore = new Ext.data.Store({
id: 'KategoriaDataStore',
proxy: new Ext.data.HttpProxy({
url: 'db.php',
method: 'POST'
}),
baseParams:{task: "LISTING"},
reader: new Ext.data.JsonReader({
root: 'results',
totalProperty: 'total',
id: 'id'
},[
{name: 'id', type: 'int', mapping: 'id'},
{name: 'name', type: 'int', mapping: 'name'}
]),
sortInfo:{field: 'id', direction: "ASC"}
});


ale nie wiem czemu to mi nie chce działać.
Jeśli to jest dobre to pozostaje szukać błedu gdzies w skrypcie.Dawid Sandylewski edytował(a) ten post dnia 11.03.11 o godzinie 12:37
Paweł Kozicki

Paweł Kozicki Główny programista

Temat: comboBox - dane pobierane z bazy

a masz EditorGridPanel? Czy tylko GridPanel?

jakieś błędy?

konto usunięte

Temat: comboBox - dane pobierane z bazy

EditorGrid

błedów właśnie nie widzę. Firebug pokazuje że połączył się z bazą i pobrał rekordy.

Ale w tabeli jak rozwinę select to pokazuje się loading i nic, pusto jest.
nie pokazuje listy.

Jako domyślnie pokazuje mi ID kategorii pobranej z pierwszej tabeli.
a musi ją zamienić na nazwę pobraną z drugiej tabeli, + pobrać pozostałą listę.
Może coś z indeksami jest nie tak.Dawid Sandylewski edytował(a) ten post dnia 11.03.11 o godzinie 12:01
Paweł Kozicki

Paweł Kozicki Główny programista

Temat: comboBox - dane pobierane z bazy

sprawdź sobie kod mojego combo, może valueField jeszcze dodaj do combo...
możesz też mieć skopanego JSON'a. Wklej co Ci zwraca...

konto usunięte

Temat: comboBox - dane pobierane z bazy

JSON'a mam ok, bo mam drugie okno gdzie te kategorie są wyświetlane i wszystko działa ok. Problem mam tylko z tym selektem.
Paweł Kozicki

Paweł Kozicki Główny programista

Temat: comboBox - dane pobierane z bazy

kopsnij cały kod grida.

konto usunięte

Temat: comboBox - dane pobierane z bazy


// Pobranie listy kategorii z drugiej tabeli

KategoriaDataStore = new Ext.data.Store({
id: 'KategoriaDataStore',
proxy: new Ext.data.HttpProxy({
url: 'db.php',
method: 'POST'
}),
baseParams:{task: "LISTING"},
reader: new Ext.data.JsonReader({
root: 'results',
totalProperty: 'total',
id: 'id'
},[
{name: 'id', type: 'int', mapping: 'id'},
{name: 'name', type: 'string', mapping: 'name'}
]),
sortInfo:{field: 'id', direction: "ASC"}
});
// Pobranie Pierwszej głównej tabeli - jedno pole przetrzymuje tylko id kategorii
TelefonDataStore = new Ext.data.Store({
id: 'TelefonDataStore',
proxy: new Ext.data.HttpProxy({
url: 'db.php', // File to connect to
method: 'POST'
}),
baseParams:{task: "LISTING2"},
reader: new Ext.data.JsonReader({
root: 'results',
totalProperty: 'total',
id: 'id'
},[
{name: 'id', type: 'int', mapping: 'id'},
{name: 'nr_tel', type: 'int', mapping: 'nr_tel'},
{name: 'id_kategoria', type: 'string', mapping: 'id_kategoria'}
]),
sortInfo:{field: 'id', direction: "ASC"}
});

// wyswietlanie całej tabeli
TelefonColumnModel = new Ext.grid.ColumnModel({
defaults:{
sortable: true
},
columns: [{
header: '#',
readOnly: true,
dataIndex: 'id',
width: 50,
hidden: false
},{
header: 'nr tel',
dataIndex: 'nr_tel',
width: 100,
editor: new Ext.form.TextField({
allowBlank: false,
maxLength: 30
})
},
{
header: 'id kategorii',
readOnly: true,
dataIndex: 'id_kategoria',
width: 50,
hidden: true
},{
header: 'Kategoria',
dataIndex: 'id_kategoria',
width: 100,
editor: new Ext.form.ComboBox({
store: KategoriaDataStore,
displayField: 'id_kategoria',
valueField: 'name',
typeAhead: true,
mode: 'remote',
triggerAction: 'all',
selectOnFocus:true
}),
hidden:false
}],
stripeRows:true
});
Dawid Sandylewski edytował(a) ten post dnia 11.03.11 o godzinie 14:02
Michał Jarosz

Michał Jarosz Frontend Developer &
Team Leader

Temat: comboBox - dane pobierane z bazy

ComboBox jest załdowany KategoriaDataStore'm, więc własności displayField i valueField muszą być polami z tego store.

konto usunięte

Temat: comboBox - dane pobierane z bazy

no tak, tylko tam musi być też podany id_kateogorii z pierwszej tabeli aby było pokazywało domyślnie to co jest w bazie wprowadzone.
Napewno problem mam w tych indeksach, coś tam jest namieszane.Dawid Sandylewski edytował(a) ten post dnia 11.03.11 o godzinie 22:24
Michał Jarosz

Michał Jarosz Frontend Developer &
Team Leader

Temat: comboBox - dane pobierane z bazy

dataIndex kolumny i displayField editora, to dwie różne rzeczy. Editor odwołuje się tylko do swojego store i nie ma żadnych związków ze storem grida (poza tym, że po edycji odpala odpowiednie eventy).

Podobne tematy


Następna dyskusja:

Wartość w Combobox




Wyślij zaproszenie do