【问题标题】:Multiple column search criteria GridView多列搜索条件 GridView
【发布时间】:2018-12-05 23:45:55
【问题描述】:

我正在尝试使用 TextBoxes 和 DropDownList 指定的多个条件执行搜索。
我面临的问题是,如果说 TextBoxes/DropDownList 中有值,我需要一种方法来附加额外的AND LIKE 命令,不幸的是,按钮的行为方式不符合我的要求,它在网格上没有显示任何数据.即使使用空白文本框,按钮也不会执行SELECT 命令。

代码隐藏:

protected void queryButton_Click(object sender, EventArgs e)
{
    string Filter = "";

    if (resIDSearch.Text != "") { Filter = Filter + "ID LIKE '%" + resIDSearch.Text + "%' AND "; }
    if (DFirstName.Text != "") { Filter = Filter + "FirstName LIKE '%" + DFirstName.Text + "%' AND "; }
    if (DLastName.Text != "") { Filter = Filter + "LastName LIKE '%" + DLastName.Text + "%' AND "; }
    if (contactNumSearch.Text != "") { Filter = Filter + "ContactNumber LIKE '%" + contactNumSearch.Text + "%' AND "; }
    if (lotNumSearch.Text != "") { Filter = Filter + "LotNumber LIKE '%" + lotNumSearch.Text + "%' AND "; }
    if (streetSearch.Text != "") { Filter = Filter + "StreetName LIKE '%" + streetSearch.Text + "%' AND "; }
    if (villiageSearch.Text != "") { Filter = Filter + "VilliageName LIKE '%" + villiageSearch.Text + "%' AND "; }
    if (vTypeBox.SelectedIndex != 0) { Filter = Filter + "VehicleType LIKE '%" + vTypeBox.SelectedItem.Text + "%' AND "; }
    if (statusBox.SelectedIndex != 0) { Filter = Filter + "StatusID LIKE '%" + statusBox.SelectedValue + "%' AND "; }
    if (DriIDSearch.Text != "") { Filter = Filter + "UserID LIKE '%" + DriIDSearch.Text + "%' AND "; }
    if (resDateSearch.Text != "") { Filter = Filter + "ReservationDate LIKE '%" + resDateSearch.Text + "%' AND "; }
    if (destSearch.Text != "") { Filter = Filter + "Destination LIKE '%" + destSearch.Text + "%' AND "; }
    if (pickUpSearch.Text != "") { Filter = Filter + "PickupLocation LIKE '%" + pickUpSearch.Text + "%' AND "; }

    if (Filter.Length > 0)
    {
        string FinalFilter = Filter.Remove(Filter.Length - 4, 3);
        resDataSource.FilterExpression = FinalFilter;
    }
    else {
        reservationTable.DataBind();
    }
}

.NET 脚本:

<asp:GridView OnRowDataBound="reservationTable_RowDataBound" DataSourceID="resDataSource" CssClass="table table-bordered dataTable text-center" Width="100%" ID="reservationTable" runat="server" AutoGenerateColumns="False">
    <Columns>
        <asp:BoundField DataField="ID" HeaderText="Reservation ID" />
        <asp:BoundField DataField="UserID" HeaderText="Driver ID" />
        <asp:BoundField DataField="FirstName" HeaderText="Driver First Name" />
        <asp:BoundField DataField="LastName" HeaderText="Driver Last Name" />
        <asp:BoundField DataField="StatusID" HeaderText="Status" />
        <asp:BoundField DataField="ContactNumber" HeaderText="Customer Contact #" />
        <asp:BoundField DataField="LotNumber" HeaderText="Lot Number" />
        <asp:BoundField DataField="StreetName" HeaderText="Street Name" />
        <asp:BoundField DataField="VilliageName" HeaderText="Villiage" />
        <asp:BoundField DataField="Note" HeaderText="Additional Information" />
        <asp:BoundField DataField="VehicleType" HeaderText="Vehicle Requested" />
        <asp:BoundField DataField="ReservationDate" HeaderText="Reservation Date" />
        <asp:BoundField DataField="Destination" HeaderText="Destination" />
        <asp:BoundField DataField="PickupLocation" HeaderText="Pick up" />
    </Columns>
</asp:GridView>

<asp:SqlDataSource ID="resDataSource"
    runat="server"
    ConnectionString="<%$ ConnectionStrings:SiteDatabase%>"
    ProviderName="<%$ ConnectionStrings:SiteDatabase.providerName%>"
    SelectCommand="SELECT * FROM Reservation"></asp:SqlDataSource>

【问题讨论】:

  • 你能检查一下你的最终过滤器的样子吗?该查询是否从您的数据库返回一些值?
  • Finalfilter 删除查询字符串的 AND 部分。过滤器初始化为“”,因此它的长度为0。如果任何文本框不为空,过滤器的长度就会改变,触发Finalfilter。

标签: c# sql asp.net datagridview sqldatasource


【解决方案1】:

ASP: " ProviderName="" SelectCommand="select * from Reservation">

        string Filter = "";
        string command = "SELECT * FROM Reservation WHERE";

        if (resIDSearch.Text != "") { Filter = Filter + " ID LIKE '%" + resIDSearch.Text + "%' AND"; }
        if (DFirstName.Text != "") { Filter = Filter + " FirstName LIKE '%" + DFirstName.Text + "%' AND"; }
        if (DLastName.Text != "") { Filter = Filter + " LastName LIKE '%" + DLastName.Text + "%' AND"; }
        if (contactNumSearch.Text != "") { Filter = Filter + " ContactNumber LIKE '%" + contactNumSearch.Text + "%' AND"; }
        if (lotNumSearch.Text != "") { Filter = Filter + " LotNumber LIKE '%" + lotNumSearch.Text + "%' AND"; }
        if (streetSearch.Text != "") { Filter = Filter + " StreetName LIKE '%" + streetSearch.Text + "%' AND"; }
        if (villiageSearch.Text != "") { Filter = Filter + " VilliageName LIKE '%" + villiageSearch.Text + "%' AND"; }
        if (vTypeBox.SelectedIndex != 0) { Filter = Filter + " VehicleType LIKE '%" + vTypeBox.SelectedItem.Text + "%' AND"; }
        if (statusBox.SelectedIndex != 0) { Filter = Filter + " StatusID LIKE '%" + statusBox.SelectedValue + "%' AND"; }
        if (DriIDSearch.Text != "") { Filter = Filter + " UserID LIKE '%" + DriIDSearch.Text + "%' AND"; }
        if (resDateSearch.Text != "") { Filter = Filter + " ReservationDate LIKE '%" + resDateSearch.Text + "%' AND"; }
        if (destSearch.Text != "") { Filter = Filter + " Destination LIKE '%" + destSearch.Text + "%' AND"; }
        if (pickUpSearch.Text != "") { Filter = Filter + " PickupLocation LIKE '%" + pickUpSearch.Text + "%' AND"; }

        if (Filter.Length > 0)
        {
            reservationTable.DataSource = resDataSource;
            string FinalFilter = Filter.Remove(Filter.Length - 3);
            resDataSource.SelectCommand = command + FinalFilter;
            reservationTable.DataBind();

        }
        else {
            reservationTable.DataBind();
        }

我实际上是通过更改后面代码中的 sqldatasource Select 命令解决了这个问题,一些 concats 并且效果很好!按照我的方式遵循每个文本间距。

【讨论】:

    猜你喜欢
    • 2016-11-29
    • 1970-01-01
    • 2014-10-24
    • 2020-12-19
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多