【发布时间】: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