page_load()
if not page.ispostback then
  BindGrid()
End If

解决方案 »

  1.   

    jaffler() 
    我的page——load()中已经作了这个。也就是说,仅仅在非PostBack时才执行load事件的BindData()。谢谢你的答复,但这不是我的问题。
      

  2.   

    看看你的ItemCommand里面的代码,或者贴出来看看
      

  3.   

    答:我以前遇到过的,不大记得了
    好象是要在if(!postback){}里加一个if判断sorts,
    在sort_command里datagrid要再获得datasource,databind
    你先试一下
    我回去再看看
      

  4.   

    我还是没有解决这个问题。:(
    目前还是用计数器判断。
    我的代码很简单:
    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事件被引发两次。再次感谢!!!
      

  5.   

    不是这里面的问题,你在page_load处设个断点,跟踪一下,看看先执行什么,后执行什么?
      

  6.   

    我跟踪的结果是:在SortCommand执行到最末一行(})后,立即再次进入SortCommand第一句开始执行!!!Crazy!
      

  7.   

    把binddata和page_load的代码贴出来看看好吗?
      

  8.   

    protected void Page_Load(Object Src, EventArgs E) 
    {
    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();
    }
      

  9.   

    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"] = "";
    }
    }
      

  10.   

    采用ViewState保存上次排序的依据,如果相同就按照默认方式(第一次显示该页的方式)排序。由于SortCommand引发两次(刚好相当于在同一个Sort条件上点击两次),从用户角度看,似乎Sort没起作用。我这才发现SortCommand事件被引发两次。到目前为止我仍然未找到原因。