2011-10-21 56 views
0

我一直在調試我的代碼了一會兒,看着在其他論壇上的帖子,但它似乎是每個人都有比我一個不同的問題,什麼工作他們不會爲工作我。必須聲明標量變量,vb.net

我的下拉列表中應該通過選擇關聯到某一個產品的所有公司來過濾一個gridview。我在網上找到的解決方案是,大多數人沒有在其gridview中設置DataKeyNames。

我有這一套,但不CompanyID。這沒有任何意義。所以我不知道我應該做什麼,因爲這是我發現的唯一答案。

<asp:DropDownList ID="ddlCompany" runat="server" DataSourceID="dsCompanyFilter" 
DataTextField="CompanyName" DataValueField="CompanyID" AppendDataBoundItems="true" 
AutoPostBack="true"> 

Protected Sub ddlCompany_SelectedIndexChanged(ByVal sender As Object, ByVal e As 
System.EventArgs) Handles ddlCompany.SelectedIndexChanged 
    Dim CompanyID As Integer = ddlCompany.SelectedValue 
    dsProductLookup.SelectCommand = "SELECT ProductName, CompanyID, CompanyName 
            FROM Product, Company 
            WHERE CompanyID = @CompanyID 
            ORDER BY ProductName" 
    dsProductLookup.SelectParameters.Add("@CompanyID", ddlCompany.SelectedValue) 
End Sub 

<asp:gridview id="gvProducts" runat="server" AutoGenerateColumns="false" 
datakeynames="ProductID" datasourceid="dsProductLookup" style="margin-top: 12px;"> 

<asp:sqldatasource id="dsProductLookup" runat="server" 
Connectionstring="<%$ ConnectionStrings:ProductsConnectionString %>" 
SelectCommand="SELECT ProductID, ProductName FROM [Product] ORDER BY [ProductName]"> 
</asp:sqldatasource> 

<asp:SqlDataSource ID="dsCompanyFilter" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ProductsConnectionString %>" 
    SelectCommand="SELECT [CompanyName], [CompanyID] FROM [Company] ORDER BY CompanyName"> 
</asp:SqlDataSource> 

更新:我嘗試添加這在我的網站其他頁面,並具有相同的宣言錯誤。 Must declare the scalar variable "@CompanyID".

Choose Company: <asp:DropDownList ID="ddlCompany" runat="server" DataSourceID="dsCompanyFilter" DataTextField="CompanyName" DataValueField="CompanyID" AppendDataBoundItems="true" AutoPostBack="true"> 
<asp:ListItem Enabled="true" Text="Select an option"></asp:ListItem> 
</asp:DropDownList> 


<asp:gridview id="gvCategories" runat="server" AutoGenerateColumns="False" 
datakeynames="CategoryID,CompanyID" datasourceid="dsCategoryLookup" emptydatatext="No 
categories/products found." style="margin-top: 12px;"> 
<Columns> 
    <asp:BoundField HeaderText="Category Name" DataField="CategoryName" /> 
    <asp:HyperLinkField DataNavigateUrlFields="ProductID" 
    DataNavigateUrlFormatString="Product/Default.aspx?ID={0}" 
    DataTextField="ProductName" 
    HeaderText="Product Name" /> 
</Columns> 
</asp:gridview> 

<asp:SqlDataSource ID="dsCategoryLookup" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ProductsConnectionString %>" 
    SelectCommand="SELECT DISTINCT c.CategoryName, c.CategoryID, p.ProductName, 
        p.ProductID, cl.CompanyID, cl.ProductID, co.CompanyID 
        FROM Category AS c 
        INNER JOIN CategoryLink AS l ON l.CategoryID = c.CategoryID 
        INNER JOIN Product AS p ON p.ProductID = l.ProductID 
        LEFT JOIN CompanyLink AS cl ON cl.ProductID = p.ProductID"> 
</asp:SqlDataSource> 
<asp:SqlDataSource ID="dsCompanyFilter" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ProductsConnectionString %>" 
    SelectCommand="SELECT [CompanyName], [CompanyID] 
        FROM [Company] 
        ORDER BY CompanyName"> 
</asp:SqlDataSource> 



Protected Sub ddlCompany_SelectedIndexChanged(ByVal sender As Object, ByVal e As 
System.EventArgs) Handles ddlCompany.SelectedIndexChanged 
    dsCategoryLookup.SelectCommand = "SELECT Category.CategoryName, 
            CategoryLink.ProductID, Company.CompanyName, 
            Company.CompanyID, CompanyLink.CompanyID AS Expr1, 
            Product.ProductName, Product.ProductID, 
            CompanyLink.ProductID AS Expr2 
            FROM Company 
            LEFT JOIN CompanyLink 
            ON Company.CompanyID = CompanyLink.CompanyID 
            LEFT JOIN Product 
            ON CompanyLink.ProductID = Product.ProductID 
            LEFT JOIN CategoryLink 
            ON CategoryLink.ProductID = Product.ProductID 
            LEFT JOIN Category 
            ON CategoryLink.CategoryID = Category.CategoryID 
            WHERE Company.CompanyID = @CompanyID 
            ORDER BY Product.ProductName" 

回答

0

我能在ASP.net論壇上找到與我的網站合作的答案。 (到目前爲止...)

Protected Sub ddlCompany_SelectedIndexChanged(ByVal sender As Object, ByVal e As 
System.EventArgs) Handles ddlCompany.SelectedIndexChanged 
    dsProductLookup.SelectCommand = "SELECT Company.CompanyName, Company.CompanyID, 
            CompanyLink.CompanyID AS Expr1, 
            Product.ProductName, Product.ProductID, 
            CompanyLink.ProductID AS Expr2 
            FROM Company 
            INNER JOIN CompanyLink ON Company.CompanyID = CompanyLink.CompanyID 
            INNER JOIN Product ON CompanyLink.ProductID =        Product.ProductID 
            WHERE Company.CompanyID = @CompanyID 
            ORDER BY Product.ProductName" 

dsProductLookup.SelectParameters.Clear() 

    Dim controlParam As ControlParameter = New ControlParameter 
    controlParam.ControlID = "ddlCompany" 
    controlParam.DefaultValue = "-1" 
    controlParam.Name = "CompanyID" 
    controlParam.PropertyName = "SelectedValue" 
    controlParam.Type = TypeCode.Decimal 

    dsProductLookup.SelectParameters.Add(controlParam) 
End Sub 
0

而不是設置在代碼後面的參數的,在標記爲數據源控制添加ControlParameter

<SelectParameters> 
    <asp:ControlParameter ControlID="ddlCompany" PropertyName="SelectedValue" DbType="Int32" DefaultValue="0" /> 
</SelectParameters> 

鑑於你的描述,我覺得上面的應該解決您的問題,但如果沒有你不應該感到添加CompanyID作爲關鍵氣餒。不過,別忘了包括CompanyID如在dsProductLookup select語句的列。

編輯

它看起來像我以前的答案省略該參數名稱。嘗試這樣的事情,而不是:

<SelectParameters> 
    <asp:ControlParameter Name="CompanyID" ControlID="ddlCompany" PropertyName="SelectedValue" Type="Int32" DefaultValue="0" /> 
</SelectParameters> 

就像我說的,我不使用數據源控件,所以我不知道,如果你有@或沒有前綴參數名稱,但如果這樣做:

<SelectParameters> 
    <asp:ControlParameter Name="@CompanyID" ControlID="ddlCompany" PropertyName="SelectedValue" Type="Int32" DefaultValue="0" /> 
</SelectParameters> 
+0

我想補充說的dsCompanyFilter數據源,我得到了一個錯誤說'輸入字符串的不正確的format.' – jlg

+0

我加入了我的另一頁上一個下拉列表並再次出現Scalar問題,但是這次我將CompanyID添加爲數據鍵並在Select語句中包含了CompanyID。我嘗試使用SelectParameters代碼,但它給出了與上面相同的錯誤。輸入字符串....我不想開始一個新線程,因爲它或多或少都是相同的錯誤。你能幫我嗎? – jlg

+0

這兩者之間有什麼不同,以及您收到的錯誤是什麼? –