2010-06-20 18 views
0

我有一个多列组合框,其中的数据源是一个列表<>在我的选择班级名单<>。查找(代表)的问题

Select selection = new Select(); 
RadComboBox1.DataSource = selection.GetAcctUtilCo(e.Text, 10).Skip(e.NumberOfItems); 

我有几个DataTextFields。我的DataValueFieldAcctID。
一旦选择一个帐户,我需要datatextfield值来填充gridview中的一些字段。

我试图使用.Find()方法,通过AcctID中检索数据没有成功:(

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上时,它表示为空 我是新的.Find方法&我真的不确定如果问题出在那个或者使用数据源o将组合框视为mylist源。
能有人帮赐教

回答

1

问题是由RadComboBox1.DataSource造成的 - 它不是页面请求之间持续存在。

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

  2. 在运行你上面的代码的情况下,通过读取视图状态值恢复RadComboBox1.DataSource。例如。 RadComboBox1.DataSource = ViewState [“RadComboBox1”];

您应该希望找到值,然后在请求之间持续存在。祝你好运!

+0

它仍然无法正常工作。现在我有:RadComboBox1.DataSource = selection.GetAcctUtilCo(e.Text,10).Skip(e.NumberOfItems); ViewState [“RadComboBox1”] = RadComboBox1.DataSource; RadComboBox1.DataBind();然后,在SelectedIndexChanged事件中,我有:int pkAcct = Convert.ToInt32(RadComboBox1.SelectedValue); List )ViewState [“RadComboBox1”];列表是记录静止空:( ,在视图状态相当于被存储到其存储在变量 – sher1000 2010-06-20 06:05:48

2

您的组合框的数据源是不是列表。当您使用“as”时,如果您尝试转换为无效类型,则结果为null,而不是像标准转换投掷异常。由于您使用跳过功能创建数据源,因此实际上有一个“IEnumerable <>”。

+0

我还试图未经“为”是这样的: 列表)(RadComboBox1.DataSource); – sher1000 2010-06-20 06:03:58

+0

@ sher1000,问题在于*它不是列表*,请尝试以下两种方法之一1)在设置数据源时调用'.Skip(...)'后的'.ToList();'。 2)当您创建'mylist'时,使用'IEnumerable '。 – 2010-06-20 06:15:12

+1

另外,由于您有扩展方法,因此您可以使用3.5。您可以将Find方法简化为'.Find(act => act。AcctID == acctID);' – 2010-06-20 06:16:39