2011-10-21 24 views
0

私はしばらくコードをデバッグしていましたが、他のフォーラムの投稿を見ていますが、誰もが私とは違う問題を抱えているようです。私。スカラー変数vb.netを宣言しなければならない

ドロップダウンリストは、特定の製品に関連付けられているすべての会社を選択して、グリッドビューをフィルタリングすることになっています。私がオンラインで見つけた解決策は、ほとんどの人が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> 

UPDATE:私は私のサイト内の別のページにこれを追加しようとしたと同じ宣言エラーを持っています。 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を追加することから落胆べきではありません上記の問題を解決する必要があり、そうでない場合を考えます。 dsProductLookupのselect文に列としてCompanyIDを含めることを忘れないでください。

EDIT

私は前の回答でパラメータ名を省略ように見えます。代わりに、このような何かを試してみてください:

<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

この2つの違いは何ですか?受信したエラーは何ですか? –

関連する問題