c# - GridView 仅显示第一个检索到的记录

标签 c# asp.net gridview

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

过去几天我一直在尝试解决这个问题,但我真的很沮丧,因为我没有办法尝试。我迫切需要一些帮助。

我试图操纵查询,因为我最初认为这是问题所在,试图转换我从 IQueryable 检索到的数据至 List<MyObject>() , 试图添加 .Cast<object>().ToList();GridView.DataSource 的末尾, 甚至尝试使用 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>

最佳答案

我自己解决了这个问题。

自从 GridViewRowDataBound 事件被声明后,我的每行对象由两个不同的 Entities(SubCategory 和 Category ), 在

处产生错误
       SubCategory currentSubCat = (SubCategory)e.Row.DataItem;

提到的事件。它无法将匿名对象(由 SubCategory 和 Category 组成)转换为 SubCategory,因此引发异常。这导致 GridView 在放置第一个元素后停止执行 RowDataBound,因此仅显示第一个元素。

我不得不删除上面的行,一切正常。

关于c# - GridView 仅显示第一个检索到的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20556509/

相关文章:

c# - 按 GridView 上的“编辑”按钮时如何打开另一个页面?

javascript - 在 javascript 上将标签更改为文本框

c# - Azure 文件挂载到云服务

asp.net - 如何使用 Newtonsoft 提供自定义 JSON 格式

c# - 表单加载后取消异步操作?

c# - 使用数据表对 Gridview 进行排序

javascript - <path> 属性的值无效

javascript - 验证 gridview 中选中的项目

c# - Hits Object Deprecated in Lucene.Net 3.03,我该如何替换它?

c# - 延迟加载 View 直到 Web 请求或其他长时间运行的任务完成的正确方法