我运行这个事件处理程序和方法来对我的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 :(得分:2)
在往返过程中,DataSource属性会丢失。这就是DataTable dtSortTable = gvMeldingen.DataSource as DataTable;
为空,DataView dvSortedView = new DataView(dtSortTable);
无效的原因。
当您点击数据网格上的排序超链接时,您将触发从客户端到服务器的回发。然后,ASP.NET使用像ViewState等其他持久数据构建回复页面。
DataSource 属性不是往返之间持久状态的一部分,这就是它的值丢失的原因。
解决方案是重新查询您的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(不推荐)
答案 1 :(得分:0)
当您在DataView
周围放置DataTable
时,该方法仅在第一次工作时(假设数据源从开始就是DataTable
)。下次数据来源为DataView
时,您无法将其投放到DataTable
。
从开始使用DataTable
的默认视图作为数据源,以便数据源始终为DataView
。然后,您可以从源中获取视图,并从中获取基础表:
DataView view = gvMeldingen.DataSource as DataView;
DataTable dtSortTable = view.Table;