我偶然發現了這一點,我知道這是一個常見問題。一個相關的問題是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
你爲什麼在'SqlDataSource'調用'的DataBind()'?這是唯一的查找按鈕正在做什麼? – Tim
是的,需要更新網格視圖。 –
更正:你是對的'DataBind()'是不需要的。 –