我在 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 .我创建的存储过程将在以下情况下返回数据:
- 仅提供姓氏
- 提供名字和姓氏
- 已提供名字、姓氏和中间名的首字母
如果您需要满足任何其他条件,只需修改存储过程即可。我创建存储过程的原因是因为查询现在比您开始时的查询要大得多:
首先在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/