2015-03-27 7 views
0

У меня есть таблица под названием «Коды», которая используется для хранения данных, соответствующих спискам (например, «Здания, комнаты, государства, страны и т. Д.»). Тип здания в этой таблице будет иметь как государство, так и страну, поэтому на экране «AddEditBuildings» мне нужны списки выбора для обоих.LightSwitch 2013 «DetailsPicker», когда основные данные и данные сборщика находятся в одной таблице

Проблема в том, что все три эти точки данных находятся в одной и той же таблице, нет отношения, и поэтому стандартный способ создания DetailPicker не работает. Я играл с помощью всплывающего окна (https://msdn.microsoft.com/en-us/library/jj733572.aspx#popup), но это меня не устраивает.

Мне нужен элемент управления, который будет текстовым полем, которое, когда пользователь вводит в него доступные параметры, фильтруется их вводом. В идеале они также могут расширяться, чтобы увидеть все варианты. По сути, мне нужно, чтобы он работал как стандартный DetailPicker.

Работая над государственным контролем, и, взяв из приведенной выше ссылки, я смог открыть текстовое поле, открывающее всплывающее окно состояния в событии «keyup». Однако это имеет две проблемы: 1) Он не фильтрует параметры на основе текста ввода 2) Всплывающее окно появляется вверху страницы (диалога) вместо прикрепленного к нему и под ним.

Вот мой код:

В экране 'создан' метод:

screen.findContentItem("Query_Codes_States").dataBind("value.selectedItem", function (newValue) { 
    //Whenever the State is selected, update the State value on the Code object 
    screen.Code.Attr05 = newValue.CodeVal; 
    screen.findContentItem('Code_Attr051').value = newValue.CodeVal; 

    //Close popup, if one is open. 
    screen.closePopup(); 
}); 

государственный метод Text Box postrender:

myapp.AddEditBuilding.Code_Attr051_postRender = function (element, contentItem) { 
    $(element).keyup(function() { 
     contentItem.screen.showPopup('StateList'); 
    }); 
} 

Ваша помощь очень ценится!

ответ

0

Я нашел подходящий способ сделать эту работу, используя всплывающее окно. Вот как это сделать:

  1. Добавить элемент данных на экране для данных, которые вы хотите, чтобы выбрать из (названных Query_Codes_States в данном примере)
  2. Создать Popup в конструкторе экрана с помощью нового элемента данных. В этот пример - это список государств.
  3. Нажмите «Список» во всплывающем окне, а затем нажмите на событие «Событие Tap» в свойствах. Найдите и выберите элемент данных Item Item, который был добавлен в список элементов данных. Нажмите кнопку «Изменить код Выполнить» и введите этот код (настроить для сценария):

    myapp.AddEditBuilding.States_ItemTap_execute = function (screen) { 
    var newValue = screen.Query_Codes_States.selectedItem.CodeVal; 
    screen.Code.setAttr05(newValue); // This is the State field on the Building entity. 
    screen.closePopup(); 
    }; 
    
  4. Найдите поле, которое необходимо изменить в конструкторе экрана. В моем случае это текстовое поле State.

  5. В свойствах нажмите «Редактировать код PostRender». Введите этот код (настроить для вашего сценария):

    myapp.AddEditBuilding.Attr05_postRender = function (element, contentItem) { 
    $(element).on('click', function (event) { 
        contentItem.screen.showPopup('StatesPopup'); 
    }) 
    // Prevent typing in field 
    $(element).on('keydown', function (event) { 
        event.preventDefault(); 
        return false; 
    }) 
    }; 
    

Обратите внимание, что это решение не предлагает подсказки поиска в текстовом поле. Это было бы здорово, если бы кто-нибудь мог посоветовать, как это сделать, пожалуйста, дайте мне знать.

Надеюсь, это поможет кому-то!