在 ASP.NET C# Web 应用程序中使用 ADO.NET 和 XML
Posted
技术标签:
【中文标题】在 ASP.NET C# Web 应用程序中使用 ADO.NET 和 XML【英文标题】:Use ADO.NET and XML in ASP.NET C# Web applications 【发布时间】:2022-01-04 12:52:15 【问题描述】:我是 ASP.NET 网络表单和 C# 的新手。我想创建一个简单的 Web 应用程序,它具有从 XML 文档中搜索特定学生姓名的功能。该网络应用程序有一个文本框,我可以在其中输入学生姓名或 ID,然后单击提交按钮,它应该从 XML 中检索学生的数据。我如何使这个搜索功能从 XML 中工作?用户收到的数据应该是独立的,而不是 gridview 格式,所以我可以将它们设置为看起来像毕业证书。
这是我制作的示例: SampleStudentGraduation
这就是我想让它看起来像这样的方式: Sample
这是 XML 文档
<Graduate>
<Student>
<ID> 01944422</ID>
<Student_Name>Peter Parker</Student_Name>
<Honours> First Class </Honours>
<Book_Price>Yes</Book_Price>
<Programme>Comp. Science</Programme>
</Student>
<Student>
<ID>01923455</ID>
<Student_Name>Bryan Adam</Student_Name>
<Honours>Second class</Honours>
<Book_Price>No</Book_Price>
<Programme>Mathematics</Programme>
</Student>
<Student>
<ID>01952345</ID>
<Student_Name>Maggie Fong</Student_Name>
<Honours>First class</Honours>
<Book_Price>Yes</Book_Price>
<Programme>Accounting</Programme>
</Student>
<Student>
<ID>01998745</ID>
<Student_Name>Melissa Teh</Student_Name>
<Honours>First class</Honours>
<Book_Price>Yes</Book_Price>
<Programme>Finance</Programme>
</Student>
<Student>
<ID>01899888</ID>
<Student_Name>Ahmad bin Suhail</Student_Name>
<Honours>Second class</Honours>
<Book_Price>No</Book_Price>
<Programme>Engineering</Programme>
</Student>
<Student>
<ID>01900847</ID>
<Student_Name>Lechumanan a/l Vicky</Student_Name>
<Honours>Third class</Honours>
<Book_Price>No</Book_Price>
<Programme>Comp. Science</Programme>
</Student>
<Student>
<ID>04503967</ID>
<Student_Name>Soo Tong Wei</Student_Name>
<Honours>Third class</Honours>
<Book_Price>No</Book_Price>
<Programme>Mathematics</Programme>
</Student>
</Graduate>
【问题讨论】:
在继续之前,您是否知道 WebForms 不再是您用于新项目的技术?如果您要学习一些东西,请选择现代框架。 是的,我知道这一点,我只是想从 C# 中学习一些东西。有没有你推荐的现代框架 好的,很公平。您可以选择是否要使用XmlDataSource 或只是阅读 xml 并搜索您的记录。您的选择,但如果您不打算允许对数据进行编辑,那么您将通过做一些LINQ to XML 来了解更多 C# 非常感谢。我认为我会选择 LINQ to XML。 【参考方案1】:将 xml 转换为数据集,然后一切都变成了公园散步。
所以,这个标记:
<div>
<h1>Student Graduation</h1>
Search for
<asp:TextBox ID="SearchTextBox" runat="server" />
<asp:Button ID="SearchButton" Text="Search!" runat="server" OnClick="SearchButton_Click"
CssClass="btn" style="margin-left:15px" />
<br />
<asp:GridView ID="GridView1" runat="server" CssClass="table" Width="40%">
</asp:GridView>
</div>
以及搜索按钮的代码:
protected void SearchButton_Click(object sender, EventArgs e) 字符串 sFile = @"C:\Test7\sData.txt"; 数据集 MyData = new DataSet(); MyData.ReadXml(sFile);
// if blank, then show all data
DataTable MyTable = MyData.Tables[0];
if (SearchTextBox.Text != "")
string s = SearchTextBox.Text;
// user entered somthing
// if text, then match on stuent name
if (s.All(char.IsNumber))
// number, lets filter by ID
MyTable.DefaultView.RowFilter = "ID = " + s;
else
// search Student name - partial match
MyTable.DefaultView.RowFilter = "Student_Name like '%" + s + "%'";
GridView1.DataSource = MyTable;
GridView1.DataBind();
所以,如果我们什么都不输入,那么我们将全部显示并看到:
我使用通配符搜索名称 - 我想我们可以在开头匹配,但你可以说搜索“B”,然后你会得到:
当然,如果你输入一个数字,那么我通过ID搜索,然后说这个
我想我们应该在 GV 中添加一个“无数据行,这样说:
<asp:GridView ID="GridView1" runat="server" CssClass="table" Width="40%">
<EmptyDataTemplate>
<h2>No data found</h2>
</EmptyDataTemplate>
</asp:GridView>
但是,如前所述,您不想要网格格式的结果。
因此,我们可以将 GV 更改为中继器或数据列表。
让我们使用数据列表。
所以,我们的标记现在变成了:
<asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="125px" >
</asp:DetailsView>
代码和以前一样,执行这个:
DetailsView1.DataSource = MyTable;
DetailsView1.DataBind();
现在我们得到了 FORM 类型的布局结果:
因此,无论是网格,还是只是在页面上填写控件,方法都大同小异。当然没有限制,也没有理由为结果使用网格。
您甚至不必使用自动绑定控件(比如列表详细信息列表)。
您可以简单地放入控件,然后随意布置它们。
这样说:
<div style="border-style:solid;color:black;width:300px;float:left">
<div style="padding:5px;text-align:right">
<p>Student ID: <asp:TextBox ID="ID" runat="server" /></p>
<p>Student Name: <asp:TextBox ID="Student_Name" runat="server" /></p>
<p>Honours: <asp:TextBox ID="Honours" runat="server" /></p>
<p>Book Price: <asp:TextBox ID="Book_Price" runat="server" /></p>
<p>Program: <asp:TextBox ID="Programme" runat="server" /></p>
</div>
</div>
所以上面只是放入页面的简单控件。
现在我们要在上面填写的代码是:
(和以前一样,但现在代替网格绑定或数据列表绑定,我们只需使用代码来填充控件,如下所示:
if (MyTable.DefaultView.Count > 0)
// we have a match - display it
DataRow OneRow = MyTable.DefaultView.ToTable().Rows[0];
ID.Text = OneRow["ID"].ToString();
Student_Name.Text = OneRow["STudent_Name"].ToString();
Honours.Text = OneRow["Honours"].ToString();
Book_Price.Text = OneRow["Book_Price"].ToString();
Programme.Text = OneRow["Programme"].ToString();
结果现在是这样的:
因此,将结果发送到网格,或者只是一些代码实际上是相同的过程。事实上,如您所见,我们将 Grid 视图换成了 Details 视图。换句话说,只需更改 2 行代码,我们就有了一个详细信息视图来代替网格视图。
但是,如前所述,您显然希望以任何您想要的方式布置最终结果 - 并且不需要网格,甚至不需要内置详细信息视图。
正如您在上一个示例中看到的 - 将过滤器的结果抓取/获取到一个漂亮的简单 DataRow 对象中是一件简单的事情,然后我们只需编写我们拖放到页面上的控件的设置。我所拥有的示例布局当然可以是您能想到的任何类型的布局。
【讨论】:
以上是关于在 ASP.NET C# Web 应用程序中使用 ADO.NET 和 XML的主要内容,如果未能解决你的问题,请参考以下文章
如果未使用 C# 登录 ASP.NET Web 表单,则将用户重定向到登录
C#、Asp.Net Web 应用程序中出现奇怪的 System.***Exception 错误
如何在 Web 应用程序(ASP.Net、C#、IIS)中进行文件上传
我们可以在 asp.net c# web 应用程序中嵌入对 twitter、linkedin、facebook、buzz 的授权吗?