我有一个允许排序列的页面以及一个过滤GridView数据的搜索选项。我遇到的问题是当通过“搜索”选项过滤数据表时,GridView的ViewState SortExpression会丢失。
我的问题是如何在DataBind 之后保留ViewState以确保SortExpression保留在新绑定的dataTable上?
protected void Page_Load(object sender, EventArgs e)
{
try{
if (IsPostBack)
{
Control control = null;
string controlName = Request.Params["__EVENTTARGET"];
if (!String.IsNullOrEmpty(controlName))
{
control = FindControl(controlName);
GridViewRow gvRow1 = (GridViewRow)control.Parent.Parent;
string controlID = control.ID.ToString();
}
}
if(!IsPostBack)
{
DataGrid_Load(DAL.reg(HeadText.Text, OrgText.Text), "reg");
}
}
catch{}
}
private void DataGrid_Load(DataTable command, string type)
{
DataTable dataTable = new DataTable();
dataTable = command;
string sortDir = ViewState["SortDirection"] as string;
string sortExp = ViewState["SortExpression"] as string;
if(ViewState["SortExpression"] != null)
{
dataTable = resort(dataTable, sortExp, sortDir);
}
string myStatus = HeadText.Text;
DataRow[] dr = dataTable.Select("status = '" + myStatus + "'");
DataTable filteredDataTable = dataTable.Clone();
foreach (DataRow sourceRow in dr)
{
filteredDataTable.ImportRow(sourceRow);
}
GridView1.DataSource = filteredDataTable;
GridView1.DataBind();
}
public class dal
{
public DataTable reg(string head, string org = null)
{
if (head == "all")
return Data_Load(String.Format("SELECT * from reg"), "reg");
}
}
答案 0 :(得分:0)
我解决了这个问题,这只是我的加载数据程序的一个问题,它没有考虑GridView中是否有已经过滤的东西,并且新加载的过滤器丢失了。
为了解决这个问题,我创建了一个静态searchFilter变量,并在每个调用将数据加载到GridView中的方法中添加了一个检查:
代码在每个加载数据的函数中都看到了这一点:
if(searchFilter != "")
loadDataWithFilter();
else
loadDataWithoutFilter();
我没有对Page_Load PostBack做任何事情。