【问题标题】:Search in a xml gridview.在 xml 网格视图中搜索。
【发布时间】:2018-04-05 12:43:06
【问题描述】:

这是我在 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!");
            }
        }
    }
}

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

【问题讨论】:

    标签: asp.net xml search gridview xmlnode


    【解决方案1】:

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

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

    【讨论】:

    • 我在博客网站上找到了另一个解决方案。 aspdotnet-pools.com/2014/10/… 这就是我想要的,上面的页面解决方案运行良好。它使用 Linq,我得到了我需要的结果。这个问题已经解决了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    相关资源
    最近更新 更多