我正在使用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,或者我做错了什么?
答案 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请求以获取由文本过滤的项目传递作为参数。