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