在 xml 网格视图中搜索。

Search in a xml gridview.

这是我在 Stack Overflow 上的第一个问题,我会尽可能准确。

我正在开发一个 ASP.NET Web 应用程序,我有一个以 XML 作为数据源的 gridview。我已经将它绑定为数据源,并且运行良好。

我的项目中有一个文本框和一个按钮,想在 gridview 中进行搜索。

这是 XML 文件中节点之一的示例。

https://i.imgur.com/weTlrh1.png

我目前遇到的问题是卡在搜索gridview部分。

正如我之前所说,我有一个文本框和一个按钮,当我在文本框中写一个值并按下按钮时,我想搜索 gridview 及其节点以检查是否有任何标题包含单词的示例从文本框。

现在我有对应的代码:

https://i.imgur.com/l2lz8JL.png

此代码在 buttonSearch Click 事件中。 SearchBookBox.text 是我要在 Gridview 中搜索的文本。

我现在被困住了,我需要一些帮助。

DataSet ds = new DataSet();

ds.ReadXml(Server.MapPath("/NewFolder1/books.xml"));

GridView1.DataSource = ds;

GridView1.DataBind();

以上代码是我将gridview绑定到对应的xml文件的代码。此代码在我的 Page_Load 事件中。

我尝试了不同的方法来解决这个问题,但都没有效果。

现在的代码是这样的:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Xml;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

namespace BookSearch
{
    public partial class BookSearchForm : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            ErrorLabel.Visible = false;
            AddBooksXML();

        }

        private void AddBooksXML()
        {
            if (!IsPostBack)
            {
                DataSet ds = new DataSet();
                ds.ReadXml(Server.MapPath("/NewFolder1/books.xml"));
                GridView1.DataSource = ds;
                GridView1.DataBind();
            }
        }

        protected void BookSearchButton_Click(object sender, EventArgs e)
        {
            if(SearchBookBox.Text != null)
            {
                foreach (XmlNode node in ds.GetXml)
                {
                }
            }
            else
            {
                Response.Write("ERROR!");
            }
        }
    }
}

我真的需要一些帮助。正如我所说,我尝试过不同的想法,但我被卡住了,我无处可去。

我认为这是一个可能的解决方案。

protected void XmlSearch(string searchText)
{
    DataSet ds = new DataSet();
    ds.ReadXml(Server.MapPath("/NewFolder1/books.xml"));
    var dat = from books in ds.Tables[0].AsEnumerable()
       where books.Field<string>("author") == searchText || book.Field<string>("title") == searchText
       select books;

    GridView1.DataSource = dat.CopyToDataTable();
    GridView1.DataBind();
}

这将在作者和标题中搜索完全匹配的内容,这可能不是最佳解决方案,但它是您如何执行此操作的一个示例。

需要

using System.Linq;

编辑

如果你想遍历它们,你可以使用

foreach (var book in dat)
{
   var bookInfo = String.Format("{0} {1}", book["author"].ToString(), book["title"].ToString());
}