下拉列表附加到中继器将过滤的GridView [英] Dropdown list to attach to repeater that will filter gridview

查看:153
本文介绍了下拉列表附加到中继器将过滤的GridView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这帖子是类似于一个我之前在GridView约一个下拉筛选结果已经公布。现在好了,我需要这个下拉菜单自身附加到一个中继器,将筛选结果到一个gridview。我曾尝试 rptLetters.DataBind()在下拉列表后面的code,但是这似乎并没有在顶部要改变任何字母网页当我点击下拉列表中的不同的项目。

截图不显示足够的产品,但在这种情况下,它给G跳到L,并且在中继器仍显示G和L之间的字母。我需要能够得到中继认识到,开始每个选择的公司相关产品的字母。

 < ASP:内容ID =内容2ContentPlaceHolderID =身体=服务器>< BR />< BR />
< ASP:LinkBut​​ton的ID =btnAll=服务器文本=ALL的onclick =btnAll_Click/>
< ASP:直放站ID =rptLetters=服务器的DataSourceID =dsLetters>
<&HeaderTemplate中GT;
|
< / HeaderTemplate中>
<&ItemTemplate中GT;
< ASP:LinkBut​​ton的ID =btnLetter=服务器的onclick =btnLetter_Click
文字='<%#的eval(家书)%GT;' />
< / ItemTemplate中>< separatortemplate>
|
< / separatortemplate>
< / ASP:直放站>< ASP:SqlDataSource的ID =dsLetters=服务器的ConnectionString =<%$
的ConnectionStrings:ProductsConnectionString%>中
的SelectCommand =SELECT DISTINCT LEFT(产品名称,1)[信] FROM [产品]>
< / ASP:SqlDataSource的>< BR />< BR />选择公司:
< ASP:DropDownList的ID =ddlCompany=服务器的AutoPostBack =真
 OnSelectedIndexChanged =ddlCompany_SelectedIndexChanged>
    < ASP:ListItem的值=8>第三方< / ASP:ListItem的>
    < ASP:ListItem的值=4> BestDirect证券LT; / ASP:ListItem的>
    < ASP:ListItem的值=18>通用< / ASP:ListItem的>
    < ASP:ListItem的值=5> PFG precious金属< / ASP:ListItem的>
    < ASP:ListItem的值=1选择=真>美国百利< / ASP:ListItem的>
    < ASP:ListItem的值=2> SFO< / ASP:ListItem的>
    < ASP:ListItem的值=6>贸易商preSS< / ASP:ListItem的>
    < ASP:ListItem的值=3> W&安培; A出版与LT; / ASP:ListItem的>
< / ASP:DropDownList的>
< ASP:GridView控件ID =gvProducts=服务器的AutoGenerateColumns =FALSE
    的DataKeyNames =产品,CompanyID的DataSourceID =dsProductLookup
    风格=的margin-top:12px的;>
    <柱体和GT;
        < ASP:HyperLinkField字段DataNavigateUrlFields =产品
        DataNavigateUrlFormatString =产品/ Default.aspx的?ID = {0}
        DataTextField =产品名称的HeaderText =产品名称
        SORTEX pression =产品名称/>
    < /专栏>
 < / ASP:GridView的>< ASP:SqlDataSource的ID =dsProductLookup=服务器
的connectionString =<%$的ConnectionStrings:ProductsConnectionString%>中
的SelectCommand =SELECT DISTINCT Product.ProductName,Product.ProductID,Company.CompanyID
               从产品
               LEFT JOIN CompanyLink
               ON Product.ProductID = CompanyLink.ProductID
               LEFT JOIN公司
               ON CompanyLink.CompanyID = Company.CompanyID
               ORDER BY Product.ProductName>
< / ASP:SqlDataSource的>< ASP:SqlDataSource的ID =dsCompanyFilter=服务器
    的ConnectionString =下;%$的ConnectionStrings:ProductsConnectionString%>中
    的SelectCommand =SELECT [公司名称],[CompanyID]
                   FROM [公司]
                   ORDER BY公司名称>
< / ASP:SqlDataSource的>< / ASP:内容>
保护小组btnAll_Click(发送者为对象,E作为EventArgs的)
    gvProducts.DataBind()
结束小组保护小组btnLetter_Click(BYVAL发件人为对象,BYVAL E上的EventArgs)
    昏暗btnLetter作为的LinkBut​​ton = TryCast(发件人,LinkBut​​ton的)
    如果btnLetter是Nothing然后
        返回
    万一
    dsProductLookup.SelectCommand = [字符串] .Format(选择产品ID,产品名称
                                                     FROM [产品]
                                                     WHERE([产品名称] LIKE'{0}%')
                                                     ORDER BY [产品名称],
                                                     btnLetter.Text)dsProductLookup.SelectParameters.Clear()    昏暗controlParam作为ControlParameter =新ControlParameter
    controlParam.ControlID =rptLetters
    controlParam.DefaultValue =-1
    controlParam.Name =CompanyID
    controlParam.PropertyName =Container.ItemIndex
    controlParam.Type =输入code.String    dsProductLookup.SelectParameters.Add(controlParam)
结束小组保护小组ddlCompany_SelectedIndexChanged(BYVAL发件人为对象,BYVAL E上
System.EventArgs)把手ddlCompany.SelectedIndexChanged
    rptLetters.DataBind()
    SELECT语句来更新中继信
    dsLetters.SelectCommand =SELECT DISTINCT LEFT(产品名称,1)[信]
                               从产品,CompanyLink,公司
                               WHERE Product.ProductID = CompanyLink.ProductID
                               和CompanyLink.CompanyID = Company.CompanyID
                               和Company.CompanyID = @CompanyID    dsLetters.SelectParameters.Clear()
    声明标量@CompanyID
    昏暗的CP作为ControlParameter =新ControlParameter
    cp.ControlID =rptLetters
    cp.DefaultValue =-1
    cp.Name =CompanyID
    cp.PropertyName =的SelectedValue
    cp.Type =输入code.Int32    dsLetters.SelectParameters.Add(CP)
    基于下拉列表中SELECT语句更新的GridView
    dsProductLookup.SelectCommand =SELECT Company.CompanyName,Company.CompanyID,
                                     Product.ProductName,Product.ProductID
                                     从公司INNER JOIN CompanyLink
                                     ON Company.CompanyID = CompanyLink.CompanyID
                                     INNER JOIN产品
                                     ON CompanyLink.ProductID = Product.ProductID
                                     WHERE Company.CompanyID = @CompanyID
                                     ORDER BY Product.ProductName    dsProductLookup.SelectParameters.Clear()
    声明标量@CompanyName
    昏暗controlParam作为ControlParameter =新ControlParameter
    controlParam.ControlID =ddlCompany
    controlParam.DefaultValue =-1
    controlParam.Name =CompanyID
    controlParam.PropertyName =的SelectedValue
    controlParam.Type =输入code.Int32    dsProductLookup.SelectParameters.Add(controlParam)结束小组

更新:工作code贴在下面。中继器不工作就像一个普通的控制,所以我加入了一个隐藏下拉列表做了中继肮脏的工作。感谢您的帮助!

 < ASP:DropDownList的ID =ddlLetters=服务器可见=假的DataSourceID =dsLetters>
< / ASP:DropDownList的>
 保护小组ddlLetters_SelectedIndexChanged(BYVAL发件人为对象,BYVAL E上System.EventArgs)
    rptLetters.DataBind()    SELECT语句来更新中继信
    dsLetters.SelectCommand =SELECT DISTINCT LEFT(产品名称,1)[信]
                              从产品,CompanyLink,公司
                              WHERE Product.ProductID = CompanyLink.ProductID
                              和CompanyLink.CompanyID = Company.CompanyID
                              和Company.CompanyID = @CompanyID    声明标量@CompanyID
    dsLetters.SelectParameters.Clear()
    昏暗的CP作为ControlParameter =新ControlParameter
    cp.ControlID =rptLetters
    cp.DefaultValue =-1
    cp.Name =CompanyID
    cp.PropertyName =的ClientIDMode
    cp.Type =输入code.Decimal
    dsLetters.SelectParameters.Add(CP)
结束小组


解决方案

我相信这个问题是的SelectCommand当用户选择一个新的公司,你不更新dsLetters。眼下,它选择的所有产品没有考虑所选择的公司考虑。您应该能够修改ddlCompany_SelectedIndexChanged选择命令。

This post is similar to one I have posted before about a dropdown filtering results in a gridview. Well now I need this dropdown to attach itself to a repeater that will filter results into a gridview. I have tried rptLetters.DataBind() in the code behind of the dropdown list, but that doesn't seem to be changing any of the letters at the top of the page when I click on different items in the dropdown list.

The screenshot doesn't show enough of the products, but in this case it skips from G to L, and in the repeater the letters between G and L are still shown. I need to be able to get that repeater to recognize the letters that start each of the products associated with the company chosen.

<asp:Content ID="Content2" ContentPlaceHolderID="body" Runat="Server"><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>

<br /><br />Choose Company: 
<asp:DropDownList ID="ddlCompany" runat="server" AutoPostBack="true" 
 OnSelectedIndexChanged="ddlCompany_SelectedIndexChanged">
    <asp:ListItem Value="8">3rd Party</asp:ListItem>
    <asp:ListItem Value="4">BestDirect Securities</asp:ListItem>
    <asp:ListItem Value="18">Generic</asp:ListItem>
    <asp:ListItem Value="5">PFG Precious Metals</asp:ListItem>
    <asp:ListItem Value="1" Selected="True">PFGBest</asp:ListItem>
    <asp:ListItem Value="2">SFO</asp:ListItem>
    <asp:ListItem Value="6">Traders Press</asp:ListItem>
    <asp:ListItem Value="3">W&A Publishing</asp:ListItem>
</asp:DropDownList>
<asp:gridview id="gvProducts" runat="server" AutoGenerateColumns="False" 
    datakeynames="ProductID,CompanyID"  datasourceid="dsProductLookup" 
    style="margin-top: 12px;">
    <Columns>
        <asp:HyperLinkField DataNavigateUrlFields="ProductID" 
        DataNavigateUrlFormatString="Product/Default.aspx?ID={0}"
        DataTextField="ProductName" HeaderText="Product Name"
        SortExpression="ProductName" />
    </Columns>
 </asp:gridview>

<asp:sqldatasource id="dsProductLookup" runat="server" 
Connectionstring="<%$ ConnectionStrings:ProductsConnectionString %>"
SelectCommand="SELECT DISTINCT Product.ProductName, Product.ProductID, Company.CompanyID 
               FROM Product 
               LEFT JOIN CompanyLink 
               ON Product.ProductID = CompanyLink.ProductID 
               LEFT JOIN Company 
               ON CompanyLink.CompanyID = Company.CompanyID 
               ORDER BY Product.ProductName">
</asp:sqldatasource>

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

</asp:Content>


Protected Sub btnAll_Click(sender As Object, e As EventArgs)
    gvProducts.DataBind()
End Sub

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)

dsProductLookup.SelectParameters.Clear()

    Dim controlParam As ControlParameter = New ControlParameter
    controlParam.ControlID = "rptLetters"
    controlParam.DefaultValue = "-1"
    controlParam.Name = "CompanyID"
    controlParam.PropertyName = "Container.ItemIndex"
    controlParam.Type = TypeCode.String

    dsProductLookup.SelectParameters.Add(controlParam)
End Sub



Protected Sub ddlCompany_SelectedIndexChanged(ByVal sender As Object, ByVal e As 
System.EventArgs) Handles ddlCompany.SelectedIndexChanged
    rptLetters.DataBind()
    'SELECT statement to update letter repeater
    dsLetters.SelectCommand = "SELECT DISTINCT LEFT(ProductName, 1) AS [Letter] 
                               FROM Product, CompanyLink, Company 
                               WHERE Product.ProductID = CompanyLink.ProductID 
                               AND CompanyLink.CompanyID = Company.CompanyID 
                               AND Company.CompanyID = @CompanyID"

    dsLetters.SelectParameters.Clear()
    'declaring scalar variable @CompanyID
    Dim cp As ControlParameter = New ControlParameter
    cp.ControlID = "rptLetters"
    cp.DefaultValue = "-1"
    cp.Name = "CompanyID"
    cp.PropertyName = "SelectedValue"
    cp.Type = TypeCode.Int32

    dsLetters.SelectParameters.Add(cp)
    'SELECT statement to update Gridview based on dropdown list
    dsProductLookup.SelectCommand = "SELECT Company.CompanyName, Company.CompanyID,   
                                     Product.ProductName, Product.ProductID 
                                     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()
    'declaring scalar variable @CompanyName
    Dim controlParam As ControlParameter = New ControlParameter
    controlParam.ControlID = "ddlCompany"
    controlParam.DefaultValue = "-1"
    controlParam.Name = "CompanyID"
    controlParam.PropertyName = "SelectedValue"
    controlParam.Type = TypeCode.Int32

    dsProductLookup.SelectParameters.Add(controlParam)

End Sub

UPDATE: Working code posted below. The repeater doesn't work like a regular control so I added a hidden dropdown list to do the dirty work for the repeater. Thanks for the help!

<asp:DropDownList ID="ddlLetters" runat="server" Visible="False"   DataSourceID="dsLetters">
</asp:DropDownList>
 Protected Sub ddlLetters_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
    rptLetters.DataBind()

    'SELECT statement to update letter repeater
    dsLetters.SelectCommand = "SELECT DISTINCT LEFT(ProductName, 1) AS [Letter] 
                              FROM Product, CompanyLink, Company 
                              WHERE Product.ProductID = CompanyLink.ProductID 
                              AND CompanyLink.CompanyID = Company.CompanyID 
                              AND Company.CompanyID = @CompanyID"

    'declaring scalar variable @CompanyID
    dsLetters.SelectParameters.Clear()
    Dim cp As ControlParameter = New ControlParameter
    cp.ControlID = "rptLetters"
    cp.DefaultValue = "-1"
    cp.Name = "CompanyID"
    cp.PropertyName = "ClientIDMode"
    cp.Type = TypeCode.Decimal
    dsLetters.SelectParameters.Add(cp)
End Sub

解决方案

I believe the issue is that you are not updating the dsLetters SelectCommand when the user selects a new company. Right now, it selects all products without taking the selected company into account. You should be able to modify the select command in ddlCompany_SelectedIndexChanged.

这篇关于下拉列表附加到中继器将过滤的GridView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆