В конечном счете, я пытаюсь найти способ успешно сортировать и фильтровать данные xml на экране gridview.фильтрация и сортировка данных xml по дате в vb.net
У меня есть XML-лист, как это:
<?xml version="1.0" standalone="yes"?>
<Notification>
<Info>
<Event>Template</Event>
<Date>1899/01/01</Date>
</Info>
<Info>
<Event>picnic</Event>
<Date>2016/07/15</Date>
</Info>
<Info>
<Event>party</Event>
<Date>2015/10/29</Date>
</Info>
</Notification>
Что мне нужно фильтровать и сортировать в asp.net GridView на двух разных страницах. На одной странице я храню большую запись обо всех событиях и позволяю добавлять, обновлять и удалять записи. Второй gridview находится в углу моей главной страницы, который должен показывать текущие/предстоящие события. Я определяю их как так (2-я один имеет меньшие размеры размер, но это единственное отличие):
<asp:GridView ID="GridView1" runat="server" HeaderStyle-ForeColor="#FF5A09" RowStyle-ForeColor="#FF9900"
AutoGenerateColumns="false" BorderWidth="2px"
Width="1294px" Height="350px" AllowPaging="true"
OnPageIndexChanging="OnPageIndexChanging" AllowSorting="true" >
<Columns >
<asp:BoundField DataField="Event" HeaderText="Event" ItemStyle-Width="150" />
<asp:BoundField DataField="Date" HeaderText="Date" ItemStyle-Width="150" />
<asp:CommandField ShowEditButton="True" ItemStyle-Width="30"/>
<asp:CommandField ShowDeleteButton="True" ItemStyle-Width="30"/>
</Columns>
Я использую эту функцию vb.net, чтобы связать мои данные XML в моей GridView
Private Sub BindGrid()
Dim ds As New DataSet
ds.ReadXml(Server.MapPath("~/Event_Info.xml"))
GridView1.DataSource = ds
GridView1.DataBind()
GridView1.HeaderRow.TableSection = TableRowSection.TableHeader
End Sub
Моя проблема заключается в том, что всякий раз, когда я читаю данные xml или пытаюсь загрузить его с помощью Dim doc as XDocument=XDocument.Load("Path to my xml")
, данные, считанные внутри, являются строкой в столбце даты, поэтому единственный способ найти их - это изменить мой BindGrid() функционируют так:
Private Sub BindGrid()
Dim ds As New DataSet
ds.Tables[0].DefaultView.Sort = "Date desc"
ds.ReadXml(Server.MapPath("~/Event_Info.xml"))
GridView1.DataSource = ds.Tables[0].DefaultView
GridView1.DataBind()
GridView1.HeaderRow.TableSection = TableRowSection.TableHeader
End Sub
Это позволило мне отсортировать, если я только ввел дату yyyy/mm/dd, но мои функции добавления, удаления и обновления больше не работали.
, если вы хотите увидеть их, я буду размещать их здесь, но вы могли бы, вероятно, пропустить этот бит: Button_click здесь наверху для добавления записи в GridView
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
BindGrid()
Dim oDs As DataSet = GridView1.DataSource
Dim oDr As DataRow = oDs.Tables(0).NewRow
oDr("Event") = TextBox1.Text
oDr("Date") = TextBox2.Text
oDs.Tables(0).Rows.Add(oDr)
oDs.WriteXml(Request.PhysicalApplicationPath + "Event_Info.xml")
BindGrid()
TextBox1.Text = String.Empty
TextBox2.Text = String.Empty
End Sub
Protected Sub GridView1_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GridView1.RowDeleting
BindGrid()
Dim oDs As DataSet = GridView1.DataSource
oDs.Tables(0).Rows(GridView1.Rows(e.RowIndex).DataItemIndex).Delete()
oDs.WriteXml(Request.PhysicalApplicationPath + "Event_Info.xml")
BindGrid()
End Sub
Protected Sub GridView1_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles GridView1.RowEditing
GridView1.EditIndex = e.NewEditIndex
BindGrid()
End Sub
Protected Sub GridView1_RowCancelingEdit(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCancelEditEventArgs) Handles GridView1.RowCancelingEdit
GridView1.EditIndex = -1
BindGrid()
End Sub
Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView1.RowUpdating
' Get the new values from the GridView controls
Dim i As Integer = GridView1.Rows(e.RowIndex).DataItemIndex
Dim n As String = CType(GridView1.Rows(e.RowIndex).Cells(0).Controls(0), TextBox).Text
Dim rn As String = CType(GridView1.Rows(e.RowIndex).Cells(1).Controls(0), TextBox).Text
GridView1.EditIndex = -1
BindGrid()
' Update the XML file using the new values
Dim oDs As DataSet = GridView1.DataSource
oDs.Tables(0).Rows(i).Item(0) = n
oDs.Tables(0).Rows(i).Item(1) = rn
oDs.WriteXml(Request.PhysicalApplicationPath + "Event_Info.xml")
BindGrid()
End Sub
Завершить бит пропуска
Я также не знаю, как успешно фильтровать данные на главной странице, чтобы отображать только текущие и будущие события. Я пытался найти способы применить «где» пункт своего рода на сегодняшний день, но не увенчались успехом
Edit: отмеченный раздел как код, который я забыл пометить как код
Начните с написания схемы в XML-файле, чтобы она включала дату в качестве фактической даты. Затем, когда вы читаете файл, он также будет Date: oDs.WriteXml (Request.PhysicalApplicationPath + «Event_Info.xml», XmlWriteMode.WriteSchema). Также исправьте GridView1_RowUpdating, чтобы вы записывали DateTime во второй столбец вместо строки. текстовое поле должно быть строкой bu, а не DataTable или DGV. – jdweng
@jdweng Спасибо, это помогло мне разобраться, как писать схему, и помогло мне решить некоторые проблемы в этой проблеме. – MacedonZero