我希望我的gridview可以通过我的下拉列表进行过滤。它从数据库中提取特定信息,因此当您从下拉列表中选择一个值时,它应搜索所有记录并仅查找其中包含ddl值的记录。
我在SelectedIndexChanged的代码隐藏中使用的代码不正确。我收到一条错误消息,提到'Value' is not a member of 'Integer'.
这是dsCompanyFilter.SelectParameters.Add
它可能与gridview没有正确绑定到下拉列表有关,但我不知道如何修复该代码。请帮忙!
<asp:Content ID="Content2" ContentPlaceHolderID="body" Runat="Server"><br /><br /><br />
<asp:linkbutton id="btnAll" runat="server" text="ALL" onclick="btnAll_Click" />
<asp:repeater id="rptLetters" runat="server" datasourceid="dsLetters">
<headertemplate>
|
</headertemplate>
<itemtemplate>
<asp:linkbutton id="btnLetter" runat="server" onclick="btnLetter_Click"
text='<%#Eval("Letter")%>' />
</itemtemplate>
<separatortemplate>
|
</separatortemplate>
</asp:repeater>
<asp:sqldatasource id="dsLetters" runat="server" connectionstring="<%$
ConnectionStrings:ProductsConnectionString %>"
selectcommand="SELECT DISTINCT LEFT(ProductName, 1) AS [Letter] FROM [Product]">
</asp:sqldatasource>
Filter By Company:<asp:DropDownList ID="ddlCompany" runat="server"
DataSourceID="dsCompanyFilter" DataTextField="CompanyName" DataValueField="CompanyID">
</asp:DropDownList>
<asp:gridview id="gvProducts" runat="server" AutoGenerateColumns="False"
datakeynames="ProductID" datasourceid="dsProductLookup"
style="margin-top: 12px;">
<Columns>
<asp:BoundField DataField="ProductName" HeaderText="ProductName"
SortExpression="ProductName" />
</Columns>
</asp:gridview>
<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]">
</asp:SqlDataSource>
</asp:Content>
此代码按字母和下拉列表过滤gridview中的结果。问题在于过滤网格视图的下拉列表。
Protected Sub btnLetter_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim btnLetter As LinkButton = TryCast(sender, LinkButton)
If btnLetter Is Nothing Then
Return
End If
dsProductLookup.SelectCommand = [String].Format("SELECT ProductID, ProductName
FROM [Product]
WHERE ([ProductName] LIKE '{0}%')
ORDER BY [ProductName]", btnLetter.Text)
End Sub
这是有问题的部分。我现在得到错误,必须声明标量变量@CompanyID
Protected Sub ddlCompany_SelectedIndexChanged(ByVal sender As Object, ByVal e As
System.EventArgs) Handles ddlCompany.SelectedIndexChanged
dsProductLookup.SelectCommand = "SELECT ProductName, CompanyID, CompanyName
FROM Product, Company
WHERE CompanyID = @CompanyID
ORDER BY ProductName"
dsProductLookup.SelectParameters.Add("@CompanyID", DbType.Int32,
ddlCompany.SelectedValue)
End Sub
答案 0 :(得分:0)
删除了我之前的回答。
实际尝试以下方法:
dsProductLookup.SelectParameters.Add("@ProductID",
DbType.Int32, ddlCompany.SelectedValue)
没有赋值给它,因为它是Add
的一部分。当我尝试编译我之前的答案的测试时,注意到这一点。
编辑:我尝试了上面的代码并且它有效(在C#中做过)但是将其更改为使用DbType.Int32
作为第二个参数。
答案 1 :(得分:0)
我在这里猜测 - 我不使用SqlDataSource
s - 但看起来SelectParameters.Add
需要三个参数。改变这种情况会发生什么:
dsProductLookup.SelectParameters.Add("@ProductID", SqlDbType.Int).Value = ddlCompany.SelectedValue
到此:
dsProductLookup.SelectParameters.Add("@ProductID", DbType.Int32, ddlCompany.SelectedValue)
或者这个:
dsProductLookup.SelectParameters.Add("@ProductID", TypeCode.Int32, ddlCompany.SelectedValue)
答案 2 :(得分:0)
dsProductLookup.SelectParameters.Add("@ProductID", SqlDbType.Int).Value
在我看来,.Add()方法返回一个int,其中.Value不是属性。
确认它以确保:
这是来自MSDN:应该有所帮助。