我在我的asp.net应用程序中使用linq2sql。当它与linq2sqldatasource对象一起使用时,一切正常,我的意思是我将它绑定到没有代码到detailsview控件。 我的想法是当我点击detailscontrol中的一行时,e将加载/添加一个customwebcontrol,允许编辑数据。 为此,我需要加载一些项目来填充该customcontrol中的下拉列表,并在其加载事件中,我有下面的代码不起作用,我不明白为什么。它引发了一个对象null引用异常。
示例:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//loads combobox with organizations
using (MyDataContext cdc = new MyDataContext())
{
var queryOrgs = from p in cdc.orgUnits
select p;
//Organizations
dropDownOrgs.DataSource = queryOrgs.ToList();
dropDownOrgs.DataValueField = "orgUnitID";
dropDownOrgs.DataTextField = "orgUnitName";
dropDownOrgs.DataBind();
}
}
}
任何人都知道发生了什么事吗?看起来当我想手动绑定所有东西时不起作用:(
希望你能帮助我。
感谢。 特谢拉
答案 0 :(得分:1)
@Chalkey是对的。我自己遇到了这个错误,由于LINQ to SQL执行“懒惰”查询,它会等到最后一分钟才真正执行查询。
这意味着它可能要等到page_load函数执行查询之后(因此在using语句之外)。
因此,使用.ToList()将数据作为列表返回,以强制它立即运行查询。
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//loads combobox with organizations
using (MyDataContext cdc = new MyDataContext())
{
List<orgUnit> queryOrgs = (
from p in cdc.orgUnits
select p
).ToList();
//Organizations
dropDownOrgs.DataSource = queryOrgs.ToList();
dropDownOrgs.DataValueField = "orgUnitID";
dropDownOrgs.DataTextField = "orgUnitName";
dropDownOrgs.DataBind();
}
}
}