Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET对集合中的每个Gridview进行排序_C#_Asp.net_Gridview_Aspxgridview - Fatal编程技术网

C# ASP.NET对集合中的每个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

我有一个GridView控件,它加载到页面上,并充当其他GridView的嵌套。每个子GridView都包含相同的列和数据类型,因此我希望用户能够单击LinkButton按指定的排序表达式对每个GridView进行排序。 这是我到目前为止的代码,它不起作用。它只是返回回发,但返回的数据顺序相同

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控件中的数据分组。