- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个页面 (category-list.apsx),它使用 Repeater Control 方法在页面上显示 xml 详细信息。我使用了此处显示的示例:
http://www.w3schools.com/aspnet/aspnet_repeater.asp
这很好用,但我希望用户能够使用 CategoryName 的下拉列表来过滤结果。
结果中继器如下所示:
<form runat="server">
<asp:Repeater id="categories" runat="server">
<ItemTemplate>
<tr>
<td><%#Container.DataItem("CategoryName")%> </td>
<td> </td>
<td><%#Container.DataItem("CategoryMonth")%> </td>
<td> </td>
<td><%#Container.DataItem("CategoryMonthSpend")%> </td>
<td> </td>
<td><%#Container.DataItem("Amount")%> </td>
</tr>
</ItemTemplate>
</asp:Repeater>
</form>
XML 看起来像这样:
<catalog>
<categories>
<CategoryName>Category Name1</CategoryName>
<CategoryMonth>April 2012</CategoryMonth>
<CategoryMonthSpend>£1</CategoryMonthSpend> <Amount>1</Amount>
</categories>
</catalog>
激活中继器的脚本如下所示:
<script runat="server">
Public Sub Page_Load()
If Not Page.IsPostBack Then
Dim cat As String = Request.QueryString("cat")
Dim mycategories As DataSet = New DataSet()
mycategories.ReadXml(MapPath("XML/" + cat + ".xml"))
categories.DataSource = mycategories
categories.DataBind()
End If
End Sub
</script>
最佳答案
好的,这里要介绍的内容很多,所以我不会对每个部分进行详尽的介绍。希望这能为您提供一个良好的起点,让您更深入地了解 ASP.NET 中的数据绑定(bind)。
我更喜欢在代码隐藏中编写我的代码,而不是 <script runat="server">
在我的 .aspx 页面中,所以这就是我的代码在这个例子中的位置。但是,从功能上讲,这里没有区别,如果您愿意,您可以选择将此代码放在该 .aspx 端脚本中。
首先,让我们修复您的 Repeater
模板。您似乎正在使用表格布局,但模板中没有任何地方是实际的 <table></table>
标签。您需要添加一个 <HeaderTemplate>
和一个 <FooterTemplate>
<asp:Repeater id="categories" runat="server">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%#Container.DataItem("CategoryName")%> </td>
<td> </td>
<td><%#Container.DataItem("CategoryMonth")%> </td>
<td> </td>
<td><%#Container.DataItem("CategoryMonthSpend")%> </td>
<td> </td>
<td><%#Container.DataItem("Amount")%> </td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
其次,让我们声明一个DropDownList
在您想用于过滤的 aspx 页面上:
<asp:DropDownList ID="ddlCategory" runat="server" AutoPostBack="true" />
AutoPostBack
这里的属性(property)意味着你的DropDownList
将自动发回服务器并触发 SelectedIndexChanged
您可以在代码中处理的服务器上的事件。或者你可以使用 Button
在您想要触发过滤器时单击。
第三,让我们将您的数据绑定(bind)代码分离成更容易重用的漂亮、简洁的小方法。
Private Function GetXmlDataSet() As IEnumerable(Of DataRow)
Dim cat As String = Request.QueryString("cat")
Dim mycategories As DataSet = New DataSet()
mycategories.ReadXml(MapPath("XML/" + cat + ".xml"))
' I like to use IEnumerable because so that I can use LINQ '
Return mycategories.Tables(0).AsEnumerable()
End Function
Private Sub BindRepeater(query As IEnumerable(Of DataRow))
categories.DataSource = query
categories.DataBind()
End Sub
Private Sub BindDropDownList(query As IEnumerable(Of DataRow))
ddlCategory.DataSource = query.Select(Function(x) x("CategoryName")).Distinct()
ddlCategory.DataBind()
' Insert an empty choice into the DropDownList '
ddlCategory.Items.Insert(0, "")
End Sub
第四,让我们更新你的Page_Load
代码,以便我们可以利用这些方法:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If (Not IsPostBack) Then
Dim query = GetXmlDataSet()
BindDropDownList(query)
BindRepeater(query)
End If
End Sub
最后当然也很重要,让我们创建 SelectedIndexChanged
事件处理程序以触发此数据集的过滤:
Private Sub ddlCategory_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles ddlCategory.SelectedIndexChanged
Dim selectedCategory As String = ddlCategory.SelectedValue.ToString()
Dim query = GetXmlDataSet()
If (Not String.IsNullOrEmpty(selectedCategory)) Then
query = GetXmlDataSet().Where(Function(x) x("CategoryName") = selectedCategory)
End If
BindRepeater(query)
End Sub
那么我们在这里做了什么?通过分离出这些数据绑定(bind)方法,我让它变得更简洁,并允许两个单独的控件更轻松地共享相同的 DataSet
。在您的 XML 文件中。使用 IEnumerable
允许我使用 LINQ,我觉得它比对 DataTable
的标准查询要好得多。或 DataView
对象。
在DropDownList
数据绑定(bind)代码 我正在选择您的数据的单个列并将其转换为字符串集合。我也叫Distinct
为了很好的措施,以便删除重复项。我还冒昧地在列表中添加了一个空白项,以便用户可以选择 NO filter,并显示所有内容。
您会注意到 SelectedIndexChanged
中有一些代码事件处理程序以查看 DropDownList 值是否为空。这不一定是最可靠的(如果您的其中一个项目实际上有一个空白的“CategoryName”并且您想对其进行过滤,则会崩溃),但适用于此示例。另一种方法是使用 ddlCategory.SelectedIndex <> 0
作为检查是否选择了过滤器。
这绝不是对这里发生的一切的完整解释,所以请随意提问。但是,这应该可以帮助您找到一个可以在未来开发中扩展的工作示例。
编辑:此代码要求您导入 System.Collections.Generic
命名空间和 System.Linq
命名空间。在 Visual Studio 2010 中,这可能已经自动导入到 Web 应用程序项目中。如果没有,您可以选择将它们直接添加到您的代码文件中,或者添加到您的 Web 应用程序的Project Properties 页面的References > Imported Namespaces
关于javascript - Repeater Control 方法的 ASP.NET 过滤器下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12198945/
我想了解 Ruby 方法 methods() 是如何工作的。 我尝试使用“ruby 方法”在 Google 上搜索,但这不是我需要的。 我也看过 ruby-doc.org,但我没有找到这种方法。
Test 方法 对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。 object.Test(string) 参数 object 必选项。总是一个
Replace 方法 替换在正则表达式查找中找到的文本。 object.Replace(string1, string2) 参数 object 必选项。总是一个 RegExp 对象的名称。
Raise 方法 生成运行时错误 object.Raise(number, source, description, helpfile, helpcontext) 参数 object 应为
Execute 方法 对指定的字符串执行正则表达式搜索。 object.Execute(string) 参数 object 必选项。总是一个 RegExp 对象的名称。 string
Clear 方法 清除 Err 对象的所有属性设置。 object.Clear object 应为 Err 对象的名称。 说明 在错误处理后,使用 Clear 显式地清除 Err 对象。此
CopyFile 方法 将一个或多个文件从某位置复制到另一位置。 object.CopyFile source, destination[, overwrite] 参数 object 必选
Copy 方法 将指定的文件或文件夹从某位置复制到另一位置。 object.Copy destination[, overwrite] 参数 object 必选项。应为 File 或 F
Close 方法 关闭打开的 TextStream 文件。 object.Close object 应为 TextStream 对象的名称。 说明 下面例子举例说明如何使用 Close 方
BuildPath 方法 向现有路径后添加名称。 object.BuildPath(path, name) 参数 object 必选项。应为 FileSystemObject 对象的名称
GetFolder 方法 返回与指定的路径中某文件夹相应的 Folder 对象。 object.GetFolder(folderspec) 参数 object 必选项。应为 FileSy
GetFileName 方法 返回指定路径(不是指定驱动器路径部分)的最后一个文件或文件夹。 object.GetFileName(pathspec) 参数 object 必选项。应为
GetFile 方法 返回与指定路径中某文件相应的 File 对象。 object.GetFile(filespec) 参数 object 必选项。应为 FileSystemObject
GetExtensionName 方法 返回字符串,该字符串包含路径最后一个组成部分的扩展名。 object.GetExtensionName(path) 参数 object 必选项。应
GetDriveName 方法 返回包含指定路径中驱动器名的字符串。 object.GetDriveName(path) 参数 object 必选项。应为 FileSystemObjec
GetDrive 方法 返回与指定的路径中驱动器相对应的 Drive 对象。 object.GetDrive drivespec 参数 object 必选项。应为 FileSystemO
GetBaseName 方法 返回字符串,其中包含文件的基本名 (不带扩展名), 或者提供的路径说明中的文件夹。 object.GetBaseName(path) 参数 object 必
GetAbsolutePathName 方法 从提供的指定路径中返回完整且含义明确的路径。 object.GetAbsolutePathName(pathspec) 参数 object
FolderExists 方法 如果指定的文件夹存在,则返回 True;否则返回 False。 object.FolderExists(folderspec) 参数 object 必选项
FileExists 方法 如果指定的文件存在返回 True;否则返回 False。 object.FileExists(filespec) 参数 object 必选项。应为 FileS
我是一名优秀的程序员,十分优秀!