[英]GridView becomes NULL after sorting?
我运行这个事件处理程序和方法来对我的 GridView 进行排序,但它说 GridView 为空:
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)
DataSource 属性在往返过程中丢失。 这就是为什么DataTable dtSortTable = gvMeldingen.DataSource as DataTable;
为空,并且DataView dvSortedView = new DataView(dtSortTable);
是无效的。
当您点击数据网格上的排序超链接时,您正在触发从客户端到服务器的回发。 然后 ASP.NET 使用持久化数据(如 ViewState 和其他数据)构造回复页面。
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事件中设置DataSource(不推荐)
当您在DataTable
周围放置DataView
,该方法只会在第一次工作(假设数据源从一开始就是DataTable
)。 下次数据源是DataView
,您不能将其转换为DataTable
。
从一开始就使用DataTable
的默认视图作为数据源,这样数据源总是一个DataView
。 然后您可以从源获取视图,并从中获取基础表:
DataView view = gvMeldingen.DataSource as DataView;
DataTable dtSortTable = view.Table;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.