Gridview не отображается при использовании хранимой процедуры в SQLDatasource - PullRequest
3 голосов
/ 19 августа 2011

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

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

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
    DataSourceID="SqlDataSource1" AutoGenerateColumns="False" 
    DataKeyNames="ID">
    <Columns>
        <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" 
            ReadOnly="True" SortExpression="ID" />
        <asp:BoundField DataField="companyname" HeaderText="companyname" 
            SortExpression="companyname" />
        <asp:BoundField DataField="contactfirstname" HeaderText="contactfirstname" 
            SortExpression="firstname" />
        <asp:BoundField DataField="contactlastname" HeaderText="contactlastname" 
            SortExpression="lastname" />
        <asp:BoundField DataField="phonenumber" HeaderText="phonenumber" 
            SortExpression="phonenumber" />
        <asp:BoundField DataField="contactid" HeaderText="contactid" 
            SortExpression="contactno" />
    </Columns>
</asp:GridView>

В моем событии нажатия кнопки «Найти». Я использую этот код

protected void btnFind_Click(object sender, EventArgs e)
{
    SqlDataSource1.DataBind(); /* Edit: I don't need this, I realized */
}

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

Я думаю, что где-то прочитал, если хранимая процедура возвращает 0 результатов, gridview не будет отображаться.

Мой SQLDataSource

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:MyDBconn %>" 
    SelectCommand="usp_GetContactNo" SelectCommandType="StoredProcedure">
    <SelectParameters>
        <asp:FormParameter DefaultValue="" FormField="txtCompanyName" 
            Name="companyname" Type="String" />
        <asp:FormParameter FormField="txtFirstName" Name="firstname" Type="String" />
        <asp:FormParameter FormField="txtLastName" Name="lastname" Type="String" />
        <asp:FormParameter FormField="txtPhone" Name="phone" Type="String" />
        <asp:FormParameter FormField="txtContactID" Name="contactNo" Type="String" />
    </SelectParameters>
</asp:SqlDataSource>

StoredProcedure ниже. Обратите внимание, что я мог изменить некоторые имена выше из соображений безопасности, но ниже приведены исходные поля.

ALTER PROCEDURE [dbo].[usp_GetContactIDs] 
    -- Add the parameters for the stored procedure here
    @companyname varchar(255) = NULL, 
    @firstname varchar(255) = NULL,
    @lastname varchar(255) = NULL,
    @phone varchar(10) = NULL,
    @contactid varchar(15) = NULL
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    Declare @sql varchar(1000);



    set @sql = 'select ID, companyname,contactfirstname,contactlastname,phonenumber, contactid from oet WHERE ID is not null'

    if(@companyname is not null)
        set @sql = @sql + ' AND companyname = '''+ @companyname + '''';

    if(@firstname is not null)
        set @sql = @sql + ' AND contactfirstname = '''+ @firstname + '''';

    if(@lastname is not null)
        set @sql = @sql + ' AND contactlastname = '''+ @lastname + '''';

    if(@phone is not null)
        set @sql = @sql + ' AND phonenumber = '''+ @phone + '''';

    if(@contactid is not null)
        set @sql = @sql + ' AND contactid = '''+ @contactid + '''';


    exec (@sql)


END

Ответы [ 2 ]

2 голосов
/ 19 августа 2011

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

Была куча других свойств, на которые нужно обратить внимание.Важными из них являются

. В SQL DataSource сконфигурируйте DataSource, раздел Parameter: выберите параметр и нажмите «Показать дополнительные параметры», ConvertEmptyStringToNull.Вам может потребоваться изменить его на false.

SQLDatasourc -> Properites -> CancelSelectOnNullParamter = изменить на false

1 голос
/ 03 марта 2014

Я только что столкнулся с подобной проблемой, наконец, я решил ее, установив CancelSelectOnNullParameter false в представлении [SqlDataSource] -> [Properties] или код как: <asp:SqlDataSource ID="..." runat="server" ... CancelSelectOnNullParameter="False">

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

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