2013-12-12 67 views
2

我正在從我的數據庫中成功檢索所需的所有記錄,但只有一條記錄顯示在我的GridView中。GridView只顯示第一個檢索到的記錄

過去幾天我一直在試圖解決這個問題,而且我因爲沒有足夠的選擇而嘗試失敗。我迫切需要一些幫助。

我試圖操縱查詢,因爲我原本以爲這是問題,試圖從我到IQueryable檢索List<MyObject>()的數據進行轉換,試圖在GridView.DataSource的末尾添加.Cast<object>().ToList();,甚至試圖利用ViewState s,還有更多!

請大家幫忙。

我確實有onRowDataBoundselectedIndexChanged事件爲GridView,因爲我讀到他們可能會導致此問題。

下面是我的代碼:

的GridView

gvSubCategories.DataSource = new BASubCategory().GetSubCatWithCatName(); 
gvSubCategories.DataBind(); 


protected void gvSubCategories_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     SubCategory currentSubCat = (SubCategory)e.Row.DataItem; 

     //Image img = (Image)e.Row.FindControl("imgSubCategory"); 
     //img.ImageUrl = currentSubCat.ImageURL; 
    } 
} 

protected void gvSubCategories_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    BASubCategory baSubCat = new BASubCategory(); 
    Guid id = new Guid(gvSubCategories.SelectedDataKey.Value.ToString()); 
    SubCategory subCat = baSubCat.GetSubCategory(id); 

    txtName.Text = subCat.Name; 
    imgImage.ImageUrl = subCat.ImageURL; 
} 

GridView控件定義

<div class="content"> 

    <asp:GridView ID="gvSubCategories" runat="server" DataKeyNames="ID" AutoGenerateColumns="false" 
     onrowdatabound="gvSubCategories_RowDataBound" 
     onselectedindexchanged="gvSubCategories_SelectedIndexChanged"> 
     <Columns> 
      <asp:CommandField ShowSelectButton="true" /> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <asp:Image ID="imgSubCategory" runat="server" Width="100px" Height="100px" /> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:BoundField DataField="CategoryName" HeaderText="Category Name" /> 
      <asp:BoundField DataField="SubCategoryName" HeaderText="Sub Category Name" /> 
      <asp:BoundField DataField="SubCategoryImage" HeaderText="Sub Category Image" /> 
     </Columns> 
    </asp:GridView> 

</div> 
+0

您是否嘗試過將列表分解到自己的對象中,然後執行數據綁定?這也可以讓你檢查它的COUNT,並確保你實際上有你期望的記錄 –

+0

[Linq with join query只返回一條記錄]可能的重複(http://stackoverflow.com/questions/20554853/linq-with-join-query-returning-only-one-record) – Markus

+0

@JimBeam是的,我以前做過。我確實得到記錄。我只是試圖將'onRowDataBound()'註釋掉,並顯示所有記錄。 – ClaireG

回答

0

我已經解決了這個問題我自己。

由於GridViewRowDataBound事件被聲明,並且每行我的對象是由的,正在處

 SubCategory currentSubCat = (SubCategory)e.Row.DataItem; 
所述事件的

產生的誤差的兩個不同Entities(子類別和類別) 。它無法將Anonymous對象(由SubCategory和Category組成)轉換爲SubCategory,從而引發異常。這導致GridView在放置第一個元素後停止執行RowDataBound,因此僅顯示第一個元素。

我不得不刪除上面的行,一切都很完美。