2016-10-10 44 views
0

当我创建条件我有我的SQLDATASOURCE查询生成器测试过的结果就像我想要的,但当我通过使用我的asp.net页面搜索数据所有结果时,我有过滤搜索多文本框的asp.net网页显示不考虑我的情况任何人都可以解释为什么?和我的代码就是这样GridView无论我的查询条件如何,都可以查看所有数据?

SQL查询

SELECT  IQCRM_NUM, 
       Full_name, 
       Mother_Name, 
       Date_of_Birth, 
       Province_of_birth, 
       Job 
FROM [Criminal Main Table] 
WHERE (Full_name LIKE N'%' + @Full_name + N'%') OR 
     (Mother_Name LIKE N'%' + @Mother_Name + N'%') OR 
     (Date_of_Birth LIKE N'%' + @Date_of_Birth + N'%') 

我的ASP.NET代码是

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication2.WebForm1" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <style type="text/css"> 
     .style1 
     { 
      width: 30%; 
     } 
    </style> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Button ID="Button1" runat="server" Text="Search" /> 
     <br /> 
     <table class="style1"> 
      <tr> 
       <td> 
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 
       </td> 
       <td> 
        <asp:TextBox ID="TextBox1_NAM" runat="server"></asp:TextBox> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label> 
       </td> 
       <td> 
        <asp:TextBox ID="TextBox2_Mother" runat="server"></asp:TextBox> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        <asp:Label ID="Label3" runat="server" Text="Label"></asp:Label> 
       </td> 
       <td> 
        <asp:TextBox ID="TextBox3_Birth" runat="server"></asp:TextBox> 
       </td> 
      </tr> 
     </table> 
     <br /> 
     <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="IQCRM_NUM" 
      DataSourceID="SqlDataSource1"> 
      <Columns> 
       <asp:BoundField DataField="IQCRM_NUM" HeaderText="IQCRM_NUM" ReadOnly="True" SortExpression="IQCRM_NUM" /> 
       <asp:BoundField DataField="Full_name" HeaderText="Full_name" SortExpression="Full_name" /> 
       <asp:BoundField DataField="Mother_Name" HeaderText="Mother_Name" SortExpression="Mother_Name" /> 
       <asp:BoundField DataField="Date_of_Birth" HeaderText="Date_of_Birth" SortExpression="Date_of_Birth" /> 
       <asp:BoundField DataField="Province_of_birth" HeaderText="Province_of_birth" SortExpression="Province_of_birth" /> 
       <asp:BoundField DataField="Job" HeaderText="Job" SortExpression="Job" /> 
      </Columns> 
     </asp:GridView> 
     <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:CriminalDBBefore2003ConnectionString %>" 
      SelectCommand="SELECT IQCRM_NUM, Full_name, Mother_Name, Date_of_Birth, Province_of_birth, Job FROM [Criminal Main Table] WHERE (Full_name LIKE N'%' + @Full_name + N'%') OR (Mother_Name LIKE N'%' + @Mother_Name + N'%') OR (Date_of_Birth LIKE N'%' + @Date_of_Birth + N'%')"> 
      <SelectParameters> 
       <asp:ControlParameter ControlID="TextBox1_NAM" ConvertEmptyStringToNull="False" Name="Full_name" 
        PropertyName="Text" Type="String" /> 
       <asp:ControlParameter ControlID="TextBox2_Mother" ConvertEmptyStringToNull="False" 
        Name="Mother_Name" PropertyName="Text" Type="String" /> 
       <asp:ControlParameter ControlID="TextBox3_Birth" ConvertEmptyStringToNull="False" 
        Name="Date_of_Birth" PropertyName="Text" Type="String" /> 
      </SelectParameters> 
     </asp:SqlDataSource> 
    </div> 
    </form> 
</body> 
</html> 
+0

我使用没有看到你声明和设置变量Full_Name,Mother_Name或Date_of_Birth。这是在代码后面完成的吗?我最近有一个类似的问题,我有一个错字的搜索条件,查询在asp.net中运行,但结果不符合预期。 –

+0

@BrentOliver你可以看到我在选定的参数中声明了我的参数 –

回答

0

您可以使用FilterParameters代替SelectParameters并添加FilterExpression像这个样本。

SelectCommand - 这里我们需要设置默认的SQL查询而不用任何WHERE子句或过滤器。

FilterExpression - 这里我们需要用占位符{0}设置SQL查询的过滤器部分。占位符{0}将由ControlParameter的值来代替,即文本框的文本

FilterParameters - 我们在这里指定的控制参数由FilterExpression

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:CriminalDBBefore2003ConnectionString %>" 
       SelectCommand="SELECT IQCRM_NUM, Full_name, Mother_Name, Date_of_Birth, Province_of_birth, Job FROM Criminal Main Table" FilterExpression="Full_name LIKE '{0}%' OR Mother_Name LIKE '{1}%' OR Date_of_Birth LIKE '{2}%'"> 
<FilterParameters> 
    <asp:ControlParameter ControlID="TextBox1_NAM" ConvertEmptyStringToNull="False" Name="Full_name" 
          PropertyName="Text" Type="String"/> 
    <asp:ControlParameter ControlID="TextBox2_Mother" ConvertEmptyStringToNull="False" 
          Name="Mother_Name" PropertyName="Text" Type="String"/> 
    <asp:ControlParameter ControlID="TextBox3_Birth" ConvertEmptyStringToNull="False" 
          Name="Date_of_Birth" PropertyName="Text" Type="String"/> 
</FilterParameters> 

+0

我尝试使用这种方法,但是它会一直给我所有的数据? –

+0

@FarooqAlsaegh你如何测试它?它应该工作。在文本框中放入一些过滤器文本并重新绑定网格。 –

+0

我做到了,但它仍然给我同样的结果 –

相关问题