在 ASP.NET C# Web 应用程序中使用 ADO.NET 和 XML

Use ADO.NET and XML in ASP.NET C# Web applications

我是 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>

将 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) { string 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 更改为 repeoater 或数据列表。

让我们使用数据列表。

所以,我们的标记现在变成了:

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

现在的结果是这样的:

因此,将结果发送到网格或只是一些代码实际上是完全相同的过程。事实上,如您所见,我们将网格视图换成了详细信息视图。换句话说,只是更改了 2 行代码,我们用详细信息视图代替了网格视图。

但是,如前所述,您显然希望以任何您想要的方式布置最终结果 - 不需要网格,甚至不需要内置详细信息视图。

正如您在上一个示例中看到的那样 - grab/get 将过滤器的结果放入一个漂亮的简单 DataRow 对象中是一件简单的事情,从中我们只需编写我们删除的控件的设置在页面上。我的示例布局当然可以是您能够想到的任何一种布局。