带有两个下拉菜单的griview [英] griview with two dropdowns for filtering

查看:67
本文介绍了带有两个下拉菜单的griview的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

< pre lang ="xml">我是一个非常新的人,并且找到了在e网格上进行过滤的解决方案,但是我该如何处理Vb代码以适应工业过滤器.

这是我的ASP当前代码
& lt; asp:GridView ID =& quot; GridView2& quot; runat =& quot;服务器& quot;
AutoGenerateColumns =&假& amp;". CellPadding =&"4". DataSourceID =& quot; SqlDataSource2& quot;
ForeColor =& quot;#333333& quot; GridLines =&无" DataKeyNames =&"Permit_No& quot;
宽度=&"798px&"& gt;
& lt; RowStyle BackColor =& quot; lightgrey& quot; ForeColor =& quot;#333333& quot; /& gt;
& lt;列& gt;

& lt; asp:BoundField DataField =&"Permit_No&" HeaderText =&"Permit_No&" SortExpression =&"Permit_No&" /& gt;
& lt; asp:HyperLinkField runat =& quot;服务器& quot; DataTextField =& quot;名称& quot; DataNavigateUrlFields =& quot;许可证编号,名称,邮政,街道,电话,传真,信元,网站地址,"
DataNavigateUrlFormatString =& quot; Default2.aspx?ID = {0}& amp; Name = {1}& amp; Pos = {2}& amp; Physical = {3}& amp; Phone = {4 }& amp; PhoneFax = {5}& amp; CellPhone = {6}& amp; Web = {7}" HeaderText =& quot;名称& quot; /& gt;

& lt; asp:BoundField DataField =& quot; Spec_No& quot; HeaderText =& quot; Spec_No& quot;
SortExpression =& quot; Spec_No& quot; /& gt;
& lt; asp:BoundField DataField =&"Tel&" HeaderText =&电话&" SortExpression =&电话&" /& gt;

& lt; asp:TemplateField HeaderText =&"Region& quot; SortExpression =&"Region& gt;"
& lt; HeaderTemplate& gt;
地区
& lt; asp:DropDownList ID =& quot; ddRegion& quot;
DataTextField =& quot; Region& quot;
AutoPostBack =& quot; true& quot;
OnSelectedIndexChanged =& quot; FilterDropDown_IndexChanged& quot;
OnPreRender =& quot; SetValue& quot;
DataSourceID =& quot; RegionDataSource& quot; runat =& quot;服务器& quot;/& gt;
& lt;/HeaderTemplate& gt;
& lt; EditItemTemplate& gt;
& lt; asp:TextBox ID =& quot; TextBox1& quot; runat =&服务器" Text =&#39;& lt;%#Bind(& quot; Region& quot;)%& gt;&#39; amp;</asp:TextBox& gt;
& lt;/EditItemTemplate& gt;
& lt; ItemTemplate& gt;
< asp:Label ID =& quot; Label1& quot; runat =&服务器" Text =&#39;& lt;%#Bind(& quot; Region& quot;)%& gt;&#39; amp; lt;/asp:Label& gt;
& lt;/ItemTemplate& gt;
& lt;/asp:TemplateField& gt;



& lt; asp:TemplateField HeaderText =& quot;行业" SortExpression =& quot;行业"& gt;
& lt; HeaderTemplate& gt;
行业
& lt; asp:DropDownList ID =& quot; ddIndustry& quot;
DataTextField =& quot;行业"
AutoPostBack =& quot; true& quot;
OnSelectedIndexChanged =& quot; FilterDropDown_IndexChanged& quot;
OnPreRender =& quot; SetValue& quot;
DataSourceID =" IndustryDataSource& quot; runat =& quot;服务器& quot;/& gt;
& lt;/HeaderTemplate& gt;
& lt; EditItemTemplate& gt;
& lt; asp:TextBox ID =& quot; TextBox1& quot; runat =&服务器" Text =&#39;& lt;%#Bind(& Industry& gt;</asp:TextBox& gt;
& lt;/EditItemTemplate& gt;
& lt; ItemTemplate& gt;
< asp:Label ID =& quot; Label1& quot; runat =&服务器" Text ='& lt;%#Bind(& Industry")%& gt;&#39;& lt;/asp:Label& gt;
& lt;/ItemTemplate& gt;
& lt;/asp:TemplateField& gt;







& lt; asp:BoundField DataField ="行业" HeaderText =& quot;行业"
SortExpression =&行业" /& gt;
& lt; asp:HyperLinkField/& gt;
& lt;/列& gt;
& lt; FooterStyle BackColor =& quot;#990000& quot; Font-Bold =& quot; True& quot; ForeColor =&白色". /& gt;
& lt; PagerStyle BackColor =& quot;红色& quot; ForeColor =& quot;#333333& quot; Horizo​​ntalAlign =&"Center&" /& gt;
& lt; SelectedRowStyle BackColor =& quot;#FFCC66& quot; Font-Bold =& quot; True& quot; ForeColor =&海军"& /& gt;
& lt; HeaderStyle BackColor =& quot;红色& quot; Font-Bold =& quot; True& quot; ForeColor =&白色". /& gt;
& lt; AlternatingRowStyle BackColor =&"White& quot; /& gt;
& lt;/asp:GridView& gt;


VB& lt; NET代码
受保护的子Button1_Click(ByVal发送者作为对象,ByVal e作为System.EventArgs)处理Button1.Click
如果SearchList.SelectedItem.Value =&"1& quot;然后

GridView1.Visible = True
GridView2.Visible = False
GridView3.Visible = False
GridView4.Visible = False
ElseIf SearchList.SelectedItem.Value =&"2& quot;然后
GridView1.Visible = False
GridView2.Visible = True
GridView3.Visible = False
GridView4.Visible = False
ElseIf SearchList.SelectedItem.Value =&"3& quot;然后
GridView1.Visible = False
GridView2.Visible = False
GridView3.Visible = True
GridView4.Visible = False
ElseIf SearchList.SelectedItem.Value =& quot; 4& quot;然后
GridView1.Visible = False
GridView2.Visible = False
GridView3.Visible = False
GridView4.Visible = True

如果结束

结束子
专用过滤器作为新的哈希表

受保护的子Page_Load(将ByByVal发送者作为对象,将ByVal e作为EventArgs)处理Me.Load
&#39; searchTextBox.Text =&& quot;
filter = If(ViewState(& quot; FilterArgs& quot;)一无所有,New Hashtable(),DirectCast(ViewState(& FilterFilters& quot;),Hashtable))
结束子
受保护的子FilterDropDown_IndexChanged(ByVal发送者为对象,ByVal e为EventArgs)
Dim dd As DropDownList = DirectCast(sender,DropDownList)
Dim ddIndustry = DirectCast(sender,DropDownList)

如果是dd.SelectedItem.Text& lt;& gt; &所有区域"然后

如果filter.ContainsKey(& quot; Region& quot;)然后
filter(& quot; Region& quot;)=& quot; =&#39;& quot; & amp; dd.SelectedItem.Text& amp; & quot;&#39;& quot;
其他
filter.Add(& quot; Region& quot;& quot;&#39;& amp; quot;& amp; dd.SelectedItem.Text& amp;& quot;&#39;& amp; amp; quot; ; quot;)
如果结束
其他
filter.Remove(&"Region&")
如果结束

如果是dd.SelectedItem.Text& lt;& gt; &所有行业"然后

如果filter.ContainsKey(& quot; Industry& quot;)然后
filter(& quot; Industry&")=& quot; =&#39;& quot; & amp; ddIndustry.SelectedItem.Text& amp; & quot;&#39;& quot;
其他
过滤器. ; quot;)
如果结束
其他
filter.Remove(&"Industry&")
如果结束
ApplyGridFilter()
GridView2.PageIndex = 0

结束子

受保护的子ApplyGridFilter()
Dim args As String =&; & quot;
Dim i As Integer = 0
对于每个键作为对象在filter.Keys
如果i = 0,那么
args = key.ToString()+ filter(key).ToString()
其他
args + =(&& amp; amp; amp; amp; amp; key.ToString())+ filter(key).ToString()
如果结束
我+ = 1
下一个
SqlDataSource2.FilterExpression = args
&#39;过滤器需要在回发之间保存
ViewState.Add(& quot; FilterArgs& quot;过滤器)
结束子

受保护的子SetValue(ByVal发送者作为对象,ByVal e作为EventArgs)
Dim ddl作为DropDownList = DirectCast(sender,DropDownList)
Dim ddlIndustry As DropDownList = DirectCast(sender,DropDownList)

如果过滤器什么都不是,那么
如果filter.ContainsKey(& quot; Region& quot;)然后
对于ddl.Items中的每个li作为ListItem
如果li.Text = filter(& quot; Region& quot;).ToString().Substring(2,filter(& amp; Region& Region& quot;).ToString().Length-3)然后
li.Selected = True
退出子
如果结束

下一个
如果结束
其他
如果filter.ContainsKey(& quot; Industry& quot;)然后
对于ddl.Items中的每个li作为ListItem
如果li.Text = filter(& quot; Industry& quot;).ToString().Substring(2,filter(& Industry& Industry& quot;).ToString().Length-3)然后
li.Selected = True
退出子
如果结束

下一个
如果结束


如果结束
结束子
受保护的子GridView2_PageIndexChanged(ByVal发送者作为对象,ByVal e作为EventArgs)
ApplyGridFilter()
结束子
&#39;受保护的子btnRemoveFilter_Click(ByVal发送者为对象,ByVal e为EventArgs)
&#39; &#39; ViewState.Remove(& quot; FilterArgs& quot;);
&#39; filter.Clear()

&#39; ApplyGridFilter()
&#39; End Sub
请协助我在没有成功的情况下尝试

<pre lang="xml">Im very new and have found a solution which filter with on e grid but how do I manaipulate the Vb code to accomodate anothe industry filter.

here&#39;s my ASP current code
&lt;asp:GridView ID=&quot;GridView2&quot; runat=&quot;server&quot;
AutoGenerateColumns=&quot;False&quot; CellPadding=&quot;4&quot; DataSourceID=&quot;SqlDataSource2&quot;
ForeColor=&quot;#333333&quot; GridLines=&quot;None&quot; DataKeyNames=&quot;Permit_No&quot;
Width=&quot;798px&quot;&gt;
&lt;RowStyle BackColor=&quot;lightgrey&quot; ForeColor=&quot;#333333&quot; /&gt;
&lt;Columns&gt;

&lt;asp:BoundField DataField=&quot;Permit_No&quot; HeaderText=&quot;Permit_No&quot; SortExpression=&quot;Permit_No&quot; /&gt;
&lt;asp:HyperLinkField runat=&quot;server&quot; DataTextField=&quot;Name&quot; DataNavigateUrlFields=&quot;Permit_No,Name,Postal,Street,Tel,Fax,Cell,Website_Address,&quot;
DataNavigateUrlFormatString=&quot;Default2.aspx?ID={0}&amp;Name={1}&amp;Pos={2}&amp;Physical={3}&amp;Phone={4}&amp;PhoneFax={5}&amp;CellPhone={6}&amp;Web={7}&quot; HeaderText=&quot;Name&quot; /&gt;

&lt;asp:BoundField DataField=&quot;Spec_No&quot; HeaderText=&quot;Spec_No&quot;
SortExpression=&quot;Spec_No&quot; /&gt;
&lt;asp:BoundField DataField=&quot;Tel&quot; HeaderText=&quot;Tel&quot; SortExpression=&quot;Tel&quot; /&gt;

&lt;asp:TemplateField HeaderText=&quot;Region&quot; SortExpression=&quot;Region&quot;&gt;
&lt;HeaderTemplate&gt;
Region
&lt;asp:DropDownList ID=&quot;ddRegion&quot;
DataTextField=&quot;Region&quot;
AutoPostBack=&quot;true&quot;
OnSelectedIndexChanged=&quot;FilterDropDown_IndexChanged&quot;
OnPreRender=&quot;SetValue&quot;
DataSourceID=&quot;RegionDataSource&quot; runat=&quot;server&quot;/&gt;
&lt;/HeaderTemplate&gt;
&lt;EditItemTemplate&gt;
&lt;asp:TextBox ID=&quot;TextBox1&quot; runat=&quot;server&quot; Text=&#39;&lt;%# Bind(&quot;Region&quot;) %&gt;&#39;&gt;&lt;/asp:TextBox&gt;
&lt;/EditItemTemplate&gt;
&lt;ItemTemplate&gt;
&lt;asp:Label ID=&quot;Label1&quot; runat=&quot;server&quot; Text=&#39;&lt;%# Bind(&quot;Region&quot;) %&gt;&#39;&gt;&lt;/asp:Label&gt;
&lt;/ItemTemplate&gt;
&lt;/asp:TemplateField&gt;



&lt;asp:TemplateField HeaderText=&quot;Industry&quot; SortExpression=&quot;Industry&quot;&gt;
&lt;HeaderTemplate&gt;
Industry
&lt;asp:DropDownList ID=&quot;ddIndustry&quot;
DataTextField=&quot;Industry&quot;
AutoPostBack=&quot;true&quot;
OnSelectedIndexChanged=&quot;FilterDropDown_IndexChanged&quot;
OnPreRender=&quot;SetValue&quot;
DataSourceID=&quot;IndustryDataSource&quot; runat=&quot;server&quot;/&gt;
&lt;/HeaderTemplate&gt;
&lt;EditItemTemplate&gt;
&lt;asp:TextBox ID=&quot;TextBox1&quot; runat=&quot;server&quot; Text=&#39;&lt;%# Bind(&quot;Industry&quot;) %&gt;&#39;&gt;&lt;/asp:TextBox&gt;
&lt;/EditItemTemplate&gt;
&lt;ItemTemplate&gt;
&lt;asp:Label ID=&quot;Label1&quot; runat=&quot;server&quot; Text=&#39;&lt;%# Bind(&quot;Industry&quot;) %&gt;&#39;&gt;&lt;/asp:Label&gt;
&lt;/ItemTemplate&gt;
&lt;/asp:TemplateField&gt;







&lt;asp:BoundField DataField=&quot;Industry&quot; HeaderText=&quot;Industry&quot;
SortExpression=&quot;Industry&quot; /&gt;
&lt;asp:HyperLinkField /&gt;
&lt;/Columns&gt;
&lt;FooterStyle BackColor=&quot;#990000&quot; Font-Bold=&quot;True&quot; ForeColor=&quot;White&quot; /&gt;
&lt;PagerStyle BackColor=&quot;red&quot; ForeColor=&quot;#333333&quot; HorizontalAlign=&quot;Center&quot; /&gt;
&lt;SelectedRowStyle BackColor=&quot;#FFCC66&quot; Font-Bold=&quot;True&quot; ForeColor=&quot;Navy&quot; /&gt;
&lt;HeaderStyle BackColor=&quot;red&quot; Font-Bold=&quot;True&quot; ForeColor=&quot;White&quot; /&gt;
&lt;AlternatingRowStyle BackColor=&quot;White&quot; /&gt;
&lt;/asp:GridView&gt;


VB&lt;NET Code
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
If SearchList.SelectedItem.Value = &quot;1&quot; Then

GridView1.Visible = True
GridView2.Visible = False
GridView3.Visible = False
GridView4.Visible = False
ElseIf SearchList.SelectedItem.Value = &quot;2&quot; Then
GridView1.Visible = False
GridView2.Visible = True
GridView3.Visible = False
GridView4.Visible = False
ElseIf SearchList.SelectedItem.Value = &quot;3&quot; Then
GridView1.Visible = False
GridView2.Visible = False
GridView3.Visible = True
GridView4.Visible = False
ElseIf SearchList.SelectedItem.Value = &quot;4&quot; Then
GridView1.Visible = False
GridView2.Visible = False
GridView3.Visible = False
GridView4.Visible = True

End If

End Sub
Private filter As New Hashtable

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
&#39;searchTextBox.Text = &quot;&quot;
filter = If(ViewState(&quot;FilterArgs&quot;) Is Nothing, New Hashtable(), DirectCast(ViewState(&quot;FilterArgs&quot;), Hashtable))
End Sub
Protected Sub FilterDropDown_IndexChanged(ByVal sender As Object, ByVal e As EventArgs)
Dim dd As DropDownList = DirectCast(sender, DropDownList)
Dim ddIndustry = DirectCast(sender, DropDownList)

If dd.SelectedItem.Text &lt;&gt; &quot;ALL Regions&quot; Then

If filter.ContainsKey(&quot;Region&quot;) Then
filter(&quot;Region&quot;) = &quot;=&#39;&quot; &amp; dd.SelectedItem.Text &amp; &quot;&#39;&quot;
Else
filter.Add(&quot;Region&quot;, &quot;=&#39;&quot; &amp; dd.SelectedItem.Text &amp; &quot;&#39;&quot;)
End If
Else
filter.Remove(&quot;Region&quot;)
End If

If dd.SelectedItem.Text &lt;&gt; &quot;ALL Industry&quot; Then

If filter.ContainsKey(&quot;Industry&quot;) Then
filter(&quot;Industry&quot;) = &quot;=&#39;&quot; &amp; ddIndustry.SelectedItem.Text &amp; &quot;&#39;&quot;
Else
filter.Add(&quot;Industry&quot;, &quot;=&#39;&quot; &amp; ddIndustry.SelectedItem.Text &amp; &quot;&#39;&quot;)
End If
Else
filter.Remove(&quot;Industry&quot;)
End If
ApplyGridFilter()
GridView2.PageIndex = 0

End Sub

Protected Sub ApplyGridFilter()
Dim args As String = &quot; &quot;
Dim i As Integer = 0
For Each key As Object In filter.Keys
If i = 0 Then
args = key.ToString() + filter(key).ToString()
Else
args += (&quot; AND &quot; &amp; key.ToString()) + filter(key).ToString()
End If
i += 1
Next
SqlDataSource2.FilterExpression = args
&#39;Filter needs to be saved between postbacks
ViewState.Add(&quot;FilterArgs&quot;, filter)
End Sub

Protected Sub SetValue(ByVal sender As Object, ByVal e As EventArgs)
Dim ddl As DropDownList = DirectCast(sender, DropDownList)
Dim ddlIndustry As DropDownList = DirectCast(sender, DropDownList)

If filter IsNot Nothing Then
If filter.ContainsKey(&quot;Region&quot;) Then
For Each li As ListItem In ddl.Items
If li.Text = filter(&quot;Region&quot;).ToString().Substring(2, filter(&quot;Region&quot;).ToString().Length - 3) Then
li.Selected = True
Exit Sub
End If

Next
End If
Else
If filter.ContainsKey(&quot;Industry&quot;) Then
For Each li As ListItem In ddl.Items
If li.Text = filter(&quot;Industry&quot;).ToString().Substring(2, filter(&quot;Industry&quot;).ToString().Length - 3) Then
li.Selected = True
Exit Sub
End If

Next
End If


End If
End Sub
Protected Sub GridView2_PageIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
ApplyGridFilter()
End Sub
&#39;Protected Sub btnRemoveFilter_Click(ByVal sender As Object, ByVal e As EventArgs)
&#39; &#39;ViewState.Remove(&quot;FilterArgs&quot;);
&#39; filter.Clear()

&#39; ApplyGridFilter()
&#39;End Sub
Please assist i have been trying without sucess</pre>

推荐答案

这是一场彻底的灾难.您正在使用ASP.NET,而不是ASP.您应该相应地标记您的问题.您还应该编辑您的帖子,并使用预览功能来查看您的帖子的外观.然后,您应该删除大量这样的代码,并只提供与您要查询的内容有关的内容.
This is an utter disaster. You are using ASP.NET, not ASP. You should tag your question accordingly. You should also edit your post and make use of the preview functionality to see how your post looks. Then you should remove a ton of this code and give us just the bit that matters to what you''re asking.


下面的代码仅过滤区域(一个下拉列表),i想要添加另一个下拉列表,如果用户不使用区域下拉列表,则可以按行业进行过滤.因此,他可以使用区域或行业下拉列表.


受保护的子Page_Load(将ByByVal发送者作为对象,将ByVal e作为EventArgs)处理Me.Load

filter = If(ViewState("FilterArgs")什么都没有,New Hashtable(),DirectCast(ViewState("FilterArgs"),Hashtable))

结束子

受保护的子FilterDropDown_IndexChanged(ByVal发送者为对象,ByVal e为EventArgs)

Dim dd As DropDownList = DirectCast(sender,DropDownList)
Dim ddIndustry = DirectCast(sender,DropDownList)

如果dd.SelectedItem.Text<>所有区域"然后

如果filter.ContainsKey("Region")然后
filter("Region")="="& dd.SelectedItem.Text""

其他

filter.Add("Region","="& dd.SelectedItem.Text&""
如果结束

其他

filter.Remove("Region")
如果结束

ApplyGridFilter()
GridView2.PageIndex = 0

结束子

受保护的子ApplyGridFilter()

Dim args As String ="
Dim i As Integer = 0

对于每个键,作为对象在filter.Keys
如果i = 0,那么
args = key.ToString()+ filter(key).ToString()
其他
args + =("AND"& key.ToString())+ filter(key).ToString()
如果结束
我+ = 1
下一个
SqlDataSource2.FilterExpression = args

ViewState.Add("FilterArgs",filter)
结束子

受保护的子SetValue(ByVal发送者作为对象,ByVal e作为EventArgs)

Dim ddl作为DropDownList = DirectCast(sender,DropDownList)
Dim ddlIndustry As DropDownList = DirectCast(sender,DropDownList)

如果过滤器什么都不是,那么
如果filter.ContainsKey(& quot; Region& quot;)然后
对于ddl.Items中的每个li作为ListItem
如果li.Text = filter(& quot; Region& quot;).ToString().Substring(2,filter("Region").ToString().Length-3)然后
li.Selected = True
退出子
如果结束

下一个
如果结束

结束子

受保护的子GridView2_PageIndexChanged(ByVal发送者作为对象,ByVal e作为EventArgs)

ApplyGridFilter()

结束Sub
the code below only filters for region ( one dropdown list),i want to add another dropdown,if the user is not using the region dropdown he can filter by industry.therefore he can use the region or the industry dropdown.


Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load

filter = If(ViewState("FilterArgs") Is Nothing, New Hashtable(), DirectCast(ViewState("FilterArgs"), Hashtable))

End Sub

Protected Sub FilterDropDown_IndexChanged(ByVal sender As Object, ByVal e As EventArgs)

Dim dd As DropDownList = DirectCast(sender, DropDownList)
Dim ddIndustry = DirectCast(sender, DropDownList)

If dd.SelectedItem.Text <>"ALL Regions" Then

If filter.ContainsKey("Region") Then
filter("Region") = "=" & dd.SelectedItem.Text "''"

Else

filter.Add("Region", "=" & dd.SelectedItem.Text &"''"
End If

Else

filter.Remove("Region")
End If

ApplyGridFilter()
GridView2.PageIndex = 0

End Sub

Protected Sub ApplyGridFilter()

Dim args As String = ""
Dim i As Integer = 0

For Each key As Object In filter.Keys
If i = 0 Then
args = key.ToString() + filter(key).ToString()
Else
args += (" AND " & key.ToString()) + filter(key).ToString()
End If
i += 1
Next
SqlDataSource2.FilterExpression = args

ViewState.Add("FilterArgs", filter)
End Sub

Protected Sub SetValue(ByVal sender As Object, ByVal e As EventArgs)

Dim ddl As DropDownList = DirectCast(sender, DropDownList)
Dim ddlIndustry As DropDownList = DirectCast(sender, DropDownList)

If filter IsNot Nothing Then
If filter.ContainsKey(&quot;Region&quot;) Then
For Each li As ListItem In ddl.Items
If li.Text = filter(&quot;Region&quot;).ToString().Substring(2, filter("Region").ToString().Length - 3) Then
li.Selected = True
Exit Sub
End If

Next
End If

End Sub

Protected Sub GridView2_PageIndexChanged(ByVal sender As Object, ByVal e As EventArgs)

ApplyGridFilter()

End Sub


这篇关于带有两个下拉菜单的griview的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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