在我的aspx.cs文件中定义string SortExpression;用来记住我的排序key可是我点翻页这个怎么就变null了?
string SortExpression;
ICollection CreateDataSource()
{
sqlDataAdapter1.Fill(dataSet11);
dataView1.Sort=SortExpression;
return dataView1;
}
private void Page_Load(object sender, System.EventArgs e)
{
if (SortExpression == "")
SortExpression = "UserCode";
if (!Page.IsPostBack)
{
DataGrid1.DataSource = CreateDataSource();
DataGrid1.CurrentPageIndex = 0;
DataGrid1.DataBind();
}
}
private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
DataGrid1.DataSource = CreateDataSource();
DataGrid1.CurrentPageIndex = e.NewPageIndex;
DataGrid1.DataBind();
}
private void DataGrid1_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
{
SortExpression = e.SortExpression.ToString();
DataGrid1.DataSource = CreateDataSource();
DataGrid1.CurrentPageIndex = 0;
DataGrid1.DataBind();
}
你运气真好,刚编了一段这样的代码。
不懂再问
private void DataGrid1_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
{
DataView myview=((DataSet)ViewState["ds"]).Tables[0].DefaultView;
myview.Sort=e.SortExpression;
ViewState["sort"]=e.SortExpression;
DataGrid1.DataSource=myview;
DataGrid1.DataBind();
}
private void BindGrid()
{
string sql="select cLicense,cType,cOwner from t_CarRegister";
DataSet ds=publicClass.DataBase.ReturnDataSet(sql);
ViewState["ds"]=ds;
DataView myview=ds.Tables[0].DefaultView;
if (ViewState["sort"]!=null)
{
myview.Sort=(string)ViewState["sort"];
}
DataGrid1.DataSource=myview;
DataGrid1.DataBind();
}
翻页事件会导致页面里的变量类型重新定义
所以翻页后你的string类型的变量SortExpression会变成null
如果你不想改动你的程序可以使用viewstate类型
即将变量SortExpression换成ViewState["SortExpression"]
ViewState的使用类似于Session的使用
当你翻页时,页面又向服务端递交了一次,你的变量均恢复成默认值,所以只能采取些特殊方法保存值,ViewState是不错的方法,相当于页面上的隐藏字段,具体方法上面说过了