2011-03-02 61 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