Сообщить об ошибке, значение не может быть нулевым
Я зашел в тупик из-за вышеуказанной ошибки.
У меня есть отчет с параметром под названием loc.
Назначение отчета - предоставить пользователям возможность выбрать местоположение из выпадающего списка, а затем записи, связанные с этим местоположением, будут показаны пользователям.
Выпадающий список заполняется значениями просто отлично.
Однако, когда я выбираю местоположение из выпадающего списка, я получаю сообщение об ошибке:
Значение не может быть нулевым. Имя параметра: reportParameters
Все отлично работает, когда я передаю значение в виде текстового поля, но не в виде раскрывающегося списка.
Есть идеи, что я делаю не так?
Ниже приведены соответствующие коды. Пожалуйста, простите меня заранее за размещение большого количества кода.
'---Dropdownlist control
<asp:Panel runat="server" ID="pnlLoc" Font-Names="Calibri" BorderStyle="Solid" BorderWidth="1" Style="margin: 0 auto; width:300px;">
<table>
<tr>
<td>
<asp:Label runat="server" ID="lblLoc" Text="Location: " />
</td>
<td>
<asp:DropDownList runat="server" ID="ddLoc" DataSourceID="dslocator6" AutoPostBack="True">
</asp:DropDownList>
</td>
</tr>
</table>
</asp:Panel
--Report viewer control
<rsweb:ReportViewer ID="ReportViewer1" runat="server" AsyncRendering="true" SizeToReportContent="true" Font-Names="Arial"
Height="675px" Width="750px">
<LocalReport EnableExternalImages="true" ReportPath="">
</LocalReport>
</rsweb:ReportViewer></center>
<asp:ObjectDataSource ID="LOC" runat="server" SelectMethod="GetData" TypeName="ManageReportsTableAdapters.searchBylocationsTableAdapter">
<SelectParameters>
<asp:ControlParameter ControlID="ddLoc" Name="Location" DefaultValue=" " />
</SelectParameters>
</asp:ObjectDataSource>
--This code populates the ddLoc dropdownlist
Protected Sub btnLoc_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnLoc.Click
ReportViewer1.LocalReport.ReportPath = ""
pnlLoc.Visible = True
which.Value = "P"
dslocator6.SelectCommand = "SELECT location FROM Locations ORDER BY [location]"
ddLoc.DataTextField = "location"
ddLoc.DataValueField = "location"
End Sub
'Define report parameter
Dim params(0) As ReportParameter
ReportViewer1.LocalReport.DataSources.Add(New ReportDataSource("locs", LOC.ID))
ReportViewer1.LocalReport.ReportPath = "locations.rdlc"
ReportViewer1.LocalReport.Refresh()
If Not String.IsNullOrEmpty(ddLoc.SelectedValue) Then
params(0) = New ReportParameter("loc", ddLoc.SelectedValue)
Else
params(0) = New ReportParameter("loc", sel, False)
End If
ReportViewer1.LocalReport.SetParameters(params) '<-- error points to this line
1 ответ
Я получал эту ошибку, и проблема заключалась в том, что я установил дополнительный индекс в своем массиве.
Dim params(2) As ReportParameter
params(0) = New ReportParameter("SignatureImg", "SomeBase64StringHere")
params(1) = New ReportParameter("SignatureImgMimeType", "image/png")
ReportViewer1.LocalReport.SetParameters(params)
Из-за того, что я определил свой массив следующим образом: Dim params(2) As ReportParameter, и я просто добавил значения для первых двух индексов, значение индекса 3 было нулевым, и это создавало проблему.
Решением было просто определить массив как этот Dim params(1) As ReportParameter.