Поэтому я пытаюсь использовать элемент управления в режиме LocalReport, указывая его на файл RDL.Файл RDL имеет следующую разметку внутри:
<ReportParameters>
<ReportParameter Name="ProgramName">
<DataType>String</DataType>
<DefaultValue>
<Values>
<Value>ALL</Value>
</Values>
</DefaultValue>
<Prompt>Select a Program</Prompt>
<ValidValues>
<DataSetReference>
<DataSetName>ProgramSelect</DataSetName>
<ValueField>Program_Name</ValueField>
<LabelField>Program_Name</LabelField>
</DataSetReference>
</ValidValues>
<UsedInQuery>True</UsedInQuery>
</ReportParameter>
Однако при вызове GetParameters () коллекция / список .ValidValues для этого параметра имеет значение null.Нужно ли мне вызывать что-то еще, чтобы заполнить этот список?Вот скриншот того, как эта переменная выглядит, когда я ее проверяю: это ошибка или что-то не так в разметке внутри файла RDL?Кажется, что все другие элементы читаются правильно ....
Редактировать: если я открою Microsoft.ReportViewer.WebForms.dll в ILSply и посмотрите определение класса для ValidValue, он показывает:
// Microsoft.Reporting.WebForms.ValidValue
public sealed class ValidValue
{
private string m_label;
private string m_value;
public string Label
{
get
{
return this.m_label;
}
}
public string Value
{
get
{
return this.m_value;
}
}
internal ValidValue(string label, string value)
{
this.m_label = label;
this.m_value = value;
}
}
, а определение SoapSerialized не имеет понятия DataSetReference .... не говоря уже о том, Namespace = "http://schemas.microsoft.com/sqlserver/2005/06/30/reporting/reportingservices"? Не должноэто будет более недавно, для версии 15 этой библиотеки DLL (почти наверняка я дважды проверил ее версию 15, она исходит) - не должно ли она хотя бы соответствовать http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition? или в худшем случае http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition? Мне просто нужно десериализовать вручную?
// Microsoft.Reporting.WebForms.Internal.Soap.ReportingServices2005.Execution.ReportParameter
using Microsoft.Reporting.WebForms.Internal.Soap.ReportingServices2005.Execution;
using System;
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.Diagnostics;
using System.Xml.Serialization;
[Serializable]
[XmlType(Namespace = "http://schemas.microsoft.com/sqlserver/2005/06/30/reporting/reportingservices")]
[DesignerCategory("code")]
[GeneratedCode("wsdl", "2.0.50727.42")]
[EditorBrowsable(EditorBrowsableState.Never)]
[DebuggerStepThrough]
public class ReportParameter
{
private string nameField;
private ParameterTypeEnum typeField;
private bool typeFieldSpecified;
private bool nullableField;
private bool nullableFieldSpecified;
private bool allowBlankField;
private bool allowBlankFieldSpecified;
private bool multiValueField;
private bool multiValueFieldSpecified;
private bool queryParameterField;
private bool queryParameterFieldSpecified;
private string promptField;
private bool promptUserField;
private bool promptUserFieldSpecified;
private string[] dependenciesField;
private bool validValuesQueryBasedField;
private bool validValuesQueryBasedFieldSpecified;
private ValidValue[] validValuesField;
private bool defaultValuesQueryBasedField;
private bool defaultValuesQueryBasedFieldSpecified;
private string[] defaultValuesField;
private ParameterStateEnum stateField;
private bool stateFieldSpecified;
private string errorMessageField;
public string Name
{
get
{
return this.nameField;
}
set
{
this.nameField = value;
}
}
public ParameterTypeEnum Type
{
get
{
return this.typeField;
}
set
{
this.typeField = value;
}
}
[XmlIgnore]
public bool TypeSpecified
{
get
{
return this.typeFieldSpecified;
}
set
{
this.typeFieldSpecified = value;
}
}
public bool Nullable
{
get
{
return this.nullableField;
}
set
{
this.nullableField = value;
}
}
[XmlIgnore]
public bool NullableSpecified
{
get
{
return this.nullableFieldSpecified;
}
set
{
this.nullableFieldSpecified = value;
}
}
public bool AllowBlank
{
get
{
return this.allowBlankField;
}
set
{
this.allowBlankField = value;
}
}
[XmlIgnore]
public bool AllowBlankSpecified
{
get
{
return this.allowBlankFieldSpecified;
}
set
{
this.allowBlankFieldSpecified = value;
}
}
public bool MultiValue
{
get
{
return this.multiValueField;
}
set
{
this.multiValueField = value;
}
}
[XmlIgnore]
public bool MultiValueSpecified
{
get
{
return this.multiValueFieldSpecified;
}
set
{
this.multiValueFieldSpecified = value;
}
}
public bool QueryParameter
{
get
{
return this.queryParameterField;
}
set
{
this.queryParameterField = value;
}
}
[XmlIgnore]
public bool QueryParameterSpecified
{
get
{
return this.queryParameterFieldSpecified;
}
set
{
this.queryParameterFieldSpecified = value;
}
}
public string Prompt
{
get
{
return this.promptField;
}
set
{
this.promptField = value;
}
}
public bool PromptUser
{
get
{
return this.promptUserField;
}
set
{
this.promptUserField = value;
}
}
[XmlIgnore]
public bool PromptUserSpecified
{
get
{
return this.promptUserFieldSpecified;
}
set
{
this.promptUserFieldSpecified = value;
}
}
[XmlArrayItem("Dependency")]
public string[] Dependencies
{
get
{
return this.dependenciesField;
}
set
{
this.dependenciesField = value;
}
}
public bool ValidValuesQueryBased
{
get
{
return this.validValuesQueryBasedField;
}
set
{
this.validValuesQueryBasedField = value;
}
}
[XmlIgnore]
public bool ValidValuesQueryBasedSpecified
{
get
{
return this.validValuesQueryBasedFieldSpecified;
}
set
{
this.validValuesQueryBasedFieldSpecified = value;
}
}
public ValidValue[] ValidValues
{
get
{
return this.validValuesField;
}
set
{
this.validValuesField = value;
}
}
public bool DefaultValuesQueryBased
{
get
{
return this.defaultValuesQueryBasedField;
}
set
{
this.defaultValuesQueryBasedField = value;
}
}
[XmlIgnore]
public bool DefaultValuesQueryBasedSpecified
{
get
{
return this.defaultValuesQueryBasedFieldSpecified;
}
set
{
this.defaultValuesQueryBasedFieldSpecified = value;
}
}
[XmlArrayItem("Value")]
public string[] DefaultValues
{
get
{
return this.defaultValuesField;
}
set
{
this.defaultValuesField = value;
}
}
public ParameterStateEnum State
{
get
{
return this.stateField;
}
set
{
this.stateField = value;
}
}
[XmlIgnore]
public bool StateSpecified
{
get
{
return this.stateFieldSpecified;
}
set
{
this.stateFieldSpecified = value;
}
}
public string ErrorMessage
{
get
{
return this.errorMessageField;
}
set
{
this.errorMessageField = value;
}
}
}
Редактировать # 3: Блерг, похоже, это так. Элемент управления использует старую версию схемы XML ...http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition/ReportDefinition.xsd имеет определение для DataSetReference