我想基于gridview列进行排序,但是当我点击HeaderTemplete的标题时事件没有触发

时间:2014-01-14 06:53:12

标签: c# asp.net gridview

我已经使用自定义列创建了一个gridview,并希望对它们执行排序。当我点击列时,没有事件被触发进行排序。

以下是我编写的代码

对于.aspx页面

<asp:GridView ID="grdConfigureCustomers" runat="server" AlternatingRowStyle-    BackColor="Aqua" Width="1300px"
        OnRowCommand="grdConfigureCustomers_RowCommand" OnRowEditing="grdConfigureCustomers_RowEditing"
        OnRowUpdating="grdConfigureCustomers_RowUpdating" OnRowCancelingEdit="grdConfigureCustomers_RowCancelingEdit"
        AutoGenerateColumns="false" AllowPaging="true" PageSize="5"
        OnRowDeleting="grdConfigureCustomers_RowDeleting" ShowFooter="true" 
        onpageindexchanging="grdConfigureCustomers_PageIndexChanging"  OnSorting="grdConfigureCustomers_Sorting" AllowSorting="true">
        <HeaderStyle BackColor="AliceBlue" />
        <Columns>
<asp:TemplateField HeaderText="Customer ID">
                <ItemTemplate>
                    <asp:Label ID="lblCustomerId" runat="server" Text='<%# Eval("Customer_ID") %>'></asp:Label>
                </ItemTemplate>
                <FooterTemplate>
                    <asp:TextBox ID="txtAddCustomerId" runat="server"></asp:TextBox><span style="color:Red;">*</span>
                    </FooterTemplate>
            </asp:TemplateField>
</Columns>
</asp:GridView>

对于.aspx.cs页面

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            LoadCustomerConfigurationGridView();
        }

    }

    private void LoadCustomerConfigurationGridView()
    {
        DataTable dt = new DataTable();
        dt = sqlHelper.GetCustomerListInformation();
        grdConfigureCustomers.DataSource = dt;
        grdConfigureCustomers.DataBind();
        Session["data"] = dt;

    }
private void LoadCustomerConfigurationGridView(string srtexpr, string direc)
    {
        DataTable dt = new DataTable();
        dt = sqlHelper.GetCustomerListInformation();
        DataView dv = new DataView(dt);
        dv.Sort = srtexpr + " " + direc;
        grdConfigureCustomers.DataSource = dv;
        grdConfigureCustomers.DataBind();
        Session["data"] = dt;

    }
protected void grdConfigureCustomers_Sorting(object sender, GridViewSortEventArgs e)
    {
        switch (e.SortExpression)
        {
            case "DateLogged":
                if (e.SortDirection == SortDirection.Ascending)
                {
                    LoadCustomerConfigurationGridView("DateLogged", "ASC");
                }
                else
                {
                    LoadCustomerConfigurationGridView();
                }

                break;

        }
    }

请让我知道我错过了排序。提前谢谢。

2 个答案:

答案 0 :(得分:1)

您需要在TemplateField中指定SortExpression属性,如下所示:

<asp:TemplateField HeaderText="Customer ID" SortExpression="Customer_ID">

答案 1 :(得分:0)

您需要启用排序。你的asp.net:Gridview中的EnableSorting="true"