gpt4 book ai didi

c# - 尝试设置组合框的选择时,对象引用未设置到对象的实例

转载 作者:行者123 更新时间:2023-11-30 13:58:49 31 4
gpt4 key购买 nike

我有一个文本框和一个RadComboBox,如下所示:

<asp:TextBox ID="txt_inner_emp_num" runat="server" Width="60px" 
ontextchanged="txt_inner_emp_num_TextChanged" AutoPostBack="true"></asp:TextBox>
<telerik:RadComboBox ID="rad_ddl_inner_emp_name" runat="server" CausesValidation="False"
CollapseDelay="0" Culture="ar-EG" ExpandDelay="0" Filter="Contains" ItemsPerRequest="100"
MarkFirstMatch="true" Width="380px" EnableAutomaticLoadOnDemand="True" EmptyMessage="-emp name-" ShowMoreResultsBox="True" AutoPostBack="True">
</telerik:RadComboBox>

根据Telerik Documentation

Set a data source to the RadComboBox. Use either DataSourceID or the DataSource property to do this and set the DataTextField and DataValueField properties to the respective fields in the data source. (Note that when using DataSource you must set the property on each postback, most conveniently in Page_Init.) Set EnableAutomaticLoadOnDemand to true.


 protected void BindEmployees()
{

rad_ddl_inner_emp_name.Items.Clear();
rad_ddl_inner_emp_name.DataSource = Utilities.GetAllEmployees();
rad_ddl_inner_emp_name.DataTextField = "name";
rad_ddl_inner_emp_name.DataValueField = "emp_num";
rad_ddl_inner_emp_name.DataBind();

}

 protected void Page_Init(object sender, EventArgs e)
{
BindEmployees();
}

 protected void txt_inner_emp_num_TextChanged(object sender, EventArgs e)
{
rad_ddl_inner_emp_name.ClearSelection();
rad_ddl_inner_emp_name.Items.FindItemByValue(txt_inner_emp_num.Text.TrimEnd()).Selected = true;//Get exception here Object reference not set to an instance of an object.
}

我发现 rad_ddl_inner_emp_name.Items.Count = 0 !!在设置选择之前!如何解决这个问题?

最佳答案

我相信您现在已经知道,radcombox typeahead 功能通过客户端交互而不是按值搜索文本,这就是您找不到值的原因。

我的建议是使用一个辅助对象来按 emp_num 进行搜索(假设这是将始终输入到文本框中的值)。

例如创建一个全局变量:

private Dictionary<string, string> Emp_Dict = new Dictionary<string, string>(); 

然后在进行绑定(bind)时填充此字典。以下代码假定返回一个 ienumerable 类型。如果不是,您可能必须以不同方式填充字典。此外,要使其正常工作,您必须包含 (System.Linq)。

    var dataSource = Utilities.GetAllEmployees();
Emp_Dict = dataSource.ToDictionary(ex => ex.emp_num, ex => ex.name);
rad_ddl_inner_emp_name.Items.Clear();
rad_ddl_inner_emp_name.DataSource = dataSource;
rad_ddl_inner_emp_name.DataTextField = "name";
rad_ddl_inner_emp_name.DataValueField = "emp_num";
rad_ddl_inner_emp_name.DataBind();

所以现在我们需要在文本更改事件上使用字典。

protected void txt_inner_emp_num_TextChanged(object sender, EventArgs e)
{
rad_ddl_inner_emp_name.ClearSelection();
if (Emp_Dict.ContainsKey(txt_inner_emp_num.Text.TrimEnd()))
{
rad_ddl_inner_emp_name.SelectedValue = txt_inner_emp_num.Text.TrimEnd();
rad_ddl_inner_emp_name.Text = Emp_Dict[txt_inner_emp_num.Text.TrimEnd()];
}

}

现在,当文本框中的文本发生变化时,radcombobox 将在文本框中输入有效的 emp_num 时更新。

关于c# - 尝试设置组合框的选择时,对象引用未设置到对象的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15224279/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com