0

updatePanel 内に Id が GridView1 である GridView があり、ほとんどのイベントをプログラムで定義しましたが、並べ替え用のイベント ハンドラーを作成する際に問題はありません。私のコードを見て、以下のデータテーブル?

// Method to BinData to GridView1

private void BindData()
     {
         string strQuery = "SELECT * FROM [tbl_SignIns] ";
         SqlCommand cmd = new SqlCommand(strQuery);
         GridView1.DataSource = GetData(cmd);
         GridView1.DataBind();
     }

     private DataTable GetData(SqlCommand cmd)
     {
         DataTable dt = new DataTable();
         SqlConnection con = new SqlConnection(strConnString);
         SqlDataAdapter sda = new SqlDataAdapter();
         cmd.CommandType = CommandType.Text;
         cmd.Connection = con;
         con.Open();
         sda.SelectCommand = cmd;
         sda.Fill(dt);
         return dt;
     }


 protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
     {

?????????????????????????????????

     }
4

2 に答える 2

0

私も同じ問題を抱えていて、このように解決しました。まず、gridviewヘッダーに上下の矢印を追加しました。

     <asp:TemplateField FooterText="Toplam" HeaderText="---">
 <HeaderTemplate>
 <asp:Label ID="Label4" runat="server" Text="---"></asp:Label><br />
 <br />
 <div id="myelement">
 <asp:ImageButton ID="btnDateUp" runat="server" ImageUrl="~/Admin/skins/Skin_1/images/grid_uparrow.png"
 OnClick="btnDateUp_Click" />
 <asp:ImageButton ID="btnDateDown" runat="server" ImageUrl="~/Admin/skins/Skin_1/images/grid_downarrow.png"
 OnClick="btnDateDown_Click" Style="width: 16px" />
 </div>
 </HeaderTemplate>
 <ItemTemplate>
 <asp:Label ID="Label3" runat="server" Text='<%# Bind("OrderDate", "{0:D}") %>'></asp:Label>
 </ItemTemplate>
 <ItemStyle HorizontalAlign="Left" Width="210px" />
 </asp:TemplateField>

その後、次のようにSQLクエリを準備しました。

protected void btnDateUp_Click(object sender, ImageClickEventArgs e)
    {
        sortingQuery = " ORDER BY OrderDate DESC ";
        if (radioListReport.SelectedValue == "1")
            SortGrid();
        else
            SortQuarterGrid();

        updatePanelGrid.Update();
    }

protected void btnDateDown_Click(object sender, ImageClickEventArgs e)
    {
        sortingQuery = " ORDER BY OrderDate ASC ";
        if (radioListReport.SelectedValue == "1")
            SortGrid();
        else
            SortQuarterGrid();

        updatePanelGrid.Update();
    }

お役に立てば幸いです。

于 2012-06-01T07:53:32.177 に答える
0

2 つのビューステートを作成する必要があります。1 つは並べ替え方向用で、もう 1 つは並べ替え中にチェックするための並べ替え式用です。

まず、並べ替え方向はグリッドビューから「昇順」および「降順」として取得されます。データテーブルでデータをファイラーする場合は、グリッドビューの並べ替え方向を渡し、値に応じて「ASC」および「DESC」を使用する必要があります。データブルのソート。

次に、並べ替え方向を渡して反転させる反転機能です。列を最初にクリックしたときに使用されます。たとえば、「ASC」を並べ替えます。次に、2回目にクリックする必要があります。 「DESC」だからひっくり返します。

3 番目に、Viewstates を使用して、前の並べ替えの値を保留します。

4番目に、PageIndexChangingイベントのソートデータテーブルを保持するビューステートを作成します。もちろん、ビューステートがnullかどうかを確認する必要があります。データをフェッチしてバインドする必要があります。そうでない場合は、グリッドビューをソートされたデータテーブルにバインドする必要があります。

protected void GridView_Users_Sorting(object sender, GridViewSortEventArgs e)
{
    if (String.IsNullOrEmpty(ViewState["sortExpression"].ToString()) && String.IsNullOrEmpty(ViewState["sortDirection"].ToString()))
    {
      //Sort and bind data as ASCENDING for the first time
      DefaultSortBind(e);
    }
    else
    {
        if (ViewState["sortExpression"].ToString() == e.SortExpression.ToString())
        {
            string sortDirection = string.Empty;
            if (ViewState["sortDirection"].ToString() == e.SortDirection.ToString())
            {
                sortDirection = flipSortDirection(GetSortDirection(e.SortDirection.ToString()));
            }
            else
            {
                sortDirection = GetSortDirection(e.SortDirection.ToString());
            }

            DataTable dt = new UserInfoTableTableAdapter().GetData();
            dt.DefaultView.Sort = e.SortExpression + " " + sortDirection;
            GridView_Users.DataSource = dt.DefaultView;
            GridView_Users.DataBind();
            ViewState["sortedDt"] = dt.DefaultView.ToTable();
            ViewState["sortDirection"] = sortDirection;
        }
        else
        {
            //Sort and bind data as ASCENDING
            DefaultSortBind(e);
        }
    }
}

    private void DefaultSortBind(GridViewSortEventArgs e)
{
    ViewState["sortExpression"] = e.SortExpression;
    ViewState["sortDirection"] = e.SortDirection;
    //Fetch data again, because if we try to get data from gridview it will give null
    DataTable dt = new UserInfoTableTableAdapter().GetData();
    dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortDirection.ToString());
    GridView_Users.DataSource = dt.DefaultView;
    GridView_Users.DataBind();
    ViewState["sortedDt"] = dt.DefaultView.ToTable();
}

    //Get sort direction
private string GetSortDirection(string sortDirection)
{
    if (sortDirection == "Ascending")
    {
        return "ASC";
    }
    else
    {
        return "DESC";
    }
}

//Flip sort direction
private string flipSortDirection(string sortDirection)
{
    if (sortDirection == "ASC")
    {
        return "DESC";
    }
    else
    {
        return "ASC";
    }
}
于 2012-06-01T08:23:05.737 に答える