Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.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# 如何拥有数据表';s的内容在作用域结束后仍然有效?_C#_.net_Asp.net_Oop_Datatable - Fatal编程技术网

C# 如何拥有数据表';s的内容在作用域结束后仍然有效?

C# 如何拥有数据表';s的内容在作用域结束后仍然有效?,c#,.net,asp.net,oop,datatable,C#,.net,Asp.net,Oop,Datatable,我有一个DataTable,它在我的类的开头声明如下: private DataTable table = new TestData().FillTable(); 在整个课程中,我能够访问表格的内容 但是,我有一个GridView排序事件,它改变了DataTable的内容。在事件本身中,内容发生了更改,我已经通过调试确认了这一点。但是,如果我从该方法之外的任何地方调用该表,DataTable的内容将保持原样,也就是说,一旦soerting事件的作用域结束,新值似乎将被擦除 以下是我的排序事件的

我有一个DataTable,它在我的类的开头声明如下:

private DataTable table = new TestData().FillTable();
在整个课程中,我能够访问表格的内容

但是,我有一个GridView排序事件,它改变了DataTable的内容。在事件本身中,内容发生了更改,我已经通过调试确认了这一点。但是,如果我从该方法之外的任何地方调用该表,DataTable的内容将保持原样,也就是说,一旦soerting事件的作用域结束,新值似乎将被擦除

以下是我的排序事件的代码:

protected void TableGridView_Sorting(object sender, GridViewSortEventArgs e)
    {
        table.DefaultView.Sort = "GroupNumber, " + e.SortExpression + GetSortDirectio(e.SortExpression);
        TableGridView.DataSource = table;
        TableGridView.DataBind();
    }
当我在上述事件中测试表的内容时,似乎添加了新的值。但是,如果从任何其他方法调用该表,将返回旧值



如何使表的内容全局更新,即更新到类开头声明的变量,并且根据方法不具有不同的状态?

我已使用GridView排序事件对此进行了测试。保留排序事件this.table包含已排序的值,因此它可以作为exptected运行。您确定要在单页请求中测试解决方案吗。回发后,再次从TestData().FillTable()分配this.table。

我已使用GridView排序事件对此进行了测试。保留排序事件this.table包含已排序的值,因此它可以作为exptected运行。您确定要在单页请求中测试解决方案吗。回发后,再次从TestData().FillTable()分配此.table。

使用此.table有什么具体原因吗?如果它是一个类变量,只需使用它就可以了。但是,我想这不是答案。试试看。该死,我希望我有一个IDE在这里工作:(我也尝试过不使用“this”,但仍然不起作用):/奇怪的是,即使MSDN说创建并返回了一个新的DT。我对它进行了无数次调试——每次排序事件中都会出现表的差异,但范围一过,更改就无法保存。这让我发疯——不知何故,我认为我一直在做错事文章说ToTable创建了一个新的表,并保存了关于DT的信息,而不仅仅是表方法。嘿,顺便说一句,你从表中创建的视图。所以视图有点链接到表,你的更新回到了表。我在这里看到了一些可疑的地方。你使用this.table有什么具体的原因吗?如果它是一个类变量,就不用它了。但同样,这是不是我想的答案。试试看。该死,我希望我有一个IDE在这里工作:(我也尝试过不使用“this”,但仍然不起作用):/奇怪的是,即使MSDN说创建并返回了一个新的DT。我对它进行了无数次调试——每次排序事件中都会出现表的差异,但范围一过,更改就无法保存。这让我发疯——不知何故,我认为我一直在做错事文章中说ToTable创建了一个新表,并将DT上的信息持久化,而不仅仅是表方法。嘿,顺便说一句,您从表中创建的视图。因此视图有点链接到表,您的更新返回到表。我在这里看到一些可疑之处。这就是问题所在,您是对的。您刚刚测试了它,并且确信在事件发生后,表是从TestData()分配的.FillTable()再说一次。你知道如何防止它这样做吗?我不知道你为什么需要排序的DataTable类字段,这样我的解决方案可能不适合你。首先你必须在GridView中分配DataKeyNames属性。然后你可以使用你的GridViewObject.DataKeys集合来获取当前绑定行的顺序。在第\u页中加载创建DataTable,然后使用DataKeyName对DataTable进行排序。其他解决方案是将DataTable序列化为ViewState(对页面大小的影响)或会话(对服务器内存和性能的影响)。您也可以使用数据库。您可以找到有关的详细信息,感谢您提供了大量信息:)我将尝试使用DataKeyname方法,但是,考虑到排序完成后,GridView将再次数据绑定,这是否是一个问题。例如,GridView是否会丢失以前添加的DataKeyname值?这是一个问题,您是对的。只需对其进行测试,并在事件发生后确定表被分配了from TestData().FillTable()再说一次。你知道如何防止它这样做吗?我不知道你为什么需要排序的DataTable类字段,这样我的解决方案可能不适合你。首先你必须在GridView中分配DataKeyNames属性。然后你可以使用你的GridViewObject.DataKeys集合来获取当前绑定行的顺序。在第\u页中加载创建DataTable,然后使用DataKeyName对DataTable进行排序。其他解决方案是将DataTable序列化为ViewState(对页面大小的影响)或会话(对服务器内存和性能的影响)。您也可以使用数据库。您可以找到有关的详细信息,感谢您提供了大量信息:)我将尝试使用DataKeyname方法,但是,考虑到排序完成后,GridView将再次数据绑定,这是否是一个问题。例如,GridView是否会丢失以前添加的DataKeyname值?