Как у вас есть несколько элементов управления для вида сетки? - PullRequest
0 голосов
/ 25 апреля 2011

Например, у меня есть сетка и два текстовых поля.

Одно текстовое поле предназначено для поиска текста.Второе текстовое поле - это номер заказа для поиска.

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

Спасибо за любую помощь.

Ответы [ 3 ]

2 голосов
/ 29 апреля 2011

Хорошо, надеюсь, вы еще не решили эту проблему, потому что я потратил несколько минут на то, чтобы найти пример, который, я думаю, сделает в значительной степени то, что вы хотите.

Доступ к БД использует хранимую процедуру, но вы можете использовать ObjectDataSource с DAL или просто встроить оператор SQL в SqlDataSource и т. Д.

Markup:

Product ID:
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:CompareValidator ID="CompareValidator1" ControlToValidate="TextBox1" runat="server" ErrorMessage="You must enter a number"
    ValidationGroup="vg1" Type="Integer" Operator="DataTypeCheck"></asp:CompareValidator>
<br />
Description:
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br />
<asp:Button ID="cmdSearch" runat="server" Text="Search" ValidationGroup="vg1" /><br />
<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1">
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" SelectCommand="spGetProducts"
    CancelSelectOnNullParameter="False" SelectCommandType="StoredProcedure">
    <SelectParameters>
        <asp:ControlParameter ControlID="TextBox1" PropertyName="Text" DbType="String" DefaultValue="" />
        <asp:ControlParameter ControlID="TextBox2" PropertyName="Text" DbType="Int32" DefaultValue="" />
    </SelectParameters>
</asp:SqlDataSource>

И T-SQL для вашего запроса:

CREATE PROCEDURE spGetProducts
    @ProductId int = NULL
    ,@ProductDescription nvarchar(100) = NULL
AS
BEGIN
    SELECT [ProductId]
        ,[ProductDescription]
    FROM [Products]
    WHERE (
        (
            (@ProductId IS NULL)
            OR
            ([ProductId] LIKE % + @ProductId + %)
        )
        AND
        (
            (@ProductDescription IS NULL)
            OR
            ([ProductDescription] LIKE % + @ProductDescription + %;)
        )
    );
END

Если пользователь ничего не вводит ни в одно из полей, SqlDataSource все равно будет привязан из-за SqlDataSource.CancelSelectOnNullParameter = False, но пустой параметр не будет отправлен с запросом из-за установленного ControlParameter.DefaultValue. Затем хранимая процедура вставит значение NULL в параметр и пропустит эту часть фильтрации в предложении WHERE.

Надеюсь, это поможет.

0 голосов
/ 26 апреля 2011

Вы можете проверить текстовые поля с помощью (TextBox1.Text.Trim.Length> 0) или (TextBox1.Text = "")

0 голосов
/ 25 апреля 2011

Похоже, что вы действительно спрашиваете, как фильтровать ваш источник данных на основе более чем одного возможного параметра фильтра.Объяснение этого требует знания вашего источника данных.В любом случае, представление сетки просто будет отображать отфильтрованные результаты, верно?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...