在xml gridview中搜索。

时间:2018-04-05 12:43:07

标签: asp.net xml search gridview xmlnode

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

我正在开发一个ASP.NET Web应用程序,我有一个gridview,它有一个XML作为数据源。我已经将它作为数据源绑定,它完美无缺。

我的项目中有一个文本框和一个按钮,想要在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!");
            }
        }
    }
}

我真的需要一些帮助。正如我所说,我尝试过不同的想法,但我陷入困境,无法到达任何地方。

1 个答案:

答案 0 :(得分:0)

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

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());
}