【发布时间】:2026-02-15 20:45:02
【问题描述】:
我正在开发一个基本的 Web 表单,它允许用户搜索数据库中的某些列并在 GridView 中显示这些记录。我有几个 TextBox 控件允许用户搜索名称、ID 等。我将 LinqToSql 用于我的数据访问层。这是您的基本搜索表单。
问题来自我尝试使用的 GridView 显示数据。我在 Button 控件的 OnClick 事件方法中有查询本身。
protected void SearchSpecific_Click(object sender, EventArgs e)
{
MyDataContext dbContext = new MyDataContext();
var results = from row in dbContext.MyTable
select row;
if(TextBoxIsValid(IDNumber))
results = results.Where(m => m.ID == Int32.Parse(IDNumber.Text));
if (validationFlag)
{
// this part doesn't seem right
SearchResultDataset.DataSource = results;
SearchResultDataset.DataBind();
}
}
这里是网格视图,虽然没什么特别的:
<asp:GridView ID="SearchResultDataset" runat="server"
AlternatingRowStyle-CssClass="alt"
CssClass="search_results"
GridLines="None"
AutoGenerateColumns="true"></asp:GridView>
在我到达 DataBind() 方法并抛出 NullReferenceException 之前,一切都运行得很顺利。神圣的例外,蝙蝠侠!
调试器告诉我结果具有正确的值,但我感觉它与回发时绑定数据源有关。我觉得我错过了什么......有什么建议吗?如有必要,我可以提供堆栈跟踪。
编辑:
手头有一个更大的问题。我尝试将 LinqDataSource 和 ObjectDataSource 控件都添加到我的页面,并且都抛出 NullReferenceException。我使用 GUI 构建了两者,它们看起来很完美。
之后,我在 Page_Load 方法中分配了一个 DataSource:
try
{
MyDataContext dbc = new MyDataContext();
SearchResultDataset.DataSource = dbc.MyTable;
SearchResultDataset.DataBind();
}
catch (Exception ex)
{
errText.InnerHtml = ex.ToString();
}
想出了这个例外:
System.Reflection.TargetInvocationException: Property accessor 'IsPostBack' on object 'MySite.MySite' threw the following exception:'Object reference not set to an instance of an object.' ---> System.NullReferenceException: Object reference not set to an instance of an object.
在 System.Web.UI.UserControl.get_IsPostBack()
异常肯定是在 DataBind() 方法中引发的。这就提出了WTF正在发生的问题?我似乎无法将 linqtosql 源绑定到我的 GridView。我似乎找不到该页面,但我在某处读到 GridView 难以绑定到任何不是 DataSet 对象的东西。
更新
使用SqlDataSource控件访问数据库。
【问题讨论】:
-
为什么要删除您的帖子?它不是那样工作的。当您在此处发布问题时,您将根据 cc:wiki 许可将其许可给社区。在发帖之前考虑一下这个。
标签: c# asp.net linq-to-sql