protected void GrdConditionView_Sort(string sortExpression, params string[] sortExpr)
    {
        DataTable dataTable = Session["patientconditionview_data"] as DataTable;

        if (dataTable != null)
        {
            if (Session["patientconditionview_sortexpression"] == null)
            {
                Session["patientconditionview_sortexpression"] = "";
            }

            DataView dataView = new DataView(dataTable);
            string[] sortData = Session["patientconditionview_sortexpression"].ToString().Trim().Split(' ');

            string newSortExpr = (sortExpr.Length == 0) ?
                                 (sortExpression == sortData[0] && sortData[1] == "ASC") ? "DESC" : "ASC" :
                                 sortExpr[0];

            dataView.Sort = sortExpression + " " + newSortExpr;
            Session["patientconditionview_sortexpression"] = sortExpression + " " + newSortExpr;

            GrdConditionView.DataSource = dataView;
            GrdConditionView.DataBind();
        }
    }
    protected void FillGrdConditionView(Patient patient = null)
    {
        if (patient == null)
        {
            patient = PatientDB.GetByID(GetFormPatientID());
        }

        DataTable dt            = ConditionDB.GetDataTable(false);
        Hashtable conditionHash = ConditionDB.GetHashtable(false);

        Session["patientconditionview_data"] = dt;

        if (dt.Rows.Count > 0)
        {
            GrdConditionView.DataSource = dt;
            try
            {
                GrdConditionView.DataBind();

                Hashtable selectedConditions = PatientConditionDB.GetHashtable_ByPatientID(patient.PatientID, false);

                for (int i = GrdConditionView.Rows.Count - 1; i >= 0; i--)
                {
                    Label lblId = GrdConditionView.Rows[i].FindControl("lblId") as Label;

                    Label lblDate = GrdConditionView.Rows[i].FindControl("lblDate") as Label;

                    Label lblNextDue = GrdConditionView.Rows[i].FindControl("lblNextDue") as Label;
                    Label lblDateDue = GrdConditionView.Rows[i].FindControl("lblDateDue") as Label;

                    Label lblAdditionalInfo = GrdConditionView.Rows[i].FindControl("lblAdditionalInfo") as Label;
                    Label lblText           = GrdConditionView.Rows[i].FindControl("lblText") as Label;

                    System.Web.UI.HtmlControls.HtmlControl br_date      = (System.Web.UI.HtmlControls.HtmlControl)GrdConditionView.Rows[i].FindControl("br_date");
                    System.Web.UI.HtmlControls.HtmlControl br_nweeksdue = (System.Web.UI.HtmlControls.HtmlControl)GrdConditionView.Rows[i].FindControl("br_nweeksdue");
                    System.Web.UI.HtmlControls.HtmlControl br_text      = (System.Web.UI.HtmlControls.HtmlControl)GrdConditionView.Rows[i].FindControl("br_text");


                    if (lblId == null)
                    {
                        continue;
                    }

                    Condition condition = (Condition)conditionHash[Convert.ToInt32(lblId.Text)];

                    br_date.Visible           = condition.ShowDate;
                    lblDate.Visible           = condition.ShowDate;
                    br_nweeksdue.Visible      = condition.ShowNWeeksDue;
                    lblNextDue.Visible        = condition.ShowNWeeksDue;
                    lblDateDue.Visible        = condition.ShowNWeeksDue;
                    br_text.Visible           = condition.ShowText;
                    lblText.Visible           = condition.ShowText;
                    lblAdditionalInfo.Visible = condition.ShowText;


                    if (selectedConditions[Convert.ToInt32(lblId.Text)] != null)
                    {
                        PatientCondition ptCondition = (PatientCondition)selectedConditions[Convert.ToInt32(lblId.Text)];

                        if (condition.ShowDate)
                        {
                            lblDate.Text = ptCondition.Date == DateTime.MinValue ? "[Date Not Set]" : ptCondition.Date.ToString("d MMM, yyyy");
                        }
                        if (condition.ShowNWeeksDue)
                        {
                            bool expired = ptCondition.Date != DateTime.MinValue && ptCondition.Date.AddDays(7 * ptCondition.NWeeksDue) < DateTime.Today;
                            lblDateDue.Text = ptCondition.Date == DateTime.MinValue ? "[Date Not Set]" : (expired ? "<font color=\"red\">" : "") + ptCondition.Date.AddDays(7 * ptCondition.NWeeksDue).ToString("d MMM, yyyy") + (expired ? "</font>" : "");
                        }
                        if (condition.ShowText)
                        {
                            lblText.Text = ptCondition.Text.Length == 0 ? "[Blank]" : ptCondition.Text;
                        }
                    }
                    else
                    {
                        GrdConditionView.Rows[i].Visible = false;
                    }
                }
            }
            catch (Exception ex)
            {
                SetErrorMessage("", ex.ToString());
            }

            //Sort("parent_descr", "ASC");
        }
        else
        {
            dt.Rows.Add(dt.NewRow());
            GrdConditionView.DataSource = dt;
            GrdConditionView.DataBind();

            int TotalColumns = GrdConditionView.Rows[0].Cells.Count;
            GrdConditionView.Rows[0].Cells.Clear();
            GrdConditionView.Rows[0].Cells.Add(new TableCell());
            GrdConditionView.Rows[0].Cells[0].ColumnSpan = TotalColumns;
            GrdConditionView.Rows[0].Cells[0].Text       = "No Record Found";
        }
    }