C# ASP.NET对集合中的每个Gridview进行排序
我有一个GridView控件,它加载到页面上,并充当其他GridView的嵌套。每个子GridView都包含相同的列和数据类型,因此我希望用户能够单击LinkButton按指定的排序表达式对每个GridView进行排序。 这是我到目前为止的代码,它不起作用。它只是返回回发,但返回的数据顺序相同C# ASP.NET对集合中的每个Gridview进行排序,c#,asp.net,gridview,aspxgridview,C#,Asp.net,Gridview,Aspxgridview,我有一个GridView控件,它加载到页面上,并充当其他GridView的嵌套。每个子GridView都包含相同的列和数据类型,因此我希望用户能够单击LinkButton按指定的排序表达式对每个GridView进行排序。 这是我到目前为止的代码,它不起作用。它只是返回回发,但返回的数据顺序相同 foreach (Control c in Page.Controls) { if (c.ID == "dgvResults") { Gri
foreach (Control c in Page.Controls)
{
if (c.ID == "dgvResults")
{
GridView s = (GridView)c;
DataTable dataTable = s.DataSource as DataTable;
if (dataTable != null)
{
DataView dataView = new DataView(dataTable);
dataView.Sort = "OEN ASC";
s.DataSource = dataView;
s.DataBind();
}
}
}
编辑1:我发现数据源不再绑定回发,因此我必须将GridView数据源作为DataTable存储在会话变量中。现在我不能让它工作了
编辑2:我尝试在我的子Gridview的数据绑定和数据绑定事件上存储Gridview.DataSource,但在这两种情况下都不会存储它们。当我试图在上面的代码中再次调用它们时,应该包含Datatable的会话变量不存在
以下是我输入的用于存储DataTable的代码:
// The variable 's' represents the GridView control that triggered the DataBinding event
Session["dtResults"] = s.DataSource as DataTable;
// The code below is how I call the Session variable that I set earlier in the DataBinding event
if (Session["dtResults"] != null)
{
DataTable dataTable = (DataTable)Session["dtResults"];
...
}
这可能不是解决这个问题的正确方法,但我已经习惯了这种方法,它对我很有效。
真正的问题是我的gridview
被附加到一堆DropDownList
控件上,这些控件在回发时将参数值反馈给我的数据源。如果我仅限于1个GridView
,那么我可以将它的DataTable
存储在ViewState
中,但因为我要处理一组动态填充的GridView
,这是不可能的(就我所能工作的范围而言)
因此,我没有遍历嵌套中的每个GridView
,而是又设置了一个DropDownList
,其中包含一个与GridView匹配的字段名列表,然后用户可以从列表中选择要对数据进行排序的字段。然后,该列表的值通过PostBack
传递给数据源的存储过程,该存储过程反过来在内部处理该参数
这样做的好处是,如果用户愿意,他们仍然可以选择对每个GridView
进行单独排序。您是否为GridView启用了viewstate
,并尝试过了?viewstate已经启用,我还尝试将datatable存储在viewstate[]变量中。我可能不得不放弃GridView嵌套,将存储在单个GridView控件中的数据分组。