0

I have a Editable GridView that I'm attempting to add sorting functionality to specified columns. Though I receive no errors, and my editing/insert/delete functions as expected, my sorting method does not work. Could I please get some help on what I'm missing here?

The Design:

<asp:GridView ID="gvLogNotice" 
        runat="server" 
        AutoGenerateColumns="false" 
        ShowFooter="false"
        OnRowCancelingEdit="gvLogNotice_RowCancelingEdit"
        OnRowEditing="gvLogNotice_RowEditing" 
        OnRowUpdating="gvLogNotice_RowUpdating"
        EmptyDataText="There are no data records to display."
        DataKeyNames="LogNoticeID"
        AllowPaging="true"
        AllowSorting="true"
        OnSorting="gvLogNotice_sorting"
        Width="700px">
        <Columns>
            <asp:TemplateField HeaderText="Log No." Visible="false">
                <ItemTemplate>
                    <%#Eval("LogNoticeID")%>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txtLogNoticeID" runat="server" Enabled="false" Text=' <%#Eval("LogNoticeID") %>'></asp:TextBox>
                </EditItemTemplate>
             </asp:TemplateField>
            <asp:TemplateField HeaderText="Log Date" SortExpression="DateLogged">
                <ItemTemplate>
                    <%#Eval("DateLogged")%>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txtDateLogged" runat="server" Text=' <%#Eval("DateLogged") %>'></asp:TextBox>
                </EditItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Log Description" HeaderStyle-Width="50px" sortexpression="LogNoticeDescript">
                <ItemTemplate>
                    <%#Eval("LogNoticeDescript")%>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txtLogNoticeDescript" runat="server" Text=' <%#Eval("LogNoticeDescript") %>'></asp:TextBox>
                </EditItemTemplate>
           </asp:TemplateField>
           <asp:TemplateField HeaderText="Responsible Party" sortexpression="ResponsibleParty">
                <ItemTemplate>
                    <%#Eval("ResponsibleParty")%>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txtResponsibleParty" runat="server" Text=' <%#Eval("ResponsibleParty") %>'></asp:TextBox>
                </EditItemTemplate>
          </asp:TemplateField>
             <asp:TemplateField HeaderText="Planned Date" SortExpression="PlannedDate" >
                <ItemTemplate>
                    <%#Eval("PlannedDate")%>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txtPlannedDate" runat="server" Text=' <%#Eval("PlannedDate") %>'></asp:TextBox>
              </EditItemTemplate>
          </asp:TemplateField>
           <asp:TemplateField HeaderText="Case Number" SortExpression="CaseNumber">
                <ItemTemplate>
                    <%#Eval("CaseNumber")%>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txtCaseNumber" runat="server" Text=' <%#Eval("CaseNumber") %>'></asp:TextBox>
              </EditItemTemplate>
          </asp:TemplateField>
             <asp:TemplateField HeaderText="Log Status" SortExpression="LogStatus">
                <ItemTemplate>
                    <%#Eval("LogStatus")%>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txtLogStatus" runat="server" Text=' <%#Eval("LogStatus") %>'></asp:TextBox>
                </EditItemTemplate>
          </asp:TemplateField>
            <asp:TemplateField HeaderText="Edit">
                <ItemTemplate>
                    &nbsp;&nbsp;
                    <asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="images/edit.png" Width="25"
                        Height="25" CommandName="Edit" />&nbsp;&nbsp;
                   <%-- <asp:ImageButton ID="ImageButton2" runat="server" ImageUrl="~/img/delete.png" CommandName="Delete"
                        OnClientClick="return confirm('Are you sure want to delete record?')" />--%>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:LinkButton ID="LinkButton1" runat="server" CommandName="Update">Update</asp:LinkButton>&nbsp;&nbsp;
                    <asp:LinkButton ID="LinkButton2" runat="server" CommandName="Cancel">Cancel</asp:LinkButton>
                </EditItemTemplate>
              </asp:TemplateField>
        </Columns>
    </asp:GridView>

Code Behind:

protected void Page_Load(object sender, EventArgs e)
{
    lblmsg.Text = "";
    if (!Page.IsPostBack)
    {
        gvLogNotice.ShowFooter = false;
        //Load grid data using common method
        LoadGrid();
    }
}

//bind & load GV

void LoadGrid()
{
    sqlcmd = new SqlCommand("selectActiveLogs", sqlcon);
    sqlcmd.CommandType = CommandType.StoredProcedure;
    try
    {
        sqlcon.Open();
        da = new SqlDataAdapter(sqlcmd);
        dt.Clear();
        da.Fill(dt);
        gvLogNotice.DataSource = dt;
        gvLogNotice.DataBind();
    }
    catch (Exception ex)
    {
    }
    finally
    {
        sqlcon.Close();
    }
}

//sorting event

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

            break;
    }
}
1
  • This is because you are not sorting. For any sort direction you are loading same datatable without sorting. Commented Sep 14, 2013 at 15:20

1 Answer 1

1

You need to sort the table in LoadGrid.

EDIT: For framework <4.0, add a overloaded method like below:

 void LoadGrid(string srtexpr, string direc)
{
    sqlcmd = new SqlCommand("selectActiveLogs", sqlcon);
    sqlcmd.CommandType = CommandType.StoredProcedure;
    try
    {
        sqlcon.Open();
        da = new SqlDataAdapter(sqlcmd);
        dt.Clear();
        da.Fill(dt);

        DataView dv = new DataView (dt);
        dv.Sort = srtexpr + " " + direc;
        gvLogNotice.DataSource = dv;
        gvLogNotice.DataBind();

    }
    catch (Exception ex)
    {

    }
    finally
    {
        sqlcon.Close();
    }
}

And pass sorting conditions:

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

            break;

       }

}
Sign up to request clarification or add additional context in comments.

2 Comments

I get an error here (equal signs): void LoadGrid(string srtexpr = "", string direc = "") - the error is "Default parameter specifiers are not permitted" / it is not part of the ISO- C# language specification ...after doing some research, it appears that since the framework is using 2.0, I would have to use an approach call operation overload. Am I understanding this correctly?
Yes, you are right! For older versions you have to overload the method. I have updated my answer.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.