2011-08-18 39 views
3

我偶然發現了這一點,我知道這是一個常見問題。一個相關的問題是GridView is empty。但它不能解決我的問題。在SQLDatasource中使用存儲過程時不顯示Gridview

理想情況下,我想要的是更新我的gridview取決於文本框中的值,當我點擊'查找'按鈕。它在我的其他頁面中爲我工作。但我在這裏有一些問題。我沒有更改任何默認參數。這裏是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 dos不會出現。如果我使用select語句,那麼gridview會顯示結果。我已經在gridview中測試了我的storedprocedure,它的工作方式應該是這樣。不知道究竟是什麼問題?任何人都遇到過它?

我想我讀的地方如果存儲過程返回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 
+0

你爲什麼在'SqlDataSource'調用'的DataBind()'?這是唯一的查找按鈕正在做什麼? – Tim

+0

是的,需要更新網格視圖。 –

+0

更正:你是對的'DataBind()'是不需要的。 –

回答

2

花了我一天多的時間來解決它。 問題是母版頁。當我從網頁中刪除母版頁時,一切正常。發生了什麼是頁面上的txtFirstName控件,但從我使用母版頁開始就沒有發現它。結果它每次都傳遞一個空值。它沒有產生任何錯誤(這是應該的),這使得調試非常棘手。

有一堆其他屬性,你需要看看。重要的是

在SQL數據源,配置數據源,參數部分:選擇參數,然後單擊'顯示高級選項',ConvertEmptyStringToNull。您可能需要將其更改爲false。

SQLDatasourc - >性質在 - > CancelSelectOnNullParamter =它更改爲false

+0

如果您在C#中使用FindControl,那麼如果它存在於同一頁面上,那麼通過id查找文本框名稱應該沒有問題,所以我不會在您認爲您的問題出現在哪裏 – Jake

+0

我沒有使用任何C#碼。一切都是ASP。我現在正在尋找$操作員來解決findcontrol問題。 –

1

我只遇到過類似的麻煩,最後我解決它通過設置CancelSelectOnNullParameter在[SqlDataSource的] - > [屬性]視圖或代碼:<asp:SqlDataSource ID="..." runat="server" ... CancelSelectOnNullParameter="False">

這是很容易錯過,如果你的存儲過程允許空參數,因爲它是真正的設置爲默認

+0

這是一個救生員。嚴重的是,MSFT認爲這是默認的「真實」? – contactmatt

相關問題