3

私はasp.netで作業しており、3つのテキストボックス(ファーストネーム、ラストネーム、ミドルイニシャル)があります。テキスト ボックスに入力された情報に基づいて、コンテンツを表示するリスト ビューがあります。情報を処理するために姓のテキスト ボックスのみが必要になるようにしようとしています。次のコードを使用して、既に SQL データ ソースをリスト ビューに接続しています。

    <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"/>  

姓のみを入力すると、データ ソースからデータは取得されませんが、すべてのテキスト ボックスに入力した場合にのみ機能します。情報を取得するために必要なテキスト ボックスを 1 つだけにするにはどうすればよいですか?

検索ボタンとテキスト ボックスにはコード ビハインドはありません

4

1 に答える 1

1

あなたが探しているのは、条件付きの where 句です。作成したストアド プロシージャは、次の場合にデータを返します。

  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>
于 2013-04-04T09:56:26.117 に答える