如果将null值作为参数传递给Gridview使用的sqldatasource,则不会显示Gridview

问题描述 投票:0回答:1

我正在使用两个文本框按电话号码或姓氏进行搜索。我希望能够使用一个或两个文本框进行搜索。我已经测试了存储过程,并且工作正常。当我运行我的应用程序时,单击“搜索”按钮没有任何反应。在Visual Studio或Web应用程序中,我没有收到错误。根本没有回应。应该有一个用存储过程的结果填充的gridview。这是我的代码。我以前曾经使用过它,但我完全不知道为什么它突然停止了工作。

 <div class="col-xs-6 col-xs-offset-2" style="left: 0px; top: 0px; width: 80%; height: 1717px;">
    <div class="panel panel-primary">
            <div class="panel-heading">
                <h3>Customer Search Form</h3>
            </div>
            </div>
            <div class="panel-body">
                <div class="form-group">
                    <label for="inputLastname" class="control-label col-xs-2">
                        LastName
                    </label>
                    <div class="col-xs-10">
                        &nbsp;<asp:TextBox ID="txtLastName" runat="server"></asp:TextBox>
                    </div>
                </div>

                <div class="form-group">
                    <label for="inputPhoneNumber" class="control-label col-xs-2">
                        PhoneNumber
                    </label>
                    <div class="col-xs-10">
                        &nbsp;<asp:TextBox ID="txtPhoneNumber" runat="server"></asp:TextBox>
                    </div>
                </div>


                <div class="form-group">
                    <div class="col-xs-10 col-xs-offset-2" style="left: -1px; top: 18px; width: 29%">
                        <asp:Button ID="btnSearch" runat="server" Text="Search"
                            CssClass="btn btn-primary" OnClick="btnSearch_Click" />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                        <asp:Button ID="btnClear" runat="server" Text="Clear"
                            CssClass="btn btn-primary" OnClick="btnClear_Click" />
                    </div>
                    <br />
                    <br />
                </div>
            </div>           
    <br />
    <br />
        <div class="panel panel-primary">
            <div class="panel-heading">
                <h3>Search Results</h3>
            </div>
            <div class="panel-body" align="center">
                <div class="col-xs-6" style="left: 0px; top: 0px; width: 93%; height: 98px">
                    <br />
                    <asp:GridView ID="gvSearchResults" runat="server" AutoGenerateColumns="False" DataKeyNames="customer_id" Height="66px">
                        <Columns>
                            <asp:CommandField ShowSelectButton="True" />
                            <asp:BoundField DataField="customer_id" HeaderText="customer_id" InsertVisible="False" ReadOnly="True" SortExpression="customer_id" />
                            <asp:BoundField DataField="Company" HeaderText="Company" SortExpression="Company" />
                            <asp:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" />
                            <asp:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" />
                            <asp:BoundField DataField="ShippingAddress" HeaderText="ShippingAddress" SortExpression="ShippingAddress" />
                            <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" />
                            <asp:BoundField DataField="State" HeaderText="State" SortExpression="State" />
                            <asp:BoundField DataField="ZipCode" HeaderText="ZipCode" SortExpression="ZipCode" />
                            <asp:BoundField DataField="EmailAddress" HeaderText="EmailAddress" SortExpression="EmailAddress" />
                            <asp:BoundField DataField="PhoneNumber" HeaderText="PhoneNumber" SortExpression="PhoneNumber" />
                        </Columns>
                    </asp:GridView>
                </div>
            </div>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:HMTechConnectionString %>" SelectCommand="spSearchCustomers" SelectCommandType="StoredProcedure">
                <SelectParameters> 

                    <asp:ControlParameter ControlID="txtLastName" Name="LastName" PropertyName="Text" Type="String" />
                    <asp:ControlParameter ControlID="txtPhoneNumber" Name="PhoneNumber" PropertyName="Text" Type="String" />

                </SelectParameters>
            </asp:SqlDataSource>
        </div>

这是我称为Databind的代码。网格正在使用SqlDataSource。

protected void btnSearch_Click(object sender, EventArgs e)
        {
            gvSearchResults.DataSource = SqlDataSource1;
            gvSearchResults.DataBind();            
        }

我也尝试删除

<asp:ControlParameter ControlID="txtLastName" Name="LastName" PropertyName="Text" Type="String" />
<asp:ControlParameter ControlID="txtPhoneNumber" Name="PhoneNumber" PropertyName="Text" Type="String" />

并像下面这样在后面的代码中设置参数:

SqlDataSource1.SelectParameters["txtPhoneNumber"].DefaultValue = "";
SqlDataSource1.SelectParameters["txtLastName"].DefaultValue = "";

创建此错误:

object reference not set to an instance of an object

我正在使用两个文本框按电话号码或姓氏进行搜索。我希望能够使用一个或两个文本框进行搜索。我已经测试了存储过程,并且工作正常。当我运行我的...

gridview sqldatasource
1个回答
0
投票

最后使它起作用,但不能完全确定是什么改变导致了它。我在其他一些更改中添加了以下代码,因此可能是解决方法:

© www.soinside.com 2019 - 2024. All rights reserved.