Раскрывающийся список для фильтрации вида сетки - PullRequest
0 голосов
/ 21 октября 2011

Я бы хотел, чтобы мой сеточный вид был отфильтрован по выпадающему списку, который у меня есть.Он извлекает конкретную информацию из базы данных, поэтому, когда вы выбираете значение из выпадающего списка, он должен искать во всех записях и находить только записи со значением 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>

Этот код фильтрует результаты в сетке по буквам и выпадающим спискам.Проблема заключается в том, что выпадающий список фильтрует вид сетки.

 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

Ответы [ 3 ]

0 голосов
/ 21 октября 2011

Я предполагаю здесь - я не использую SqlDataSource с - но похоже, что 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)
0 голосов
/ 21 октября 2011
dsProductLookup.SelectParameters.Add("@ProductID", SqlDbType.Int).Value

Мне кажется, что метод .Add () возвращает int, для которого .Value не является свойством.

Подтвердил, чтобы убедиться: enter image description here

Это из MSDN: должно помочь.

http://msdn.microsoft.com/en-us/library/w1kdt8w2.aspx

0 голосов
/ 21 октября 2011

Удален мой предыдущий ответ.

На самом деле попробуйте следующее:

dsProductLookup.SelectParameters.Add("@ProductID",
    DbType.Int32, ddlCompany.SelectedValue)

Нет присвоения значению, поскольку оно является частью Add. Заметил это, когда попытался скомпилировать тест моего предыдущего ответа, который не сработал.

EDIT : я попробовал приведенный выше код, и он работал (сделал это в C #), но изменил его, чтобы использовать DbType.Int32 для второго параметра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...