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;
}