1

更新パネルにあるグリッドビューがあります。列ヘッダーをクリックすると並べ替えは正常に機能しますが、次のページに移動すると、並べ替えが失われます。以下のコードを提供します。この混乱から抜け出す方法について誰かがアイデアを持っている場合は、助けてください!

ShowGrid()関数はPage_Loadで呼び出されます。問題は、ページング関数でShowGrid()を呼び出すことにあると思います。

 //Show Grid based on argument type
protected void ShowGrid(string arg)
{
    //dataset to hold email addresses
    DataSet ds = new DataSet();
    try
    {
        //open connection with new connection string            
        conn.Open();

        String selectString = String.Format("SELECT * FROM hr_OnlineJobApp"
                     + " WHERE adminCategory='" + adminCategory + "'"
                     + "AND departmentApplyingFor LIKE '" + dept + "' ORDER BY {0} {1}", ViewState["sortExp"], ViewState["sortOrder"]);
        SqlCommand cmd = new SqlCommand(selectString, conn);


        SqlDataAdapter adapter = new SqlDataAdapter(cmd);
        adapter.Fill(ds);

        //bind to gridview
        GridView1.DataSource = ds;
        GridView1.DataBind();

        GridView1.PageIndex = Convert.ToInt32(ViewState["pageIndex"]);
    }
    finally
    {
        if (conn != null)
            conn.Close();
    }
}
 /**********************************************
 * Paging functionality 
 * *******************************************/
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView1.PageIndex = e.NewPageIndex;
    //reshow Grid with current type
    adminCategory = GridView1.DataKeys[0]["adminCategory"].ToString();
    ViewState["pageIndex"] = e.NewPageIndex.ToString();
    ShowGrid(adminCategory);
}

/**********************************************
 * Sorting functionality 
 * *******************************************/
protected void gridView_Sorting(object sender, GridViewSortEventArgs e)
{
    string sortExp = e.SortExpression;
    ViewState["sortExp"] = sortExp;
    string sortDir = (string)ViewState["sortOrder"];

    //Changes the sortDir
    if (ViewState["sortOrder"].ToString() == "desc")
    {
        ViewState["sortOrder"] = "asc";
    }
    else
    {
        ViewState["sortOrder"] = "desc";
    }

    try
    {
        conn.Open();
        string sql = "SELECT * FROM hr_OnlineJobApp"
                     + " WHERE adminCategory='" + adminCategory + "'"
                     + "AND departmentApplyingFor LIKE '" + dept + "' ORDER BY " + sortExp + " " + sortDir;


        SqlDataAdapter mySqlAdapter = new SqlDataAdapter(sql, conn);
        DataSet myDataSet = new DataSet();
        mySqlAdapter.Fill(myDataSet);


        GridView1.DataSource = myDataSet;
        GridView1.DataBind();
    }
    finally
    {
        conn.Close();
    }
}
4

2 に答える 2

2

PageIndexで0に設定していますShowgrid

GridView1.PageIndex = 0;

したがって、から新しい値を上書きしています PageIndexChanging

GridView1.PageIndex = e.NewPageIndex;

したがって、問題を修正するためにShowGridでPageIndexを設定する必要はありません。

この問題のもう1つの考えられる理由:

からのすべてのポストバックでGridViewをデータバインディングしている可能性がありますPage_Load。初めて行う必要があります。プロパティを使用しPage.IsPostBackます:

protected void Page_Load(object sender, System.EventArgs e)
{
   if(!Page.IsPostBack)
       ShowGrid();
}

最後になりましたが、ユーザーがのヘッダーをクリックした場合にのみ並べ替えますgridView_Sorting。GridViewをデータバインドするには、を適用するORDER BYか、1つのメソッドのみを使用する必要があります。ShowGridしかし、あなたはいつもdate descそこに注文しています。

ソートを適用するためにDataViewを使用するのではなくORDER BY、最初にSQLでを使用する必要があります。

String sql = String.Format("SELECT * FROM hr_OnlineJobApp"
                         + " WHERE adminCategory='"+adminCategory+"'"
                         + " ORDER BY {0} {1}", sortExp, sortDir); 
SqlCommand mySqlCommand = new SqlCommand(sql, conn);
于 2012-09-18T17:34:50.430 に答える
0

ShowGrid()関数でGridView1.PageIndex = 0を設定し、Page_Loadイベントでその関数を呼び出すと、すべてのポストバックでページインデックスが0に設定され、問題が発生します。問題を解決するには、その行を削除する必要があります。

于 2012-09-18T18:12:28.427 に答える