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

时间:2013-12-12 23:40:21

标签: c# asp.net gridview

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

过去几天我一直试图解决这个问题,因为我没有选择尝试,所以我真的很沮丧。我迫切需要一些帮助。

我试图操纵查询,因为我原本认为这是问题,尝试将我从IQueryable检索的数据转换为List<MyObject>(),尝试添加.Cast<object>().ToList(); at GridView.DataSource的结尾,甚至尝试使用ViewState,还有更多!

请,任何人,帮助。

onRowDataBound我有[{1}}和selectedIndexChanged个事件,因为我读到他们可能导致此问题。

以下是我的代码:

GridView

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

2 个答案:

答案 0 :(得分:0)

我自己解决了这个问题。

由于声明了GridView的{​​{1}}事件,并且每行的对象由两个不同的RowDataBound(子类别和类别)组成,因此在

Entities

上述事件。它无法将Anonymous对象(由SubCategory和Category组成)转换为 SubCategory currentSubCat = (SubCategory)e.Row.DataItem; ,从而触发异常。这导致SubCategory在放置第一个元素后停止执行GridView,因此只显示第一个元素。

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

答案 1 :(得分:0)

只需将我的答案放在这个问题上即可。我有一个看起来像这样的Gridview列:

<asp:BoundField DataField="DueDate" HeaderText="DueDate" SortExpression="DueDate">
  <ItemStyle Wrap="False" />
</asp:BoundField>

我的网格正在被调用存储过程的代码中的字段所占用,在这里也不是太多。 c#的结尾看起来像这样

gv_maingrid2.DataSource = dt
gv_maingrid2.DataBind()

问题是我的存储过程没有为DueDate列返回列标题。当我在SSMS中运行存储过程时,DueDate列值显示为“((无列名)”),因为我将值强制转换为varchar且从未添加别名或列名。检查以查看是否获得了所有列标题。我希望这对某人有帮助!