Моя сетка не возвращает никаких данных, когда я что-то печатаю в строке поиска - PullRequest
0 голосов
/ 23 мая 2019

Итак, я пытаюсь объединить две таблицы и выполнить поиск, используя одно поле поиска, чтобы независимо от того, что я в него набирал, оно отображало все подходящие критерии. Но когда я запускаю код и пытаюсь что-то набрать в нем, ничего не появляется, и обе сетки исчезают. Я что-то пропустил?

Я уже пытался изменить хранимую процедуру, а также проверить, не ошибся ли я в привязке вида сетки, но ничего особенного не произошло.

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>

Таким образом, для ожидаемого результата, когда я что-то печатаю в поле поиска, две таблицы должны возвращать одну таблицу, в которой будут отображаться данные, но когда я что-то печатал в поле поиска, обе мои сетки по какой-то причине исчезают.

...