2010-12-07 46 views
0

我的GridView時間很糟糕。我一直在用細齒梳去檢查我的代碼,找不到問題。爲什麼我的GridView間歇性地不顯示我的.net TemplateFields

我有一個ASP.net GridView有七列;數據來自SQL。兩列保存JavaScript,用戶可以點擊刪除或修改數據庫中的條目。其他五個字段包含數據庫中人員的姓名,電話號碼和電子郵件地址。

我的四個字段是ASP.net TemplateFields。

頁面加載時,所有內容都正確顯示。但是,如果用戶單擊JavaScript鏈接,單擊按任意字段對GridView進行排序,或執行任何其他導致回發的操作,則生成的頁面可能不會顯示我的TemplateFields的內容;他們都是空白的。

只是讓你可以看到我的工作,我有這樣定義一個「名稱」欄:

<asp:TemplateField HeaderText="Name" SortExpression="name" ItemStyle-Width="150"> 
<ItemTemplate> 
<%#(string)Eval("surname") + ", " + (string)Eval("fname") %> 
</ItemTemplate> 
</asp:TemplateField> 

如果我踩通在調試器的代碼,我看到,在在模板字段正確顯示的情況下,調試器停在顯示名稱的行上。在字段全部爲空的情況下,它跳過代碼以顯示這些字段的內容;並且永遠不會有任何理由。

似乎會導致問題的唯一情況是,從查詢字符串(它告訴頁面要加載的數據)中設置了一個枚舉值。當枚舉值設置爲1時,我從來沒有看到這個錯誤,但是當枚舉值設置爲2時,我總是看到它。

但是,在我的gridview代碼中,任何地方都不會引用enum。

無論如何,總是調用GridView.DataSource = x並始終調用GridView.DataBind()。我嘗試通過代碼來檢查數據庫中的數據是否正確。我試過在調用DataBind的代碼塊以及GridViewRow_DataBound事件處理程序上進行調試。

我已經看到其他職位在有關TemplateField的麻煩,但他們似乎沒有解決這裏發生了什麼。

任何想法?

+0

請驗證您是否綁定了GridView,每次回發時數據源都充滿了數據,而不是空的。 – sam 2010-12-08 10:00:48

回答

0

我想出了答案的一部分。我發現一些代碼,讀起來像:

if (!userIsAllowedToSeePrivatePhoneNumbers) 
    removePrivatePhoneNumber(gridView); 
*** 
    protected void removePrivatePhoneNumber(GridView gridView) 
    { 
     DataControlField privatePhoneNumberColumn = null; 
     foreach (DataControlField column in gridView.Columns) 
     { 
      if (column.HeaderText.ToUpper() == "PRIVATE PHONE") 
       privatePhoneNumberColumn = column; 
     }    

     gridView.Columns.Remove(privatePhoneNumberColumn); 
    } 

我發現,如果我列的可見性設置爲false,而不是正確地移除列,我所有的數據顯示的。我不明白爲什麼會出現這種情況,但是現在讓程序正常工作是一個令人滿意的解決方案。

protected void removePrivatePhoneNumber(GridView gridView) 
    { 
     DataControlField privatePhoneNumberColumn = null; 
     foreach (DataControlField column in gridView.Columns) 
     { 
      if (column.HeaderText.ToUpper() == "PRIVATE PHONE") 
       privatePhoneNumberColumn = column; 
     }    

     privatePhoneNumber.Visible = false; 
    } 
相關問題