0

我的场景是一个 Gridview,它使用 asp:SQLDataSource 绑定到一个存储过程。这是使用向导快速完成的,我在其中选择了 SP 并显示了所有数据。SP 以包含 4 个参数的方式创建。当此类参数为空时,它们将返回查询中的所有值。

我创建了 3 个文本框和一个下拉列表来填充这些参数,将它们绑定到一个按钮以尝试创建搜索功能。我尝试了很多方法和方法,尤其是通过对这个站点的研究,但似乎没有一个有效。我不能完全找到我的问题,所以我很感激任何关于此事的帮助。下面是我的代码。

<asp:SqlDataSource ID="sqlSourceID" runat="server" ConnectionString="<%$ ConnectionStrings:DBCONNSTRING%>"
            SelectCommand="storedProcedureName" SelectCommandType="StoredProcedure">                
        </asp:SqlDataSource>

以上是SQL存储过程绑定。

我已尝试将控件绑定为 SQL 服务器的参数。在此代码之前,用于加载所有记录的页面在没有搜索参数的情况下正常加载,因为 SP 假定为空值。现在什么都没有加载。

            <SelectParameters>
                <asp:ControlParameter ConvertEmptyStringToNull="true" ControlID="textBox1" PropertyName="Text" Name="1" Type="DateTime" />
                <asp:ControlParameter ConvertEmptyStringToNull="true" ControlID="textBox2" PropertyName="Text" Name="2" Type="DateTime" />
                <asp:ControlParameter ConvertEmptyStringToNull="true" ControlID="textBox3" PropertyName="Text" Name="3" Type="String" />
                <asp:ControlParameter ConvertEmptyStringToNull="true" ControlID="ddl1" PropertyName="SelectedText" Name="4" Type="String" />
            </SelectParameters>

其中控件 ID 代表文本框 ID

下面是我的代码。

        sqlSourceID.SelectParameters["textbox1"].DefaultValue = this.textbox.Text;
        sqlSourceID.SelectParameters["textbox2"].DefaultValue = this.textbox1.Text;
        sqlSourceID.SelectParameters["textbox3"].DefaultValue = this.textbox2.Text;
        sqlSourceID.SelectParameters["ddl1"].DefaultValue =    Convert.ToString(this.ddl.SelectedText);

那是我的问题。我需要找到一种方法来在单击“搜索”按钮时从文本框中传递参数,并在页面加载时假定为 null 或没有写入任何内容。

感谢所有提前做出贡献的人。

4

1 回答 1

1

我不保证这会解决问题,但我发现有三件事看起来有问题:

  1. 您为标签的Name属性提供了值 1、2 和 3 。asp:ControlParameter除非您调用的存储过程实际上具有名为@1、@2 和@3 的参数,否则您需要将这些名称更改为您要映射到的存储过程的参数名称。

  2. 同样,在您的代码隐藏中,您使用控件名称来查找您的参数SqlDataSource.SelectCommand,如下所示:

    sqlSourceID.SelectParameters["textbox1"].DefaultValue = this.textbox.Text;
    

    但是“textbox1”不是您的存储过程参数的名称。如您所写,@1 是该参数的名称。如果您保留名称 1、2 和 3,您应该像这样进行参数设置:

    sqlSourceID.SelectParameters["1"].DefaultValue = this.textbox.Text;
    
  3. 但我认为您根本不需要在代码隐藏中设置参数的值。这就是ControlParameter: 它获取控件属性的值并将其分配给命令参数。以下是一些可能有帮助的链接: 使用 SqlDataSource 控件ASP.NET DetailsView 和 ControlParameter 示例选择数据。

我希望这有帮助。

于 2012-11-06T20:10:20.233 回答