我有一个Gridview,我从一个存储过程中填充,它接受3个参数。第一个参数从表单变量Request.Form [“uid”]获取其值,第二个和第三个参数从DropDownLists SelectedValue属性获取其值。如果从DropDownLists中未选择任何内容,则第二个和第三个参数应接受NULL。我还将参数的ConvertEmptyStringToNull属性设置为true。 Gridview仍然没有填充。但是当我手动传递参数并从SQL Server Management Studio以及Visual Studio的测试查询窗口执行存储过程时,它可以正常工作。
Gridview的SQLDataSource如下所示:
<asp:SqlDataSource ID="SqlGVDownloadHistory" CancelSelectOnNullParameter="false" runat="server" ConnectionString="<%$ ConnectionStrings:xxx %>"
SelectCommand="spDHR" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:FormParameter FormField="uid" Name="UIDUser" Type="String" />
<asp:ControlParameter ControlID="ddlSelectDocument" Name="FileName"
PropertyName="SelectedValue" Type="String" ConvertEmptyStringToNull="true" />
<asp:ControlParameter ControlID="ddlSelectCCO" Name="UIDSelect" PropertyName="SelectedValue"
Type="String" ConvertEmptyStringToNull="true" />
</SelectParameters>
</asp:SqlDataSource>
请帮助!!
答案 0 :(得分:0)
尝试将存储过程中两个输入参数的默认值设置为null。
答案 1 :(得分:0)
试试这个。
<asp:SqlDataSource ID="SqlGVDownloadHistory" runat="server"
ConnectionString="<%$ ConnectionStrings:xxx %>"
SelectCommand="spDHR"
SelectCommandType="StoredProcedure"
OnSelecting="SqlGVDownloadHistory_Selecting">
<SelectParameters>
<asp:FormParameter FormField="uid" Name="UIDUser" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
关于Code Behind
protected void SqlGVDownloadHistory_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
SqlGVDownloadHistory.SelectParameters.Remove("FileName");
SqlGVDownloadHistory.SelectParameters.Remove("UIDSelect");
if (ddlSelectDocument.SelectedIndex > 0)
{
SqlGVDownloadHistory.SelectParameters.Add("FileName", ddlSelectDocument.SelectedValue);
}
if (ddlSelectCCO.SelectedIndex > 0)
{
SqlGVDownloadHistory.SelectParameters.Add("UIDSelect", ddlSelectCCO.SelectedValue);
}
}
想法是在数据检索操作发生之前设置参数。
根据MSDN documentation on COntrolParameters,我没有看到asp:DropDownList
Selectedvalue
被设置为ControlValuePropertyAttribute