列表<> .Find(委托)问题

时间:2010-06-20 05:30:16

标签: c# list find methods delegates

我有一个多列组合框,其中数据源是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源有关。
有人可以帮助启发我

2 个答案:

答案 0 :(得分:2)

您的组合框的数据源不是列表。当您使用“as”时,如果您尝试强制转换为无效类型,则结果为null,而不是像标准强制转换那样抛出异常。由于您使用Skip功能创建数据源,因此您实际上拥有“IEnumerable&lt;&gt;”。

答案 1 :(得分:1)

问题是由RadComboBox1.DataSource引起的 - 它不会在页面请求之间保留。

  1. 在设置RadComboBox1.DataSource的代码中,在viewstate中保存RadComboBox1.DataSource值的副本。例如。 ViewState [“RadComboBox1”] = RadComboBox1.DataSource;

  2. 如果运行上面的代码,请通过从viewstate读取值来恢复RadComboBox1.DataSource。例如。 RadComboBox1.DataSource = ViewState [“RadComboBox1”];

  3. 您应该希望找到值然后在请求之间保持不变。祝你好运!