2011-05-09 37 views
1

我运行此事件处理程序和方法进行梳理我的GridView控件,但最高审计机关,它是空:排序后GridView变为NULL?

protected void OtherGridView_Sorting(object sender, GridViewSortEventArgs e) 
    { 
     DataTable dtSortTable = gvMeldingen.DataSource as DataTable; 

      DataView dvSortedView = new DataView(dtSortTable); 
      dvSortedView.Sort = e.SortExpression + " " + getSortDirectionString(e.SortDirection); 
      gvMeldingen.DataSource = dvSortedView; 
      gvMeldingen.DataBind(); 

    } 
    private string getSortDirectionString(SortDirection sortDirection) 
    { 
     string newSortDirection = String.Empty; 
     if (sortDirection == SortDirection.Ascending) 
     { 
      newSortDirection = "ASC"; 
     } 
     else 
     { 
      newSortDirection = "DESC"; 
     } 
     return newSortDirection; 
    } 

请帮助我。先谢谢你!

这是我得到的错误:在使用DataView之前必须设置DataTable。

这凸显:dvSortedView.Sort = e.SortExpression + " " + getSortDirectionString(e.SortDirection)

+0

是dtSortaTable空每次设置DataSource?您能否在页面的Load事件中发布代码? – Larry 2011-05-09 07:25:57

+0

有没有加载事件 – SamekaTV 2011-05-09 07:27:08

+0

我得到这个错误:DataTable必须在使用DataView之前设置。 并突出显示:dvSortedView.Sort = e.SortExpression +“”+ getSortDirectionString(e.SortDirection); – SamekaTV 2011-05-09 07:28:35

回答

2

DataSource属性在往返过程中丢失。这就是为什么DataTable dtSortTable = gvMeldingen.DataSource as DataTable;为空,且DataView dvSortedView = new DataView(dtSortTable);无效。

当您在数据网格上点击排序超链接时,会触发从客户端到服务器的回发。然后,ASP.NET使用持久数据(如ViewState等)构建回复页面。

The DataSource属性不是持续状态往返之间的一部分,这就是为什么它的价值丢失。

一个解决办法是重新查询你的数据源如下:

protected void OtherGridView_Sorting(object sender, GridViewSortEventArgs e) 
    { 
     var SortExpression = e.SortExpression + " " + getSortDirectionString(e.SortDirection); 

     gvMeldingen.DataSource = ... // Requery the Data using the new sort expression above 
     gvMeldingen.DataBind(); 
    } 

另一种方案是在Page_Load事件(不推荐)

+0

这给出了错误,看看你在哪里直接指定类型SortExpression。 – SamekaTV 2011-05-09 07:45:15

+0

以及gvMeldingen的数据源呢? – SamekaTV 2011-05-09 07:45:49

+0

关于gvMeldingen的DataSource,你能否在第一次填写它的代码片段? – Larry 2011-05-09 08:01:14

0

当你把一个DataViewDataTable左右,该方法将只工作在第一时间(假设数据源是从开始DataTable)。下一次数据源是DataView,并且您不能将其投射到DataTable

使用DataTable的默认视图作为开始时的数据源,以便数据源始终为DataView。然后,您可以从源代码获取视图,并从中获取底层表格:

DataView view = gvMeldingen.DataSource as DataView; 
DataTable dtSortTable = view.Table; 
+0

我不确定数据源是否在往返之间持续 – Larry 2011-05-09 07:31:20

+0

这是我在代码之后得到的错误:对象引用未设置为对象的实例。 – SamekaTV 2011-05-09 07:32:04

+0

这部分突出显示:DataTable dtSortTable = view.Table; – SamekaTV 2011-05-09 07:32:34