2011-09-28 57 views
0

我有一个GridView和绑定列表吧:在数据绑定的过程计数项目

List<T> items = T.GetItems(); 

GridView.DataSource = items.OrderBy(x => x.SomeValue); 
GridView.DataBind(); 

现在,我想访问的项目总数数据源。

protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    //access total number of datasource items 
} 

GridView.Rows或GridView.DataKeys没有帮助,因为gridview正在建立在这一点上。当然,我可以使用items.Count(),但我更愿意直接访问底层数据源。

更新

的解决方案张贴工作,而这是我后来包括排序依据语句。

回答

1
protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    var count = ((ICollection<T>)GridView.DataSource).Count; 
} 
+0

我得到一个错误被访问(试着翻译):“类型System.Linq.OrderedEnumerable'2 [T,系统的对象.String]不能被转换为键入“System.Collections.Generic.ICollection'1 [T]” – AGuyCalledGerald

+0

然后,你是**不是**使用'List ',因为你有你的问题。如果你正在使用Linq2Sql数据源尝试在语句末尾添加一个'ToList()' – Magnus

1

我想你可以做类似下面访问的项目数:

 int count = (GridView1.DataSource as List<T>).Count; 

希望这有助于!

编辑1:

增加了使用的完整方法。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 

     int count = (GridView1.DataSource as List<string>).Count; 

    } 
+0

不,我得到一个错误:“对象引用未设置为对象实例” – AGuyCalledGerald

+0

这里,“GridView1”是我正在使用的网格的ID。在那里提供你的ID,“T”是你尝试绑定的列表的类型。请让我知道如果这不起作用,因为它为我工作。 – Praveen

+0

它没有工作。我已将所有内容都改为我的控件和类型。你能显示你的总代码吗?现在会退出。 – AGuyCalledGerald

0

随着我的更新包括,项目数可以

var count = ((IEnumerable<T>)GridView.DataSource).Count();