2010-04-08 63 views
0

我有一個DataGrid是動態綁定到數據庫查詢。用戶在文本字段中輸入一些搜索文本,單擊搜索,後面的代碼使用LINQ(基於字符串搜索表並返回一組有限的列)創建適當的數據庫查詢。GridView爲空時SelectedIndexChanged調用

然後,它將GridView數據源設置爲查詢並調用DataBind()。

protected void btnSearch_Click(object sender, EventArgs e) 
{ 
    var query = from record in DB.Table 
       where record.Name.Contains(txtSearch.Text) //Extra string checking etc. removed. 
       select new 
       { 
        record.ID, 
        record.Name, 
        record.Date 
       }; 

    gvResults.DataSource = query; 
    gvResults.DataBind(); 
} 

這工作正常。

當用戶在網格中選擇一行時,SelectedIndexChanged事件處理程序從網格中的行(其中一個字段)獲取該id,查詢來自DB的完整記錄,然後填充一組編輯器/詳細信息字段與記錄全部細節。

protected void gvResults_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    int id = int.Parse(gvResults.SelectedRow.Cells[1].Text); 
    DisplayDetails(id); 
} 

這在我開發代碼的本地機器上正常工作。但是,在生產服務器上,函數調用成功,但行和列數爲gvResults,griview爲0 - 表爲空。

gridview的viewstate被啓用,我看不到明顯的區別。我做了一些天真的假設,還是依賴於在調試中可能配置不同的東西?

本地我在VS2008上運行一個空的asp.net web項目以使開發更快。生產服務器正在運行sitecore CMS,因此配置相當不同。

任何想法或建議將是最受歡迎的。提前致謝!

回答

0

在圍繞sitecore論壇展開一些討論後,我遇到了這個解釋一個潛在解決方案的blog post

我將<type>System.Web.UI.WebControls.GridView</type>添加到了Web.config的<typesThatShouldNotBeExpanded>部分,它似乎適用於我們。

它似乎與sitecore的頁面佈局渲染管道有關,它擴展了子佈局和內部佔位符以生成整個頁面渲染。它訪問頁面上的.Net控件並將它們捅過一會兒,這可能會導致某些控件無法正常工作。

關於此問題,SDN上有一個article,儘管只有擁有足夠的私有標記的帳戶才能閱讀。希望這可能有助於未來其他任何網站核心用戶。

+0

啊是的,這也可能是事業的原因。它與Sitecore如何掛鉤頁面生命週期有關,我認爲很多人不完全瞭解這一點,並且可能也是他們的商業祕密之一。 我寫了這篇文章,但除此之外我不知道多少。 – 2010-04-08 11:14:52

+0

哈哈!我沒有看到你的SO用戶名!爲博客提醒歡呼!SDN上還有一篇關於這方面的文章,但除非您有賬戶,否則它不可用。 – xan 2010-04-08 11:21:35

1

檢查你的web.config。可能在一個環境中將「AutomaticDataBind」屬性設置爲「false」,並且在您的開發框中設置爲「true」。

我不能肯定,很明顯,但我已經通過了類似的問題在過去被重創和症狀完全一樣,你在這裏描述:-)

附: Sitecore默認這個值爲false。

相關問題