ReportViewer.WebForms версии 15, на которой запущен LocalReport в .NET 4.6 с неправильно установленным значением ReportParameterInfo.ValidValues, равным нулю - PullRequest
0 голосов
/ 11 апреля 2019

Поэтому я пытаюсь использовать элемент управления в режиме 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.Нужно ли мне вызывать что-то еще, чтобы заполнить этот список?Вот скриншот того, как эта переменная выглядит, когда я ее проверяю: enter image description here это ошибка или что-то не так в разметке внутри файла 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

...