dstEmployees = new DataSet(); dstBranches = new DataSet(); dtblEmployees = new DataTable("Employees"); dcolEmployeeID = new DataColumn("EmployeeID",typeof(Int16)); dcolEmployeeID.AutoIncrement = true; dcolEmployeeID.AutoIncrementSeed=1; dcolEmployeeID.AutoIncrementStep=1; dtblEmployees.Columns.Add(dcolEmployeeID); dstEmployees.Tables.Add(dtblEmployees); string SqlStatement;
myConnection = new SqlConnection( System.Configuration.ConfigurationSettings.AppSettings.Get("sqlConStr")); SqlStatement = "SELECT a.DisplayOrder, b.ShortName AS BranchName, a.FullName, a.MobilePhone, a.Extention, a.Email, a.OutsideEmail " + " FROM Employees a INNER JOIN Branches b ON a.Branch = b.BranchID Order By " + ((SortString=="") ? "a.DisplayOrder":"a."+ SortString); myConnection.Open(); dadEmployees = new SqlDataAdapter(SqlStatement, myConnection);
dadBranches = new SqlDataAdapter("SELECT " + " * FROM Branches", myConnection);
我的page——load()中已经作了这个。也就是说,仅仅在非PostBack时才执行load事件的BindData()。谢谢你的答复,但这不是我的问题。
好象是要在if(!postback){}里加一个if判断sorts,
在sort_command里datagrid要再获得datasource,databind
你先试一下
我回去再看看
目前还是用计数器判断。
我的代码很简单:
protected void MyDataGrid_SortCommand(object source, DataGridSortCommandEventArgs e)
{
++L;
if(L>1) return;
string SortStr = e.SortExpression;
if((string)ViewState["Sort"] != SortStr)
{
BindData(e.SortExpression);
ViewState["Sort"] = e.SortExpression ;
}
else
{
BindData("");
ViewState["Sort"] = "";
}
}这段代码的目的是:
再次点击某个栏目的Header时,恢复最初的排序(也就是第一次访问该页的顺序)。因此我用了ViewState记录上次点击的栏目是哪个,如果相同就恢复但是,由于SortCommand被引发两次,导致ViewState保存的状态错误。现在还是不知道什么原因导致SortCommand事件被引发两次。再次感谢!!!
{
if(!IsPostBack)
{
ViewState.Add("Sort","");
BindData("");
}
}private void BindData(string SortString)
{
DataSet dstEmployees,dstBranches;
DataTable dtblEmployees;
SqlConnection myConnection;
SqlDataAdapter dadEmployees,dadBranches;
DataColumn dcolEmployeeID;
dstEmployees = new DataSet();
dstBranches = new DataSet();
dtblEmployees = new DataTable("Employees");
dcolEmployeeID = new DataColumn("EmployeeID",typeof(Int16));
dcolEmployeeID.AutoIncrement = true;
dcolEmployeeID.AutoIncrementSeed=1;
dcolEmployeeID.AutoIncrementStep=1;
dtblEmployees.Columns.Add(dcolEmployeeID);
dstEmployees.Tables.Add(dtblEmployees);
string SqlStatement;
myConnection = new SqlConnection( System.Configuration.ConfigurationSettings.AppSettings.Get("sqlConStr"));
SqlStatement = "SELECT a.DisplayOrder, b.ShortName AS BranchName, a.FullName, a.MobilePhone, a.Extention, a.Email, a.OutsideEmail " +
" FROM Employees a INNER JOIN Branches b ON a.Branch = b.BranchID Order By " + ((SortString=="") ? "a.DisplayOrder":"a."+ SortString);
myConnection.Open();
dadEmployees = new SqlDataAdapter(SqlStatement, myConnection);
dadBranches = new SqlDataAdapter("SELECT " +
" * FROM Branches", myConnection);
dadEmployees.Fill(dstEmployees,"Employees");
dadBranches.Fill(dstBranches);
MyDataGrid.DataSource = dstEmployees; //source ;
MyDataGrid.DataBind();
DataView source1 = new DataView(dstBranches.Tables[0]);
MyDataGrid1.DataSource = source1 ;
MyDataGrid1.DataBind();
myConnection.Close();
}
{
++L;
if(L>1) return;
string SortStr = e.SortExpression;
if((string)ViewState["Sort"] != SortStr)
{
BindData(e.SortExpression);
ViewState["Sort"] = e.SortExpression ;
}
else
{
BindData("");
ViewState["Sort"] = "";
}
}