我使用的是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)过滤的文本你传递作为参数