我之前偶然发现了这一点,我知道这是一个常见的问题。一个相关的问题是GridView is empty。但它并没有解决我的问题。
理想情况下,当我点击“查找”按钮时,根据文本框中的值更新我的gridview。它在我的其他页面中对我有用。但我这里有一些问题。我没有更改任何默认参数。这是gridview
<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
DataSourceID="SqlDataSource1" AutoGenerateColumns="False"
DataKeyNames="ID">
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False"
ReadOnly="True" SortExpression="ID" />
<asp:BoundField DataField="companyname" HeaderText="companyname"
SortExpression="companyname" />
<asp:BoundField DataField="contactfirstname" HeaderText="contactfirstname"
SortExpression="firstname" />
<asp:BoundField DataField="contactlastname" HeaderText="contactlastname"
SortExpression="lastname" />
<asp:BoundField DataField="phonenumber" HeaderText="phonenumber"
SortExpression="phonenumber" />
<asp:BoundField DataField="contactid" HeaderText="contactid"
SortExpression="contactno" />
</Columns>
</asp:GridView>
在我的“查找”按钮单击事件中。我正在使用此代码
protected void btnFind_Click(object sender, EventArgs e)
{
SqlDataSource1.DataBind(); /* Edit: I don't need this, I realized */
}
但它没有加载任何东西。整个gridview dos都没有出现。如果我使用select语句,gridview会出现结果。我已经在gridview中测试了我的storedprocedure,它的工作方式应该如此。不知道究竟是什么问题在这里?有谁遇到过它?
我想如果存储过程返回0结果,我会在某处读取,不会显示gridview。
我的SQLDataSource
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:MyDBconn %>"
SelectCommand="usp_GetContactNo" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:FormParameter DefaultValue="" FormField="txtCompanyName"
Name="companyname" Type="String" />
<asp:FormParameter FormField="txtFirstName" Name="firstname" Type="String" />
<asp:FormParameter FormField="txtLastName" Name="lastname" Type="String" />
<asp:FormParameter FormField="txtPhone" Name="phone" Type="String" />
<asp:FormParameter FormField="txtContactID" Name="contactNo" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
StoredProcedure如下。注意我可能出于安全原因更改了上面的一些名称,但下面是原始字段。
ALTER PROCEDURE [dbo].[usp_GetContactIDs]
-- Add the parameters for the stored procedure here
@companyname varchar(255) = NULL,
@firstname varchar(255) = NULL,
@lastname varchar(255) = NULL,
@phone varchar(10) = NULL,
@contactid varchar(15) = NULL
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
Declare @sql varchar(1000);
set @sql = 'select ID, companyname,contactfirstname,contactlastname,phonenumber, contactid from oet WHERE ID is not null'
if(@companyname is not null)
set @sql = @sql + ' AND companyname = '''+ @companyname + '''';
if(@firstname is not null)
set @sql = @sql + ' AND contactfirstname = '''+ @firstname + '''';
if(@lastname is not null)
set @sql = @sql + ' AND contactlastname = '''+ @lastname + '''';
if(@phone is not null)
set @sql = @sql + ' AND phonenumber = '''+ @phone + '''';
if(@contactid is not null)
set @sql = @sql + ' AND contactid = '''+ @contactid + '''';
exec (@sql)
END
答案 0 :(得分:2)
我花了一天多的时间来解决它。 问题是母版页。当我从页面中删除母版页时,一切正常。发生的事情是页面上有txtFirstName控件,但自从我使用母版页以来从未找到它。结果它每次都传递一个空值。它没有产生任何错误(应该这样),这使得调试变得非常棘手。
您需要查看许多其他属性。重要的是
在SQL DataSource中,配置DataSource,参数部分:选择参数并单击“show advance options”,ConvertEmptyStringToNull。您可能需要将其更改为false。
SQLDatasourc - &gt; Properites - &gt; CancelSelectOnNullParamter =将其更改为false
答案 1 :(得分:1)
我刚遇到类似的麻烦,最后我通过在[SqlDataSource] - &gt; [Properties]视图中设置 CancelSelectOnNullParameter false 来解决了这个问题,或者代码为:{{ 1}}
如果您的商店过程允许空参数,则很容易错过,因为它设置为默认值