I have been asked to write a multi-tiered program that loads and parses 24 student grades from an xml file, and then display all grades, the lowest grade, the highest grade, and the average grade to the web form using graphical user interface form, not Console output. I am using textboxes to display the values on the web page, and my code executes successfully, however, it does not display any values in the textboxes when I run the program - they're empty. How should I fix this/what am I doing wrong? I am very new to C# so any help would be greatly appreciated as I want to learn how to fix the problem for future programs. This program had to be done using the ASP.NET Web Application template in VS. Below is my webform.aspx file, aspx.cs file, StudentGrade.cs file, and xml file.
StudentGrade.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Web;
using System.Web.UI.WebControls;
using System.Xml;
using System.Xml.Linq;
using System.Text;
using System.IO;
using System.Net;
namespace WebApplication5
{
class StudentGrade
{
public static TextBox AllGrades;
public static TextBox AverageGrade;
public static TextBox LowestGrade;
public static TextBox HighestGrade;
public static void LoadAndParseStudentGrades()
{
//Load XML doc
XmlDocument doc = new XmlDocument();
doc.Load("C:\\Program Files (x86)\\IIS Express\\studentGrades.xml");
//Display all grades
XmlNodeList grades = doc.SelectNodes("Students/Student/Grade");
foreach (XmlNode grade in grades)
{
AllGrades.Text = grade.InnerText;
}
}
public static void Average()
{
//Get directory and load xml document with XMLpath
string XMLpath = Directory.GetCurrentDirectory() + @"\studentGrades.xml";
XDocument xmlDoc = XDocument.Load(XMLpath);
IEnumerable<XElement> gradeElements = xmlDoc.Root.Descendants("Grade");
//Set the count for grade elements
int totalCount = gradeElements.Count();
//Take all grade elements and take the average of them
double averageGrade = gradeElements.Select(x => (double)x).Average();
AverageGrade.Text = averageGrade.ToString();
}
public static void Lowest()
{
//Load XML doc to string
var xmlString = File.ReadAllText("C:\\Program Files (x86)\\IIS Express\\studentGrades.xml");
var xDoc = XDocument.Parse(xmlString);
var grade = xDoc.Descendants("Grade");
decimal minGrade = decimal.MaxValue;
//Loop to determine what grade has the lowest value
for (int i = 0; i < grade.Count(); i++)
{
var gr = decimal.Parse(grade.ElementAt(i).Value);
if (gr < minGrade)
{
minGrade = gr;
LowestGrade.Text = gr.ToString();
}
}
}
public static void Highest()
{
//Load XML doc to string
var xmlString = File.ReadAllText("C:\\Program Files (x86)\\IIS Express\\studentGrades.xml");
var xDoc = XDocument.Parse(xmlString);
var grade = xDoc.Descendants("Grade");
decimal maxGrade = decimal.MinValue;
//Loop to determine what grade has the highest value
for (int i = 0; i < grade.Count(); i++)
{
var gr = decimal.Parse(grade.ElementAt(i).Value);
if (gr > maxGrade)
{
maxGrade = gr;
HighestGrade.Text = gr.ToString();
}
}
}
}
}
Webform.aspx.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace WebApplication5 {
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
StudentGrade.AllGrades = new TextBox();
StudentGrade.AverageGrade = new TextBox();
StudentGrade.LowestGrade = new TextBox();
StudentGrade.HighestGrade = new TextBox();
}
}
}
Webform.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication5.WebForm1" %>
<%@ Import Namespace="WebApplication5" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Student Grades</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="All Grades: "></asp:Label>
<asp:TextBox ID="AllGrades" runat="server"></asp:TextBox>
<asp:Label ID="Label4" runat="server" Text="Highest Grade: "></asp:Label>
<asp:TextBox ID="HighestGrade" runat="server"></asp:TextBox>
<asp:Label ID="Label2" runat="server" Text="Lowest Grade: "></asp:Label>
<asp:TextBox ID="LowestGrade" runat="server"></asp:TextBox>
<asp:Label ID="Label3" runat="server" Text="Average Grade: "></asp:Label>
<asp:TextBox ID="AverageGrade" runat="server"></asp:TextBox>
</div>
</form>
</body>
</html>
studentGrades.xml
<?xml version="1.0" encoding="utf-8"?>
<Students>
<Student ID ="1">
<Name>Will</Name>
<Grade>100</Grade>
</Student>
<Student ID ="2">
<Name>Kaylee</Name>
<Grade>93</Grade>
</Student>
<Student ID ="3">
<Name>Rick</Name>
<Grade>77</Grade>
</Student>
<Student ID ="4">
<Name>Carl</Name>
<Grade>85</Grade>
</Student>
<Student ID ="5">
<Name>Hannah</Name>
<Grade>91</Grade>
</Student>
<Student ID ="6">
<Name>Tyler</Name>
<Grade>67</Grade>
</Student>
<Student ID ="7">
<Name>Hunter</Name>
<Grade>87</Grade>
</Student>
<Student ID ="8">
<Name>Claude</Name>
<Grade>96</Grade>
</Student>
<Student ID ="9">
<Name>Taylor</Name>
<Grade>99</Grade>
</Student>
<Student ID ="10">
<Name>Anna</Name>
<Grade>79</Grade>
</Student>
<Student ID ="11">
<Name>Mike</Name>
<Grade>82</Grade>
</Student>
<Student ID ="12">
<Name>Jordan</Name>
<Grade>60</Grade>
</Student>
<Student ID ="13">
<Name>Cam</Name>
<Grade>75</Grade>
</Student>
<Student ID ="14">
<Name>Bob</Name>
<Grade>95</Grade>
</Student>
<Student ID ="15">
<Name>Evan</Name>
<Grade>84</Grade>
</Student>
<Student ID ="16">
<Name>Heather</Name>
<Grade>88</Grade>
</Student>
<Student ID ="17">
<Name>Kristen</Name>
<Grade>82</Grade>
</Student>
<Student ID ="18">
<Name>Monica</Name>
<Grade>58</Grade>
</Student>
<Student ID ="19">
<Name>Brad</Name>
<Grade>76</Grade>
</Student>
<Student ID ="20">
<Name>Carly</Name>
<Grade>95</Grade>
</Student>
<Student ID ="21">
<Name>Tom</Name>
<Grade>69</Grade>
</Student>
<Student ID ="22">
<Name>Marshall</Name>
<Grade>89</Grade>
</Student>
<Student ID ="23">
<Name>Jeff</Name>
<Grade>82</Grade>
</Student>
<Student ID ="24">
<Name>Sydney</Name>
<Grade>91</Grade>
</Student>
</Students>
I tried using the textboxes to properly display their respective values, however there seems to be an error somewhere since the web form is not loading any values into the textboxes - just empty textboxes. I have researched online for countless hours and watched many videos yet to no avail. I am still learning C# so this has me a bit confused! What code would fix this issue of the textboxes displaying nothing?