Как программно установить для RadComboBox с источником данных значение AutomaticLoadOnDemand

Я использую RadComboBox. В моем коде я установил выбранное значение RadComboBox следующим образом:

public void RCB_PO_NUM_DataBound(object sender, EventArgs e)
        {

            var itemRCB_PO_NUM = RCB_PO_NUM.FindItemByText(stringPO_NUM);

            itemRCB_PO_NUM.Selected = true;
            itemRCB_PO_NUM.Value = stringPO_NUM;


        }

Я выбираю список номеров из своей базы данных и отображаю их в файле RadComboBox. Поэтому я должен использовать событие DataBound для получения данных.

Это прекрасно работает, пока я не установлю для свойства AutomaticLoadOnDemand значение true. Как только я это сделаю, я получу желаемый эффект со свойством AutomaticLoadOnDemand, а затем потеряю возможность установить для моего RadComboBox выбранное значение.

Мне нужно иметь возможность делать и то, и другое, AutomaticLoadOnDemand действительно помогает загружать элементы в RadComboBox очень быстро. Код не обязательно должен быть в событии DataBound. Мне действительно все равно, в каком событии это происходит, пока оба работают. Может кто-нибудь сказать, какой метод я использую, чтобы установить для свойства AutomaticLoadOnDemand значение true, или что я делаю неправильно?


person nate    schedule 11.07.2014    source источник
comment
Каков ваш источник данных? Как вы привязываете данные к RadComboBox?   -  person Win    schedule 29.07.2014
comment
@Win Я использую пользовательский интерфейс RadComboBox, чтобы выбрать таблицу и столбец, которые я хочу отобразить.   -  person nate    schedule 29.07.2014
comment
@note Какой метод вы используете для привязки данных к RadComboBox? Например, SqlDataSource, EntityDataSource, Пользовательская привязка.   -  person Win    schedule 29.07.2014


Ответы (3)


Когда вы используете LoadOnDemand, ваше поле со списком не привязано, пока пользователь не попытается его расширить. Таким образом, вы не можете использовать событие DataBound.

Я не уверен, каков ваш вариант использования. Если вы хотите просто отобразить выбранный элемент пользователю, вы можете попробовать свойство Text вашего поля со списком в событии Page_Load.

protected void Page_Load(object sender, EventArgs e)
{
    itemRCB_PO_NUM.Text = stringPO_NUM;
}

Если вам действительно нужен выбранный элемент, возможно, вы можете добавить серверную часть одного элемента (извините, я не могу проверить это прямо сейчас)

protected void Page_Load(object sender, EventArgs e)
{
    itemRCB_PO_NUM.Items.Add(new RadComboBoxItem()
    {
        Value = stringPO_NUM,
        Text= stringPO_NUM,
        Selected = true
    })
}

РЕДАКТИРОВАТЬ: я провел некоторые исследования, и кажется что событие ItemDataBound должно запускаться правильно:

Примечание. Когда вы используете свойства DataSourceID или DataSource для привязки RadComboBox во время автоматической загрузки по требованию, событие ItemDataBound запускается нормально, что означает, что вы можете использовать его для изменения свойств Text и Value элемента, а также для изменения его коллекции атрибутов на основе DataItem. , так далее.

Итак, вы можете попробовать использовать его:

protected void RadComboBox1_ItemDataBound(object o, RadComboBoxItemEventArgs e)
{ 
    DataRowView dataSourceRow = (DataRowView) e.Item.DataItem;  
    if(e.Item.Text == stringPO_NUM)
    {
        e.Item.Selected = true;
        e.Item.Value = stringPO_NUM;
    }
}

Но что мне подозрительно, так это то, что на экране, который вы указали в комментариях, я вижу, что ваша строка stringPO_NUM имеет нулевое значение. Я думаю, что это может быть причиной того, что GetItemByText не возвращает вам элемент.

Также было бы полезно, если бы вы указали, почему вам нужно выбрать этот элемент.

person Machet    schedule 29.07.2014
comment
Я попробую и вернусь к вам. Спасибо за ответ. - person nate; 29.07.2014
comment
Я не могу привязать данные для элемента управления к событию Page_Load, потому что я не могу установить значение или текст элемента управления в этом событии. Когда я пытаюсь запустить предложенный вами код, я получаю нулевое значение от отладчика. Я узнал об этом, когда задавал этот вопрос раньше: to-a-selected-value-in-code" title="как установить radcombobox, использующий источник данных, на выбранное значение в коде"> stackoverflow.com/questions/24702270/ - person nate; 30.07.2014
comment
Не могли бы вы указать, какое свойство имеет нулевое значение? - person Machet; 30.07.2014
comment
Хм, я не уверен, почему вы все еще ищете элемент по тексту. Вы не найдете его, потому что в поле со списком еще нет элементов. Вам вообще не нужно привязывать управление. Просто установите текст при загрузке страницы или добавьте фиктивный элемент. Может быть, если вы расскажете мне, чего вы пытаетесь достичь, я смогу помочь вам лучше. - person Machet; 31.07.2014
comment
Я вижу, что ваша строка PO_NUM также равна нулю. Какое значение он должен иметь. Для какого события доступно это значение? - person Machet; 31.07.2014
comment
Как указано в вопросе, в событии RCB_PO_NUM_DataBound все работает нормально. Я могу установить значение, текст и выбранное значение true в этом случае. - person nate; 31.07.2014
comment
То, что я пытаюсь сделать, это иметь возможность установить значение, текст и выбрать значение true для RadComboBox. В то же время я хочу, чтобы для свойства AutomaticLoadOnDemand было установлено значение true. И все это работать в унисон. - person nate; 31.07.2014

Попробуйте событие OnClientLoad и API JavaScript элемента управления, чтобы выбрать элемент: http://www.telerik.com/help/aspnet-ajax/combobox-client-side-radcombobox.html. Сохраните нужный текст в скрытом поле или глобальной переменной JS.

Проблема в том, что у вас вообще нет предметов, пока запрос не вернется, поэтому я не уверен, что это сработает. Таким образом, вы можете попробовать ту же идею с OnClientItemsRequested http://www.telerik.com/help/aspnet-ajax/combobox-onclientitemsrequested.html событие — посмотрите, вернулся ли элемент с нужным текстом с сервера, и выберите его.

person rdmptn    schedule 15.07.2014
comment
Я буду смотреть в него. Спасибо - person nate; 15.07.2014
comment
Я действительно не хочу использовать java, чтобы делать то, что я хочу сделать. Скорее делайте это на С# - person nate; 28.07.2014
comment
1) это JavaSCRIPT, а не JAVA 2) весь смысл загрузки по запросу заключается в том, чтобы не загружать эти элементы на сервер, поэтому они доступны только на клиенте. - person rdmptn; 29.07.2014
comment
Я не хочу использовать JAVASCRIPT (java был типо), но все равно спасибо за помощь - person nate; 29.07.2014

Как говорили другие, при включенном LoadOnDemand на сервере нет элементов со списком. Вот почему вы не можете использовать методы FindItemBy* — они всегда будут возвращать NULL.

Дайте больше информации о том, чего именно вы хотите достичь, и тогда мы сможем помочь.

Я предполагаю, что вы хотите предварительно заполнить поле со списком текстом, который у вас уже есть - для этого вам лучше использовать API на стороне клиента, например. в событии загрузки комбо вы можете вызвать метод requestItems("your text", true), передав текст, который у вас уже есть, и комбо сделает запрос ajax, чтобы получить элементы, отфильтрованные по тексту, который вы передаете в качестве параметра.

person Veselin Vasilev    schedule 01.08.2014
comment
Я использую RadComboBox для выбора списка чисел из базы данных. Как я уже говорил ранее, мне все равно, какое событие используется, чтобы я мог выбрать значение из RadComboBox и одновременно программно использовать AutomaticLoadOnDemand в отделенном коде. - person nate; 01.08.2014