如何以编程方式将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,或者我做错了什么?

当你使用LoadOnDemand时,你的组合框不会被绑定,直到用户尝试展开它。所以你不能使用DataBound事件

我不确定你的用例是什么。如果你想只显示选定的项目给用户,那么你可以尝试在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事件触发正常,这意味着你可以使用它来改变项目的文本和值属性,以及修改它的属性集合基于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不返回一个项目给你的原因。

如果您能说明为什么需要选中该项,那将会很有帮助。

尝试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事件尝试相同的想法—查看是否有包含所需文本的项目从服务器返回并选择它。

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

提供更多的信息,关于你到底想要完成什么,我们可以帮助。

我猜你想要预先填充的组合框的文本,你已经有-为此,你最好使用客户端API,例如在组合加载事件,你可以调用requesttitems("你的文本",true)方法传递的文本,你已经有和组合将使一个ajax请求获得项目(s)过滤的文本你传递作为参数

相关内容

  • 没有找到相关文章

最新更新