2011-03-02 69 views
0

我正在开发一个基本Web窗体,允许用户搜索数据库中的某些列并在GridView中显示这些记录。我有几个TextBox控件,允许用户搜索名称,ID等。我正在为我的数据访问层使用LinqToSql。这是您的基本搜索表单。使用OnClick事件更新Gridview

麻烦来了,我试图使用显示数据的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(); 
    } 
} 

这里的GridView控件,虽然它没有什么特别:

<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方法:

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对象的东西。

UPDATE

二手SqlDataSource控件访问数据库。

+0

你为什么想你撤职?它不这样工作。当您在此发布问题时,您可以使用cc:wiki许可证将其授权给社区。在发布之前考虑这个*。 – 2011-03-03 22:26:21

回答

1

你的问题似乎是你试图将你的数据视图绑定到匿名类型。作为MSDN说:

从查询 返回匿名类型不支持 创建数据视图。

解决方案:使用.ToList()函数将该var转换为数据视图可理解并可使用的数据类型。

像这样:

SearchResultDataset.DataSource = results.ToList(); 
+0

凹凸指出一个错误,但是这不能解决NullReference。更奇怪的是,我添加了一个LinqDataSource来无差别地填充表并抛出一个NullReferenceException。但是,我知道我可以访问数据库,因为我使用同一个表中的数据填充其他控件。这样一个奇怪的,令人沮丧的问题。 – krs1 2011-03-02 21:53:28

+0

好的,在这一点上,堆栈跟踪将会有所帮助。 – guildsbounty 2011-03-02 21:57:06

+0

我还必须在数据绑定控件中设置nulldisplaytext属性。 – krs1 2011-03-03 19:26:12