Soy nuevo en ASP.NET. Estoy desarrollando una aplicación de búsqueda en formularios web ASP.NET y la recibiré de un archivo XMl. Cuando escribo en el cuadro de texto como student_name o ID y hago clic en el botón Enviar, debería recuperar los datos del estudiante del XML como sus Honores en un formato agradable. Esta es la muestra que hice pero no funciona.

Archivo aspx

<body style="height: 171px">

<h1>Student Graduation</h1>

<form runat="server">
    Search for 
    <asp:TextBox ID="SearchTextBox" runat="server" />
    <asp:Button ID="SearchButton" Text="Search!" runat="server" OnClick="SearchButton_Click" />
</form>


<div id="student_output" runat="server"></div>

Aspx.cs

  protected void Page_Load(object sender, EventArgs e)
  {
    XmlDocument xmlDoc = new XmlDocument();

    protected void Page_Load(object sender, EventArgs e)
    {

        xmlDoc.Load(Server.MapPath("student_list.xml"));

        XmlNodeList Students = xmlDoc.DocumentElement.GetElementsByTagName("Student");

        String htmlString = "";

        for (int i = 0; i < Students.Count; i++)
        {
            XmlNode Student = Students[i];

            htmlString += "<h2>" + Student.SelectSingleNode("Student_Name").InnerText + "</h2>";

            htmlString += "<p>";

            htmlString += Student.SelectSingleNode("ID").InnerText + ", ";

            htmlString += Student.SelectSingleNode("Honours").InnerText + ", ";

            htmlString += Student.SelectSingleNode("Programme").InnerText + ", ";

            htmlString += Student.SelectSingleNode("Book_Price").InnerText + ". ";

            htmlString += "</p>";

        }
        student_output.InnerHtml = htmlString;
    }

    protected void SearchButton_Click(object sender, EventArgs e)
    {
        String searchKey = SearchTextBox.Text;

        XmlNode Student = xmlDoc.SelectSingleNode("//Student[Student_Name='" + searchKey + "']");

        if (Student != null)
        {
            string htmlString = "";

            htmlString += "<h2>" + Student.SelectSingleNode("Student_Name").InnerText + "</h2>";

            htmlString += "<p>";

            htmlString += Student.SelectSingleNode("ID").InnerText + ", ";

            htmlString += Student.SelectSingleNode("Honours").InnerText + ", ";

            htmlString += Student.SelectSingleNode("Programme").InnerText + ". ";

            htmlString += Student.SelectSingleNode("Book_Price").InnerText + ". ";

            htmlString += "</p>";

            student_output.InnerHtml = htmlString;
        }
    }
}

}

Archivo 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>
0
Dreeam Deshi 25 nov. 2021 a las 04:26
¿Qué quieres decir con "no funciona"? ¿Estás obteniendo un error? ¿De alguna manera no satisface sus necesidades? ¿Cómo se está desviando de sus expectativas? Esos son detalles críticos que debe incluir en su pregunta.
 – 
mason
25 nov. 2021 a las 04:33

1 respuesta

La mejor respuesta

Convertir el xml en un conjunto de datos, entonces todo se convierte en un paseo por el parque.

Entonces, este marcado:

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

Ok, y luego este código:

   protected void SearchButton_Click(object sender, EventArgs e)
    {
        string sFile  = @"C:\Test7\sData.txt";
        DataSet 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();
    }

Entonces, si no ingresamos nada, mostramos todo y vemos esto:

enter image description here

Y utilicé una búsqueda con comodines para el nombre; supongo que podríamos SOLO coincidir con el comienzo, pero puedes decir buscar "B" y obtienes esto:

enter image description here

Por supuesto, si ingresa un número, busco por ID y digo esto:

enter image description here

Y supongo que deberíamos agregar al GV una "fila sin datos, digamos así:

        <asp:GridView ID="GridView1" runat="server" CssClass="table" Width="40%">
            <EmptyDataTemplate>
                <h2>No data found</h2>
            </EmptyDataTemplate>
        </asp:GridView>

Entonces, ahora para una búsqueda fallida, obtendríamos esto:

enter image description here

0
Albert D. Kallal 25 nov. 2021 a las 05:34