asp.net 如何以编程方式将带有数据源的RadComboBox设置为AutomaticLoadOnDemand

9rygscc1  于 2024-01-09  发布在  .NET
关注(0)|答案(3)|浏览(123)

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

fdbelqdn

fdbelqdn1#

当你使用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属性,以及基于DataItem修改其Attributes集合等。
你可以尝试使用它:

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不返回一个项目给你的原因。
此外,如果您指定为什么需要选择此项目,将很有帮助。

a0zr77ik

a0zr77ik2#

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

af7jpaap

af7jpaap3#

正如其他人所说的-启用LoadOnDemand后,服务器上没有组合框项。这就是为什么你不能使用FindItemBy* 方法-它们总是返回NULL。
给予更多的信息,你到底想完成什么,我们可以帮助。
我猜你想用你已经拥有的文本预先填充组合框-为此,你最好使用客户端API,例如,在组合加载事件中,你可以调用requestItems(“your text”,true)方法,传递你已经拥有的文本,组合将发出一个appropriate请求,以获得你作为参数传递的文本过滤的项目。

相关问题