下拉列表附加到中继器将过滤的GridView [英] Dropdown list to attach to repeater that will filter gridview
问题描述
这帖子是类似于一个我之前在GridView约一个下拉筛选结果已经公布。现在好了,我需要这个下拉菜单自身附加到一个中继器,将筛选结果到一个gridview。我曾尝试 rptLetters.DataBind()
在下拉列表后面的code,但是这似乎并没有在顶部要改变任何字母网页当我点击下拉列表中的不同的项目。
截图不显示足够的产品,但在这种情况下,它给G跳到L,并且在中继器仍显示G和L之间的字母。我需要能够得到中继认识到,开始每个选择的公司相关产品的字母。
< ASP:内容ID =内容2ContentPlaceHolderID =身体=服务器>< BR />< BR />
< ASP:LinkButton的ID =btnAll=服务器文本=ALL的onclick =btnAll_Click/>
< ASP:直放站ID =rptLetters=服务器的DataSourceID =dsLetters>
<&HeaderTemplate中GT;
|
< / HeaderTemplate中>
<&ItemTemplate中GT;
< ASP:LinkButton的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作为的LinkButton = TryCast(发件人,LinkButton的)
如果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屋!