这是我在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!");
}
}
}
}
我真的需要一些帮助。正如我所说,我尝试过不同的想法,但我陷入困境,无法到达任何地方。
答案 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());
}