C# GridView仅显示第一条检索到的记录

C# GridView仅显示第一条检索到的记录,c#,asp.net,gridview,C#,Asp.net,Gridview,我正在成功地从数据库中检索所需的所有记录,但是在我的GridView中只显示一条记录 在过去的几天里,我一直在努力解决这个问题,但我真的很沮丧,因为我已经没有办法尝试了。我急需帮助 我试图操纵查询,因为我最初认为这是问题所在,试图将我从IQueryable检索的数据转换为List(),试图添加.Cast().ToList()在GridView.DataSource的末尾,甚至尝试使用ViewStates等等 任何人,请帮帮我 我确实有onRowDataBound和selectedIndexCha

我正在成功地从数据库中检索所需的所有记录,但是在我的
GridView
中只显示一条记录

在过去的几天里,我一直在努力解决这个问题,但我真的很沮丧,因为我已经没有办法尝试了。我急需帮助

我试图操纵查询,因为我最初认为这是问题所在,试图将我从
IQueryable
检索的数据转换为
List()
,试图添加
.Cast().ToList()
GridView.DataSource
的末尾,甚至尝试使用
ViewState
s等等

任何人,请帮帮我

我确实有
onRowDataBound
selectedIndexChanged
事件用于
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;
}
网格视图定义

<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>

我自己解决了这个问题

由于声明了
GridView
RowDataBound
事件,并且每行的“我的对象”由两个不同的
实体(子类别和类别)组成,因此在

       SubCategory currentSubCat = (SubCategory)e.Row.DataItem;
关于上述事件。它无法将匿名对象(由子类别和类别组成)转换为
子类别
,因此引发异常。这导致
GridView
在放置第一个元素后停止执行
RowDataBound
,从而仅显示第一个元素


我不得不删除上面的一行,一切都很顺利。

只是为了把我对这个问题的答案放在那里。我有一个gridview列,看起来像这样:



您是否尝试过将列表拆分为自己的对象,然后进行数据绑定?这也将允许您检查它的计数,并确保您实际拥有您期望的@JimBeam的可能副本中的记录是的,我以前做过。我确实有记录。我刚刚尝试注释掉
onRowDataBound()
,所有记录都显示出来了。