我有一个多列组合框,其中数据源是List<>在我的选择班
Select selection = new Select();
RadComboBox1.DataSource = selection.GetAcctUtilCo(e.Text, 10).Skip(e.NumberOfItems);
我有一些DataTextFields。我的 DataValueField 是 AcctID。
选择一个帐户后,我需要datatextfield值来填充gridview中的某些字段。
我正在尝试使用AcctID的 .Find()方法来检索数据但没有成功:(
int AcctID = Convert.ToInt32(RadComboBox1.SelectedValue); // *
List<Select> mylist = RadComboBox1.DataSource as List<Select>;
mylist.Find(delegate(SelectTop act) { return act.AcctID == acctID; }); // ** exception here
Label lblAcctNo = (Label)grdAccts.HeaderRow.FindControl("lblAcctNo");
lblAcctNo.Text = mylist.AccountNum;
当我调试时,我在指定的行上得到'对象引用未设置为对象的实例'。
当我将鼠标悬停在它上面时,AcctID不为空。但是,当我将鼠标悬停在 mylist 上时,它会显示为null。
我是.Find方法的新手。我真的不确定问题是否与使用组合框的数据源作为mylist源有关。
有人可以帮助启发我
答案 0 :(得分:2)
您的组合框的数据源不是列表。当您使用“as”时,如果您尝试强制转换为无效类型,则结果为null,而不是像标准强制转换那样抛出异常。由于您使用Skip功能创建数据源,因此您实际上拥有“IEnumerable&lt;&gt;”。
答案 1 :(得分:1)
问题是由RadComboBox1.DataSource引起的 - 它不会在页面请求之间保留。
在设置RadComboBox1.DataSource的代码中,在viewstate中保存RadComboBox1.DataSource值的副本。例如。 ViewState [“RadComboBox1”] = RadComboBox1.DataSource;
如果运行上面的代码,请通过从viewstate读取值来恢复RadComboBox1.DataSource。例如。 RadComboBox1.DataSource = ViewState [“RadComboBox1”];
您应该希望找到值然后在请求之间保持不变。祝你好运!