/// <summary>
        /// Displays custom columns
        /// </summary>
        private void DisplayCustomColumns()
        {
            int roleID = 0;

            LabelQueryResult.Text = Resources.Labels.BlankText;

            if (Session["isPortalAdmin"] != null)
            {
                bool isPortalAdmin = (bool)Session["isPortalAdmin"];
                if (isPortalAdmin)
                {
                    roleID = 1;
                }
                else
                {
                    DataSet dsRoles = (DataSet)Session["UserRoles"];
                    // Assumption : for a product one user can have only one Role [Product Admin/Product Guest/Product CSR]
                    DataRow[] drRoles = dsRoles.Tables[0].Select("PRDCT_ID='" + Session["SelectedProduct"].ToString() + "'");
                    if (drRoles.Length > 0)
                    {
                        roleID = int.Parse(drRoles[0]["ROLE_ID"].ToString(), CultureInfo.InvariantCulture);
                    }
                }
            }
            string[] columnArray = DataProvider.GetConfiguredDisplayFields(Session["SelectedProduct"].ToString(), "Registration", roleID);

            string systemFieldID        = String.Empty;
            string systemFieldValue     = String.Empty;
            string customFieldID        = String.Empty;
            string customFieldValue     = String.Empty;
            bool   isDataReferenceField = false;

            if (columnArray != null && columnArray.Length > 0)
            {
                string filterCiteria = string.Empty;

                if (RadioButtonFilterOn.Checked)
                {
                    Session["IsReportOnDateRange"] = false;

                    string[] arrFilterValue = DropDownListFilterOn.SelectedValue.Split("^".ToCharArray());
                    Session["FilterOn"] = DropDownListFilterOn.SelectedValue;

                    string filterValue = GetFilterValue();

                    #region Display Serial Number Details [if filter is on Serial Number]
                    PanelSerialKeyDetails.Visible = false;
                    if (DropDownListFilterOn.SelectedValue.IndexOf("REG_SERIAL_KEY") > 0)
                    {
                        DisplayLicenseDetails();
                    }

                    #endregion
                    isDataReferenceField = bool.Parse(arrFilterValue[3].ToLower());

                    if (arrFilterValue[0] == "True")
                    {
                        systemFieldID    = arrFilterValue[1];
                        systemFieldValue = filterValue;
                        //if (!string.IsNullOrEmpty(filterValue))
                        //{
                        //    filterCiteria += " and [" + arrFilterValue[1] + "] like N'" + filterValue.Replace("'", "''") + "'";
                        //}
                        //else
                        //{
                        //    filterCiteria += " and ([" + arrFilterValue[1] + "] ='' or [" + arrFilterValue[1] + "] is null)";
                        //}
                    }
                    else
                    {
                        customFieldID    = arrFilterValue[2];
                        customFieldValue = filterValue;

                        /*
                         * if (!string.IsNullOrEmpty(filterValue))
                         * {
                         *  customFieldFilter += " [" + arrFilterValue[1] + "] like N'" + filterValue.Replace("'", "''") + "'";
                         * }
                         * else
                         * {
                         *  customFieldFilter += " ([" + arrFilterValue[1] + "] = '' or [" + arrFilterValue[1] + "] is null)";
                         * }*/
                    }
                }

                if (RadioButtonDateRange.Checked)
                {
                    PanelSerialKeyDetails.Visible = false;
                    //filterCiteria += " and ( REC_DATE >= '" + TextBoxDateFrom.Text + " 00:00:00' and REC_DATE <='" + TextBoxDateTo.Text + " 23:59:59')";
                    filterCiteria = " ( REC_DATE BETWEEN '" + TextBoxDateFrom.Text + " 00:00:00' and '" + TextBoxDateTo.Text + " 23:59:59')";
                    Session["IsReportOnDateRange"] = true;
                    Session["FilterFrom"]          = TextBoxDateFrom.Text;
                    Session["FilterTo"]            = TextBoxDateTo.Text;
                }
                int pageSize = 0;
                if (RadioButtonCSV.Checked == true)
                {
                    pageSize = int.Parse(DataProvider.GetDBConfigValue("REPORT_CSV_MAX_RECORDS"), CultureInfo.CurrentCulture);
                }

                if (RadioButtonOnscreen.Checked == true)
                {
                    pageSize = int.Parse(DataProvider.GetDBConfigValue("REPORT_ONSCREEN_MAX_RECORDS"), CultureInfo.CurrentCulture);
                }

                DataSet   dsRegistrationDetails = DataReporter.GetRegistrationDetails(Session["SelectedProduct"].ToString(), 1, pageSize, "REC_ID desc", isDataReferenceField, systemFieldID, systemFieldValue, customFieldID, customFieldValue, filterCiteria);
                DataTable dtRegistrationDetails = dsRegistrationDetails.Tables[0];
                int       MaxDisplayCount       = int.Parse(DataProvider.GetDBConfigValue("REPORT_ONSCREEN_MAX_RECORDS"), CultureInfo.CurrentCulture);
                LabelResultCount.Text      = dtRegistrationDetails.Rows.Count.ToString(CultureInfo.InvariantCulture) + Resources.Labels.Space + Resources.Labels.RecordsFound;
                LabelResultCount.ForeColor = Color.Blue;

                if (RadioButtonCSV.Checked == true || dtRegistrationDetails.Rows.Count > MaxDisplayCount)
                {
                    Session["ReportMode"] = "CSV";
                    #region Write Result to CSV File
                    RadioButtonCSV.Checked           = true;
                    PanelRegistrationDetails.Visible = false;
                    ImageButtonPrint.Visible         = false;
                    if (dtRegistrationDetails.Rows.Count > 0)
                    {
                        // Create CSV file in TempReports.
                        string       reportFileName = Server.MapPath("..") + "/TempReports/" + Session["UserID"].ToString() + "_" + Session.SessionID + ".csv";
                        StreamWriter swReportFile   = File.CreateText(reportFileName);

                        // Write filter Criteria to CSV

                        string filterCriteria = GetFilterCriteria();
                        swReportFile.WriteLine("Filter Criteria: " + filterCriteria);
                        swReportFile.WriteLine("");
                        // Write PanelSerialKeyDetails to CSV
                        if (PanelSerialKeyDetails.Visible)
                        {
                            swReportFile.WriteLine("Serial Number Details");
                            swReportFile.WriteLine("Serial Number " + "," + LabelSerialKey.Text);
                            swReportFile.WriteLine("Total Licenses " + "," + LabelTotalLicenses.Text);
                            swReportFile.WriteLine("Used Licenses " + "," + LabelUsedLicenses.Text);
                            swReportFile.WriteLine("Remaining Licenses " + "," + LabelRemainingLicenses.Text);
                            swReportFile.WriteLine("");
                            swReportFile.WriteLine("Registration Details");
                            swReportFile.WriteLine("");
                        }

                        WriteColumnHeaders(columnArray, dsRegistrationDetails.Tables[1], swReportFile);
                        swReportFile.WriteLine("");
                        for (int rowCount = 0; rowCount < dtRegistrationDetails.Rows.Count; rowCount++)
                        {
                            string data = "";
                            for (int col = 0; col < columnArray.Length; col++)
                            {
                                data = dtRegistrationDetails.Rows[rowCount][columnArray[col]].ToString();
                                data = "\"" + data.Replace("\"", "\"\"") + "\"";

                                if (col < columnArray.Length - 1)
                                {
                                    swReportFile.Write(data + ",");
                                }
                                else
                                {
                                    swReportFile.WriteLine(data);
                                }
                            }
                        }
                        swReportFile.Close();
                        string        reportUrl      = "<a href='../TempReports/" + Session["UserID"].ToString() + "_" + Session.SessionID + ".csv'>";
                        StringBuilder successMessage = new StringBuilder();
                        successMessage.Append(Resources.SuccessMessages.ReportGeneratedSuccessfully);
                        successMessage.Append(Resources.Labels.FullStop);
                        successMessage.Append(Resources.Labels.Space);
                        successMessage.Append(reportUrl);
                        successMessage.Append(Resources.Labels.ClickHere);
                        successMessage.Append(Resources.Labels.Space);
                        successMessage.Append(Resources.Labels.ToDownload);
                        successMessage.Append(Resources.Labels.FullStop);
                        LabelQueryResult.Text = successMessage.ToString();

                        LabelQueryResult.ForeColor = Color.Green;
                    }

                    #endregion
                }
                else if (RadioButtonOnscreen.Checked)
                {
                    Session["ReportMode"]       = "Onscreen";
                    RadioButtonOnscreen.Checked = true;

                    if (dtRegistrationDetails.Rows.Count > 0)
                    {
                        PanelRegistrationDetails.Visible = true;
                        ImageButtonPrint.Visible         = true;
                        DisplayColumnHeaders(columnArray, dsRegistrationDetails.Tables[1]);

                        #region Display Result on Screen
                        for (int rowCount = 0; rowCount < dtRegistrationDetails.Rows.Count; rowCount++)
                        {
                            TableRow tr = new TableRow();
                            tr.BackColor = Color.White;
                            bool isFirstColumn = true;
                            foreach (string coulumnName in columnArray)
                            {
                                try
                                {
                                    TableCell td = new TableCell();
                                    if (isFirstColumn)
                                    {
                                        StringBuilder sbLink = new StringBuilder("<a href='../DataCapture/ManageRegistration.aspx?source=../Reports/ReportIndex.aspx?refererpager=Reports&action=update&REC_ID=" + dtRegistrationDetails.Rows[rowCount]["REC_ID"].ToString() + "&pid=" + Session["SelectedProduct"].ToString() + "' style='text-decoration:underline'>" + dtRegistrationDetails.Rows[rowCount][coulumnName.Trim()].ToString() + "</a>");
                                        td.Text = sbLink.ToString();
                                    }
                                    else if (coulumnName.Equals("REG_SERIAL_KEY") == true)
                                    {
                                        isFirstColumn = true;
                                        StringBuilder sbLink = new StringBuilder("<a href='../Views/SerialKeys.aspx?" + Session.SessionID + "=" + dtRegistrationDetails.Rows[rowCount]["REG_SERIAL_KEY"].ToString() + "' style='text-decoration:underline'>" + dtRegistrationDetails.Rows[rowCount][coulumnName.Trim()].ToString() + "</a>");
                                        td.Text = sbLink.ToString();
                                    }
                                    else
                                    {
                                        td.Text = dtRegistrationDetails.Rows[rowCount][coulumnName.Trim()].ToString();
                                    }
                                    td.Wrap = false;
                                    tr.Cells.Add(td);
                                    isFirstColumn = false;
                                }
                                catch (DataException) { }
                            }
                            TableRegistrationDetails.Rows.Add(tr);
                        }
                    }
                    #endregion
                }
            }
        }