Gridview DataSource有行,但GridView没有

时间:2013-03-29 14:36:54

标签: c# .net

我第一次加载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

3 个答案:

答案 0 :(得分:0)

也许these are the droids you're looking for

提示:这是用于手动处理Sorting事件的MSDN文章,如果手动绑定DataSource,则需要执行此操作。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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

解决方案是将DataTable的副本创建为局部变量,以显示该单个webcontrol(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;