public static bool GetReportParameters()

in sqlnexus/fmParameters.cs [52:241]


        public static bool GetReportParameters(LocalReport report, ILogger logger)
        {

            fmParameters fmP = new fmParameters();

            XmlDocument doc = new XmlDocument();
            doc.Load(report.ReportPath);

            XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
            nsmgr.AddNamespace("rds", "http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition");

            XmlNodeList nodes = doc.DocumentElement.SelectNodes("//rds:Report//rds:ReportParameters/rds:ReportParameter[rds:Hidden='false' or not (rds:Hidden)]", nsmgr);

            //If no params, bail
            if ((null == nodes) || (0 == nodes.Count))
            {
                logger.LogMessage(sqlnexus.Properties.Resources.Msg_NoParams, MessageOptions.Dialog);
                return false;
            }

            object[] row = new object[nodes.Count];
            int i = 0;
            foreach (XmlNode node in nodes)
            {
                DataGridViewColumn col;

                XmlNode valnode = node.SelectSingleNode("rds:ValidValues", nsmgr);

                col = null;
                if (null != valnode) //value list
                {
                    col = new DataGridViewComboBoxColumn();

                    XmlNode dsnode = valnode.SelectSingleNode("rds:DataSetReference/rds:DataSetName", nsmgr);
                    if (null != dsnode)  //value list from dataset
                    {
                        XmlNode vfnode = valnode.SelectSingleNode("rds:DataSetReference/rds:ValueField", nsmgr);
                        System.Diagnostics.Debug.Assert(null != vfnode);

                        DataTable dt = new DataTable();
                        SqlDataAdapter da = new SqlDataAdapter(dsnode.InnerText, Globals.ConnectionString);
                        da.Fill(dt);
                        foreach (DataRow r in dt.Rows)
                        {
                            ((DataGridViewComboBoxColumn)col).Items.Add(r[vfnode.InnerText].ToString());
                        }
                    }
                    else
                    {
                        XmlNodeList valnodes = valnode.SelectNodes("rds:ParameterValues//rds:Value", nsmgr);
                        if ((null != valnodes) && (0 != valnodes.Count))
                        {
                            foreach (XmlNode vnode in valnodes)
                            {
                                ((DataGridViewComboBoxColumn)col).Items.Add(vnode.InnerText);
                            }
                        }
                    }

                }

                //Get the default value if there is one
                string defval=null;

                //Check for dataset first
                XmlNode dsetnode = node.SelectSingleNode("rds:DefaultValue/rds:DataSetReference/rds:DataSetName", nsmgr);
                if (null != dsetnode)  //value from dataset
                {
                    XmlNode vfnode = node.SelectSingleNode("rds:DefaultValue/rds:DataSetReference/rds:ValueField", nsmgr);
                    System.Diagnostics.Debug.Assert(null != vfnode);

                    DataTable dt = new DataTable();
                    SqlDataAdapter da = new SqlDataAdapter(dsetnode.InnerText, Globals.ConnectionString);
                    da.Fill(dt);
                    defval = dt.Rows[0][vfnode.InnerText].ToString();
                }
                else
                {
                    XmlNode defvalue = node.SelectSingleNode("rds:DefaultValue//rds:Value", nsmgr);
                    if (null != defvalue)
                        defval = defvalue.InnerText;
                }

                object def;
                if (0 == string.Compare(node["DataType"].InnerText, "datetime", true, CultureInfo.InvariantCulture))
                {
                    def = DateTime.Now;
                    if (null == col)
                        col = new DataGridViewCalendarColumn();

                    col.DefaultCellStyle.Format = "s";

//                    ((DataGridViewCalendarColumn)col).

                    if (null == defval)
                        row[i] = def;
                    else
                        row[i] = Convert.ToDateTime(defval);
                }
                else if (0 == string.Compare(node["DataType"].InnerText, "boolean", true, CultureInfo.InvariantCulture))
                {
                    def = false;
                    if (null == col)
                        col = new DataGridViewCheckBoxColumn();

                    if (null == defval)
                        row[i] = def;
                    else
                        row[i] = Convert.ToBoolean(defval);
                }
                else if (0 == string.Compare(node["DataType"].InnerText, "integer", true, CultureInfo.InvariantCulture))
                {
                    def = "0";  //Masked text box requires strings
                    if (null == col)
                    {
                        col = new MaskedTextBoxColumn();
                        ((MaskedTextBoxColumn)col).Mask = "##########";
                        ((MaskedTextBoxColumn)col).TextAlign = HorizontalAlignment.Right;
                    }

                    col.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
                    col.DefaultCellStyle.Format = "d";

                    if (null == defval)
                        row[i] = def;
                    else
                        row[i] = defval;
                }
                else if (0 == string.Compare(node["DataType"].InnerText, "float", true, CultureInfo.InvariantCulture))
                {
                    def = "0.00";  //Masked text box requires strings
                    if (null == col)
                    {
                        col = new MaskedTextBoxColumn();
                        ((MaskedTextBoxColumn)col).Mask = "##########.00";
                        ((MaskedTextBoxColumn)col).TextAlign = HorizontalAlignment.Right;
                    }
                    col.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;

                    col.DefaultCellStyle.Format = "f";

                    if (null == defval)
                        row[i] = def;
                    else
                        row[i] = defval;
                }
                else  //string
                {
                    def = "";
                    if (null == col)
                        col = new DataGridViewTextBoxColumn();

                    if (null == defval)
                        row[i] = def;
                    else
                        row[i] = defval;
                }

                col.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                col.DefaultCellStyle.NullValue = def;
                col.ValueType = def.GetType();
                col.Name = node.Attributes["Name"].Value;
                try
                {
                    col.ToolTipText = node["Prompt"].InnerText;
                }
                catch (Exception ex)  //May not have a prompt
                {
                    System.Diagnostics.Debug.WriteLine(ex.Message);
                }
                fmP.dvParams.Columns.Add(col);

                i++;
            }
            fmP.dvParams.Rows.Add(row);
            
            if (DialogResult.OK == fmP.ShowDialog())
            {
                ReportParameter[] parameters = new ReportParameter[report.GetParameters().Count];
                int j = 0;
                foreach (DataGridViewColumn c in fmP.dvParams.Columns)
                {
                    parameters[j++] = new ReportParameter((string)c.Name, (string)fmP.dvParams.Rows[0].Cells[c.Name].Value.ToString());
                }
                report.SetParameters(parameters);
                return true;
            }
            else
                return false;
        }