Hi  riyaz,
Refer the below sample code.
HTML
<asp:GridView ID="gvBeforeSorting" runat="server" AutoGenerateColumns="false" Caption="Before Sorting">
    <Columns>
        <asp:BoundField DataField="Month" HeaderText="Month" />
        <asp:BoundField DataField="totalvalue" HeaderText="totalvalue" />
    </Columns>
</asp:GridView>
<br />
<br />
<asp:GridView ID="gvAfterSorting" runat="server" AutoGenerateColumns="false" Caption="After Sorting">
    <Columns>
        <asp:BoundField DataField="Month" HeaderText="Month" />
        <asp:BoundField DataField="totalvalue" HeaderText="totalvalue" />
    </Columns>
</asp:GridView>
C#
protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        DataTable dt = new DataTable();
        dt.Columns.AddRange(new DataColumn[2] { new DataColumn("Month"), new DataColumn("totalvalue") });
        dt.Rows.Add("Jan-2017", "56124.00");
        dt.Rows.Add("Aug-2017", "12334.00");
        dt.Rows.Add("Oct-2016", "45345.00");
        dt.Rows.Add("Dec-2017", "45000.00");
        dt.Rows.Add("Jun-2016", "61240.00");
        dt.Rows.Add("Jan-2016", "12124.00");
        dt.Rows.Add("Feb-2017", "32124.00");
        gvBeforeSorting.DataSource = dt;
        gvBeforeSorting.DataBind();
        DataTable dtNew = dt.Clone();
        dtNew.Columns.Add("EnumMonth", typeof(int));
        dtNew.Columns.Add("Year", typeof(int));
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            DataRow dr = dtNew.NewRow();
            dr["Month"] = dt.Rows[i]["Month"];
            dr["totalvalue"] = dt.Rows[i]["totalvalue"];
            dr["EnumMonth"] = (int)Enum.Parse(typeof(Months), dt.Rows[i]["Month"].ToString().Split('-')[0]);
            dr["Year"] = dt.Rows[i]["Month"].ToString().Split('-')[1];
            dtNew.Rows.Add(dr);
        }
        IEnumerable<DataRow> result = dtNew.AsEnumerable().OrderBy(m => m.Field<int>("Year")).ThenBy(m => m.Field<int>("EnumMonth"));
        gvAfterSorting.DataSource = result.CopyToDataTable();
        gvAfterSorting.DataBind();
    }
}
public enum Months { Jan = 1, Feb = 2, Mar = 3, Apr = 4, May = 5, Jun = 6, July = 7, Aug = 8, Sep = 9, Oct = 10, Nov = 11, Dec = 12 }
VB.Net
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Not Me.IsPostBack Then
        Dim dt As New DataTable()
        dt.Columns.AddRange(New DataColumn(1) {New DataColumn("Month"), New DataColumn("totalvalue")})
        dt.Rows.Add("Jan-2017", "56124.00")
        dt.Rows.Add("Aug-2017", "12334.00")
        dt.Rows.Add("Oct-2016", "45345.00")
        dt.Rows.Add("Dec-2017", "45000.00")
        dt.Rows.Add("Jun-2016", "61240.00")
        dt.Rows.Add("Jan-2016", "12124.00")
        dt.Rows.Add("Feb-2017", "32124.00")
        gvBeforeSorting.DataSource = dt
        gvBeforeSorting.DataBind()
        Dim dtNew As DataTable = dt.Clone()
        dtNew.Columns.Add("EnumMonth", GetType(Integer))
        dtNew.Columns.Add("Year", GetType(Integer))
        For i As Integer = 0 To dt.Rows.Count - 1
            Dim dr As DataRow = dtNew.NewRow()
            dr("Month") = dt.Rows(i)("Month")
            dr("totalvalue") = dt.Rows(i)("totalvalue")
            dr("EnumMonth") = CInt([Enum].Parse(GetType(Months), dt.Rows(i)("Month").ToString().Split("-"c)(0)))
            dr("Year") = dt.Rows(i)("Month").ToString().Split("-"c)(1)
            dtNew.Rows.Add(dr)
        Next
        Dim result As IEnumerable(Of DataRow) = dtNew.AsEnumerable().OrderBy(Function(m) m.Field(Of Integer)("Year")).ThenBy(Function(m) m.Field(Of Integer)("EnumMonth"))
        gvAfterSorting.DataSource = result.CopyToDataTable()
        gvAfterSorting.DataBind()
    End If
End Sub
Public Enum Months
    Jan = 1
    Feb = 2
    Mar = 3
    Apr = 4
    May = 5
    Jun = 6
    July = 7
    Aug = 8
    Sep = 9
    Oct = 10
    Nov = 11
    Dec = 12
End Enum
Screenshot
