Итак, я пытаюсь объединить две таблицы и выполнить поиск, используя одно поле поиска, чтобы независимо от того, что я в него набирал, оно отображало все подходящие критерии. Но когда я запускаю код и пытаюсь что-то набрать в нем, ничего не появляется, и обе сетки исчезают. Я что-то пропустил?
Я уже пытался изменить хранимую процедуру, а также проверить, не ошибся ли я в привязке вида сетки, но ничего особенного не произошло.
DAL
public DataTable Search(GuestBEL objBEL)
{
DataTable dts = new DataTable();
SqlCommand cmd = new SqlCommand("GuestSearch", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@FirstName", objBEL.FirstName);
cmd.Parameters.AddWithValue("@LastName", objBEL.LastName);
cmd.Parameters.AddWithValue("@Phone", objBEL.Phone);
cmd.Parameters.AddWithValue("@HName", objBEL.HName);
cmd.Parameters.AddWithValue("@HAddress", objBEL.HAddress);
//cmd.Parameters.AddWithValue("@Price", objBEL.Price);
SqlDataAdapter adapt = new SqlDataAdapter(cmd);
adapt.Fill(dts);
return dts;
}
public DataSet SelectGuest()
{
DataSet dts = new DataSet();
SqlCommand cmd = new SqlCommand("GuestRead", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter adapt = new SqlDataAdapter(cmd);
con.Open();
adapt.Fill(dts);
cmd.Dispose();
dts.Dispose();
con.Close();
return dts;
}
public DataSet SelectHotel()
{
DataSet dts = new DataSet();
SqlCommand cmd = new SqlCommand("HotelRead", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter adapt = new SqlDataAdapter(cmd);
con.Open();
adapt.Fill(dts);
cmd.Dispose();
dts.Dispose();
con.Close();
return dts;
}
BEL
public class GuestBEL
{
public string GuestID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Phone { get; set; }
public string HName { get; set; }
public string HAddress { get; set; }
}
BLL
public DataSet ReadGuest()
{
GuestDAL objDAL = new GuestDAL();
return objDAL.SelectGuest();
}
public DataSet ReadHotel()
{
GuestDAL objDAL = new GuestDAL();
return objDAL.SelectHotel();
}
public DataTable Search(GuestBEL objBEL)
{
GuestDAL objDAL = new GuestDAL();
return objDAL.Search(objBEL);
}
CS-код для поиска, чтения сетки и загрузки страницы
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
readGrid();
readGrid1();
//readGrid2();
}
}
private void readGrid()
{
DataSet data = new DataSet();
data = objBLL.ReadGuest();
gvGuest.DataSource = data;
gvGuest.DataBind();
}
private void readGrid1()
{
DataSet data = new DataSet();
data = objBLL.ReadHotel();
gvHotel.DataSource = data;
gvHotel.DataBind();
}
protected void btnSearch_Click(object sender, EventArgs e)
{
objBEL.FirstName = txtSearch.Text.Trim();
objBEL.LastName = txtSearch.Text.Trim();
objBEL.Phone = txtSearch.Text.Trim();
objBEL.HName = txtSearch.Text.Trim();
objBEL.HAddress = txtSearch.Text.Trim();
DataTable dt = new DataTable();
dt = objBLL.Search(objBEL);
readGrid();
readGrid1();
gvGuest.DataSource = dt;
gvGuest.DataBind();
gvHotel.DataSource = dt;
gvHotel.DataBind();
txtSearch.Text = string.Empty;
}
Поиск хранимой процедуры
CREATE PROCEDURE [dbo].[GuestSearch]
@FirstName varchar(20),
@LastName varchar(20),
@Phone varchar(15),
@HName varchar(20),
@HAddress varchar(50)
AS
SELECT GuestID, guest.FirstName + '' + guest.LastName AS FullName, guest.Phone, hotel.HotelID, hotel.HName AS HotelName, hotel.HAddress AS HotelAddress
FROM Guest
INNER JOIN Hotel ON guest.HotelID = hotel.HotelID
WHERE FirstName LIKE '%'+@FirstName+'%'
OR LastName LIKE '%'+@LastName+'%' OR
Phone LIKE '%'+@Phone+'%' OR HName LIKE '%'+@HName+'%'
OR HAddress LIKE '%'+@HAddress+'%'
RETURN 0
Gridview для гостя и отеля
<asp:GridView ID="gvGuest" runat="server" AutoGenerateColumns="False"
OnPageIndexChanging="PageIndexChanging" AllowPaging="true" PageSize="5"
DataKeyNames="GuestID">
<Columns>
<asp:TemplateField HeaderText="Guest ID" InsertVisible="False" SortExpression="GuestID">
<ItemTemplate>
<asp:Label ID="lblGuestID" runat="server" Text='<%#Eval("GuestID")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="First Name">
<ItemTemplate>
<asp:Label ID="lblFirstName" runat="server" Text='<%#Eval("FirstName")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Last Name">
<ItemTemplate>
<asp:Label ID="lblLastName" runat="server" Text='<%#Eval("LastName")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Phone">
<ItemTemplate>
<asp:Label ID="lblPhone" runat="server" Text='<%#Eval("Phone")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Phone">
<ItemTemplate>
<asp:Label ID="lblPhone" runat="server" Text='<%#Eval("Phone")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText ="Actions">
<ItemTemplate>
<asp:Button ID="btnUpdate" runat="server" ForeColor="Blue" Text="Update" OnClick="btnUpdate_Click"></asp:Button>
<asp:Button ID="btnDelete" runat="server" ForeColor="Red" Text="Delete" OnClick="btnDelete_Click"></asp:Button>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<br />
<asp:GridView ID="gvHotel" runat="server" AutoGenerateColumns="False"
OnPageIndexChanging="PageIndexChanging" AllowPaging="true" PageSize="5"
DataKeyNames="HotelID">
<Columns>
<asp:TemplateField HeaderText="Hotel ID" InsertVisible="False" SortExpression="HotelID">
<ItemTemplate>
<asp:Label ID="lblHotelID" runat="server" Text='<%#Eval("HotelID")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Hotel Name">
<ItemTemplate>
<asp:Label ID="lblHName" runat="server" Text='<%#Eval("HName")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Hotel Address">
<ItemTemplate>
<asp:Label ID="lblHAddress" runat="server" Text='<%#Eval("HAddress")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Таким образом, для ожидаемого результата, когда я что-то печатаю в поле поиска, две таблицы должны возвращать одну таблицу, в которой будут отображаться данные, но когда я что-то печатал в поле поиска, обе мои сетки по какой-то причине исчезают.