2

我第一次加载 GridView 很好。然后我对一列进行排序,GridView 返回没有行。调试器显示 DataSource 表中有行,但 GridView 本身没有。(请注意,我正在动态创建 GridView,但据我所知,这并不重要。)

这些是代码行:

gv.DataSource = dv;    
gv.DataBind();

没什么特别的。

这些是调试器在单步执行代码时显示的值。

在第一行之前:

dv.Table.Rows.Count 23

((System.Data.DataView)(gv.DataSource)).Table.Rows.Count    '((System.Data.DataView)(((System.Web.UI.WebControls.BaseDataBoundControl)(gv)).DataSource))' is null

gv.Rows.Count   0

在第一行之后:

dv.Table.Rows.Count 23

((System.Data.DataView)(gv.DataSource)).Table.Rows.Count    23

gv.Rows.Count   0

在第二行代码之后:

dv.Table.Rows.Count 23

((System.Data.DataView)(gv.DataSource)).Table.Rows.Count    23

gv.Rows.Count   0
4

3 回答 3

0

也许这些是您正在寻找的机器人

提示:这是手动处理Sorting事件的MSDN文章,如果手动绑定DataSource,则需要这样做。

于 2013-03-29T14:49:36.313 回答
0

对于也遇到此问题的任何人,我的原因不同。在 DataTable 上使用 a后,DataView到 GridView 控件的数据绑定无法在 DataTable 中显示所有结果。

我将 DataTable 加载到会话变量中。我使用该会话变量绑定 GridView DataTable table = Session["mytable"] as DataTable

一旦我创建了DefaultViewDataTable 对象,并在任何控件上执行了 .DataBind(),GridView 在 DataBind() 上没有显示任何结果,但是 DataTable 中实际上有数据。

解决方案是将DataTable 的副本创建到局部变量中,以显示该单个 web 控件 (DropDownList) 中数据的 DefaultView。

代码:

DropDownList ddl = ((DropDownList)grvTasks.Rows[e.NewEditIndex].FindControl("cmb_TaskStartsAfter"));
DataTable copytable = LoadedTasks.Copy();
DataView v = copytable.DefaultView;
v.RowFilter = "TSK_ID  " + r["TSK_ID"];
ddl.DataSource = v;
于 2013-11-08T16:23:15.940 回答
0

已解决:对于可能遇到此问题的任何人,我不知道为什么会导致问题,但是当您动态创建 GridView 列时,您需要在回发时重新创建它们。在那次游戏中,对于这个特定的负载,我总是将它设置为排序 ASC(然后它会第二次点击排序例程并正确排序)。返回以对数据进行排序时,我对 ASC 的手动设置与切换到 DESC 的默认行为相冲突,并且无论出于何种原因,都会导致从 DataBind 上的 GridView 中删除所有行,即使它是 DataSource 的 DataView 有数据。虽然这不应该造成问题,但确实如此。一旦我删除了 PageLoad 中的手动排序,它就起作用了(我没有真正做到,但这已经进入了我的应用程序的杂草)。

于 2013-03-30T10:19:53.687 回答