2015-09-21 1 views
0

Я использую dxdatagrid в Dev экстремальной библиотекепросмотр дисплей колонки другого значения зависит от значения из другого столбца в той же строке внутри dxdatagrid (Дев Экстремальный)

Есть в любом случае, что я могу фильтровать источник данных столбца поиска сразу после изменение значения другого столбца подстановок в той же строке внутри DataGrid

Я создал эту демонстрацию, чтобы объяснить:

var listAccount = [ 
    { ID: 1, WebsiteID: 1, Website: 'A', AccountID: '1', Username: 'A1' }, 
    { ID: 2, WebsiteID: 1, Website: 'A', AccountID: '2', Username: 'A2' }, 
    { ID: 3, WebsiteID: 2, Website: 'B', AccountID: '4', Username: 'B1' }, 
    { ID: 4, WebsiteID: 3, Website: 'C', AccountID: '7', Username: 'C1' }, 
    { ID: 5, WebsiteID: 4, Website: 'D', AccountID: '8', Username: 'D1' }, 
    { ID: 6, WebsiteID: 5, Website: 'E', AccountID: '9', Username: 'E1' } 
]; 

var websites = [ 
    { WebsiteID: 1, Website: 'Website A' }, 
    { WebsiteID: 2, Website: 'Website B' }, 
    { WebsiteID: 3, Website: 'Website C' }, 
    { WebsiteID: 4, Website: 'Website D' }, 
    { WebsiteID: 5, Website: 'Website E' } 
]; 

var account = [ 
    { AccountID: 1, Username: 'A1', WebsiteID: 1 }, 
    { AccountID: 2, Username: 'A2', WebsiteID: 1 }, 
    { AccountID: 3, Username: 'A3', WebsiteID: 1 }, 
    { AccountID: 4, Username: 'B1', WebsiteID: 2 }, 
    { AccountID: 5, Username: 'B2', WebsiteID: 2 }, 
    { AccountID: 6, Username: 'B3', WebsiteID: 2 }, 
    { AccountID: 7, Username: 'C1', WebsiteID: 3 }, 
    { AccountID: 8, Username: 'D1', WebsiteID: 4 }, 
    { AccountID: 9, Username: 'E1', WebsiteID: 5 }, 
    { AccountID: 10, Username: 'E2', WebsiteID: 5 } 
]; 

var grid = $('#myGrid').dxDataGrid({ 
    dataSource: listAccount, 
    columns: [ 
{ 
    dataField: 'ID' 
}, 
{ 
    dataField: 'WebsiteID', 
    caption: 'Website', 
    lookup: { 
     dataSource: websites, 
     displayExpr: 'Website', 
     valueExpr: 'WebsiteID', 
    } 
}, 
{ 
    dataField: 'AccountID', 
    caption: 'Account', 
    lookup: { 
     dataSource: account, 
     displayExpr: 'Username', 
     valueExpr: 'AccountID', 
    } 
}], 
    editing: { 
     editMode: 'batch', 
     editEnabled: true, 
     insertEnabled: true 
    } 
}).dxDataGrid('instance'); 

в режиме редактирования, есть ли способ, когда я выбираю другой веб-сайт и счет только показать счета отменить d веб-сайт? Например: Когда я выбираю сайт A, только счета A1 дисплей & A2 в колонке поиска

Спасибо

+0

Чтобы фильтровать данные dxDataGrid по значению, вы можете использовать параметр 'filterRow'. Дополнительная информация [здесь] (http://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxDataGrid/Configuration/filterRow/?version=15_1). – Sergey

+0

@Sergey спасибо за ответ, но я не думаю, что он работает в этом случае, [link] filterRow [link] похоже работает только с dxdatagrid datasource, в этом случае мне нужен источник данных при изменении поиска, сразу же зависит от значения, которое я меняю в другом столбце в той же строке –

ответ

0

В вашем случае я предлагаю вам использовать cellTemplate и editCellTemplate варианты. Эти параметры позволяют вам отображать поле выбора для столбца «Веб-сайт» вручную. Тогда вы будете иметь возможность обрабатывать изменения значений в WebsiteId с помощью опции onValueChanged:

cellTemplate: function($cell, cellData){ 
    $cell.text('Website ' + cellData.data.Website); 
}, 
editCellTemplate: function($cell, cellData){ 
    var $selectBox = $("<div>").dxSelectBox({ 
     dataSource: websites, 
     displayExpr: 'Website', 
     valueExpr: 'WebsiteID', 
     value: cellData.data.WebsiteID, 
     onValueChanged: function(){ 
      // filter your data here... 
     } 
    }); 

    $cell.append($selectBox); 
} 

Образец здесь - http://jsfiddle.net/kb1681g0/2/

Чтобы отфильтровать данные, которые вы можете использовать метод DataSource.filter().

Надеемся, что эта информация поможет.

+0

Прошу прощения за ответ в последнее время. Вот мой обработчик onValueChanged: onValueChanged: function (e) { \t account.filter ("WebsiteID", e.value); cellData.setValue (e.value) } Но, похоже, ничего не произошло в столбце учетной записи –

+0

Попробуйте отфильтровать данные с помощью 'DevExpress.data.query(). Filter(). ToArray()'. См. Это http://jsfiddle.net/96orLbqs/ – Sergey