asp.net - 将信息从文本框检索到 ListView

标签 asp.net sql database

我在 asp.net 工作,我有三个文本框(名字、姓氏、中间名缩写)。有一个 ListView ,它根据输入到文本框中的信息显示内容。我正在尝试只需要姓氏文本框来处理信息。我已经使用以下代码将 sql 数据源连接到 ListView :

    <asp:TabPanel runat="server" HeaderText="Information" ID="TabPanel">             
     <ContentTemplate> 

         <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
             ConnectionString="<%$ Name of the database %>" 
             SelectCommand="SELECT [UserID], [UserSuffix], [UserAddressLine1], [UserAddressLine2], [UserCity], 
             [UserState], [UserZipCode], [UserPhoneNumber], [UserEmail] FROM [AllUsers]
             WHERE (([UserLastName] = @UserLastName) OR ([UserFirstName] = @UserFirstName) 
             OR ([UserMiddleInitial] = @UserMiddleInitial))">
             <SelectParameters>
                 <asp:ControlParameter ControlID="txtUILastName" Name="UserLastName" 
                     PropertyName="Text" />
                 <asp:ControlParameter ControlID="txtUIFirstName" Name="UserFirstName" 
                     PropertyName="Text" />
                 <asp:ControlParameter ControlID="txtUIMI" Name="UserMiddleInitial" 
                     PropertyName="Text" />
             </SelectParameters>
         </asp:SqlDataSource>

      <table id = "USERINF">
          <tr>
           <td width="196px" class="style8">
             <asp:Label ID="lblFirstName" runat="server" Text="Please enter First Name:"></asp:Label>
           </td>
           <td class="style6">

            <asp:TextBox ID="txtUIFirstName" runat="server" MaxLength="20"></asp:TextBox>


           </td>
          </tr>
          <tr>
           <td width="196px" class="style8">
            <asp:Label ID="lblLastName" runat="server" Text="Please enter Last Name:"></asp:Label>

           </td>
           <td class="style6">
             <asp:TextBox ID="txtUILastName" runat="server" MaxLength="20"></asp:TextBox> 

            <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" 
             ControlToValidate = "txtUILastName" ValidationExpression = "[a-zA-Z ]{1,20}"
             ForeColor="Red" ValidationGroup="UserInf"
             ErrorMessage="First Name must be only a-z,A-Z characters!" Display="Dynamic"></asp:RegularExpressionValidator>

             <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
                   ControlToValidate = "txtUILastName" ErrorMessage="Please enter Last Name!" 
                   ForeColor="Red" ValidationGroup="UserInf" Display="Dynamic"></asp:RequiredFieldValidator>
           </td> 
          </tr>
          <tr>
           <td width="196px" class="style8">
            <asp:Label ID="lblMI" runat="server" Text="Please enter Middle Initials:"></asp:Label>
           </td>
           <td class="style6">
            <asp:TextBox ID="txtUIMI" runat="server" MaxLength="1" Width="30px" style="text-align: center;
                 margin-left:2px"></asp:TextBox> 

           </td> 
          </tr>
          <tr>
           <td width="196px" class="style8">
           </td>
           <td class="style6">
            <asp:Button ID="btnIFind" runat="server" Text="Find" ValidationGroup = "UserInf"/>  

当我只输入姓氏时,它不会从数据源中检索任何数据,但只有当我填写所有文本框时它才会起作用。如何使检索信息只需要一个文本框?

查找按钮和文本框没有任何代码隐藏

最佳答案

您正在寻找的是 conditional where clause .我创建的存储过程将在以下情况下返回数据:

  1. 仅提供姓氏
  2. 提供名字和姓氏
  3. 已提供名字、姓氏和中间名的首字母

如果您需要满足任何其他条件,只需修改存储过程即可。我创建存储过程的原因是因为查询现在比您开始时的查询要大得多:

首先在SQL中创建这个存储过程:

CREATE PROCEDURE [dbo].[SearchUsers]
    @UserLastName VARCHAR(MAX),
    @UserFirstName VARCHAR(MAX) = 'NOVALUE',
    @UserMiddleInitial VARCHAR(MAX) = 'NOVALUE'
AS
BEGIN

SELECT [UserID], [UserSuffix], [UserAddressLine1], [UserAddressLine2], [UserCity], 
[UserState], [UserZipCode], [UserPhoneNumber], 
[UserEmail] FROM [AllUsers] 
WHERE 1 = (CASE 

WHEN @UserFirstName <> 'NOVALUE' AND
@UserMiddleInitial <> 'NOVALUE' AND
UserFirstName = @UserFirstName AND
UserLastName = @UserLastName AND
UserMiddleInitial = @UserMiddleInitial THEN 1

WHEN @UserFirstName <> 'NOVALUE' AND
@UserMiddleInitial = 'NOVALUE' AND
UserFirstName = @UserFirstName AND
UserLastName = @UserLastName THEN 1

WHEN @UserFirstName = 'NOVALUE' AND
@UserMiddleInitial = 'NOVALUE' AND
UserLastName = @UserLastName THEN 1
ELSE 0 END)

END

ASPX:

<form id="form1" runat="server">
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:WildLife_EducationConnectionString %>"
    SelectCommand="SearchUsers" SelectCommandType="StoredProcedure">
    <SelectParameters>
        <asp:ControlParameter ControlID="txtUILastName" Name="UserLastName" PropertyName="Text"
            Type="String" />
        <asp:ControlParameter ControlID="txtUIFirstName" DefaultValue="NOVALUE" Name="UserFirstName" PropertyName="Text"
            Type="String" />
        <asp:ControlParameter ControlID="txtUIMI" DefaultValue="NOVALUE" Name="UserMiddleInitial" PropertyName="Text"
            Type="String" />
    </SelectParameters>
</asp:SqlDataSource>
<table id="USERINF">
    <tr>
        <td width="196px" class="style8">
            <asp:Label ID="lblFirstName" runat="server" Text="Please enter First Name:"></asp:Label>
        </td>
        <td class="style6">
            <asp:TextBox ID="txtUIFirstName" runat="server" MaxLength="20"></asp:TextBox>
        </td>
    </tr>
    <tr>
        <td width="196px" class="style8">
            <asp:Label ID="lblLastName" runat="server" Text="Please enter Last Name:"></asp:Label>
        </td>
        <td class="style6">
            <asp:TextBox ID="txtUILastName" runat="server" MaxLength="20"></asp:TextBox>
            <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="txtUILastName"
                ValidationExpression="[a-zA-Z ]{1,20}" ForeColor="Red" ValidationGroup="UserInf"
                ErrorMessage="First Name must be only a-z,A-Z characters!" Display="Dynamic"></asp:RegularExpressionValidator>
            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtUILastName"
                ErrorMessage="Please enter Last Name!" ForeColor="Red" ValidationGroup="UserInf"
                Display="Dynamic"></asp:RequiredFieldValidator>
        </td>
    </tr>
    <tr>
        <td width="196px" class="style8">
            <asp:Label ID="lblMI" runat="server" Text="Please enter Middle Initials:"></asp:Label>
        </td>
        <td class="style6">
            <asp:TextBox ID="txtUIMI" runat="server" MaxLength="1" Width="30px" Style="text-align: center;
                margin-left: 2px"></asp:TextBox>
        </td>
    </tr>
    <tr>
        <td width="196px" class="style8">
        </td>
        <td class="style6">
            <asp:Button ID="btnIFind" runat="server" Text="Find" ValidationGroup="UserInf" />
        </td>
    </tr>
</table>
<asp:ListView ID="listView" runat="server" DataSourceID="SqlDataSource1">
    <ItemTemplate>
        <tr>
            <td>
                <asp:Label ID="UserCityLabel" runat="server" Text='<%# Eval("UserCity") %>' />
            </td>
            <td>
                <asp:Label ID="UserEmailLabel" runat="server" Text='<%# Eval("UserEmail") %>' />
            </td>
        </tr>
    </ItemTemplate>
</asp:ListView>
</form>

关于asp.net - 将信息从文本框检索到 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15577519/

相关文章:

没有表单标签和 View 状态的 Jquery load() .aspx 页面

c# - 'GET OR SET ACCESSOR EXPECTED' 是什么意思?

sql - 连接逗号分隔的数据列

sql - 获取原因 (ORA-8102 "index key not found")

python - Django: atomic(): Force transaction, raise AssertionError 如果已经在事务中

mysql - 使用 NodeJS 和 KnexJS 同步 MySQL 查询

c# - ScriptManager 多次向页面添加脚本(重复)

c# - 在 ASPX 中定义自定义对象时出现 NullReferenceException

sql - 独特的航类组合与总乘客

mysql - 数据库设计建议