我正在使用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时,您的组合框不会绑定(bind),直到用户尝试将其扩展。因此,您不能使用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事件:



因此,您可以尝试使用它:
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不向您返回商品的原因。

如果您指定为什么需要选择此项目,这也将很有帮助。

10-07 21:55