如何以编程方式将RadComboBox与数据源设置为AutomaticLoadOnDemand

时间:2014-07-11 19:27:40

标签: c# asp.net telerik radcombobox rad-controls

我正在使用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,或者我做错了什么?

3 个答案:

答案 0 :(得分:2)

当您使用LoadOnDemand时,您的组合框不受约束,直到用户尝试展开它。所以你不能使用DataBound事件。

我不确定你的用例是什么。如果您只想向用户显示所选项目,则可以在Page_Load事件中尝试组合框的Text属性。

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
    })
}

编辑: 我做了一些research,似乎应该正确触发ItemDataBound事件:

  

注意:在自动按需加载期间使用DataSourceID或DataSource属性绑定RadComboBox时,ItemDataBound事件会正常触发,这意味着您可以使用它来更改Item的Text和Value属性以及修改其Attributes集合在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没有向您返回项目的原因。

如果您要指定为什么需要选择此项目,那将会有所帮助。

答案 1 :(得分:1)

尝试使用OnClientLoad事件和控件的JavaScript API来选择项目:http://www.telerik.com/help/aspnet-ajax/combobox-client-side-radcombobox.html。将所需文本存储在隐藏字段或全局JS变量中。

问题是,在请求回来之前,您根本没有这些项目,因此我不确定这是否有效。因此,您可以使用OnClientItemsRequested http://www.telerik.com/help/aspnet-ajax/combobox-onclientitemsrequested.html事件尝试相同的想法 - 查看具有所需文本的项目是否从服务器返回并选择它。

答案 2 :(得分:1)

正如其他人所说 - 启用LoadOnDemand后,服务器上没有组合框项目。 这就是为什么你不能使用FindItemBy *方法 - 它们将始终返回NULL。

提供有关您想要完成的内容的更多信息,然后我们可以提供帮助。

我想您希望使用您已有的文本预先填充组合框 - 为此您最好使用客户端API,例如在组合加载事件中,您可以调用requestItems("您的文本",true)方法传递您已有的文本,组合将发出ajax请求以获取由文本过滤的项目传递作为参数。