// In der Methode wird das Business Objekt, welches in dieser Seite // visualisiert wird, geladen (wenn bestehendes Projekt) oder erzeugt (neues Projekt) protected void Page_Load(object sender, EventArgs e) { lblError.Text = ""; if (!IsPostBack) { allCustomers = Main.getCustomers(); try { ddlCustomer.DataSource = allCustomers; ddlCustomer.DataTextField = "name"; ddlCustomer.DataValueField = "id"; ddlCustomer.DataBind(); } catch (Exception error) { Console.Write(error.Message); } currentID = (string)Session["id"]; //wurde beim Aufruf übertragen if (currentID != "") { //Objekt laden und Werte setzen currentProject = Main.getProjectByID(currentID); if (currentProject != null) { //kopiere die Properties des Objekts in die Felder der Maske txtNameProject.Text = currentProject.name; lblProjekttitle.Text = " - " + currentProject.name + " / " + currentProject.customerName; ddlCustomer.SelectedValue = currentProject.customerID; txtDateEnd.Text = currentProject.dateEnd; lblDateCreate.Text = currentProject.dateCreate; Session["Project"] = currentProject; //Projektobjekt in Session speichern btnDeleteProject.Visible = true; lblDateCreate.Visible = true; tblNewComment.Visible = false; updateTasks(); } else { lblError.Text = "Projekt nicht gefunden - Sie können ein neues Projekt anlegen!"; btnDeleteProject.Visible = false; tblNewTask.Visible = false; tblNewComment.Visible = false; lblDateCreate.Visible = false; Session["Project"] = Main.newProject(); //neues leeres Kundenobjekt } } else { //leere ID? Dann ist das ein neues Projekt btnDeleteProject.Visible = false; tblNewTask.Visible = false; lblDateCreate.Visible = false; currentProject = Main.newProject(); Session["Project"] = currentProject; //neues leeres Projektobjekt } } else currentProject = (Projects)Session["Project"]; }
// Laden aller Tasks als Liste von Objekten für ein Projekct - Funktion wird von Projects aufgerufen! internal static List<Tasks> LoadTasksForProject(Projects theProject) { SqlCommand cmd = new SqlCommand("select id, name, projectID from Tasks where projectID = @projectID", Main.GetConnection()); cmd.Parameters.Add(new SqlParameter("projectID", theProject.id)); SqlDataReader reader = cmd.ExecuteReader(); List<Tasks> allTasks = new List<Tasks>(); //initialisiere lehre Liste von Tasks while (reader.Read()) { Tasks oneTask = new Tasks(); oneTask.id = reader.GetString(0); oneTask.name = reader.GetString(1); oneTask.projectID = reader.GetString(2); oneTask.comments = oneTask.getComments; allTasks.Add(oneTask); } return allTasks; }
/************************************************************************************************************ STATISCHE METHODEN internal bedeutet, dass sie nur von Klassen aus BOKunden (aus dem eigenem Namespace) aufgerufen werden können - also nicht direkt aus dem PL Die Methoden sind im BOKunde-Objekt, damit der BO-Programmierer alle SQL-Statements, die Kunden betreffen, an einer Stelle hat Der PL-Programmierer sieht diese Implementation aber nicht. Er sieht die Methoden, von wo aus er diese Objekte "bekommt" (also entsprechend der Navigability). Man hätte diese Methoden technisch aber problemlos auch in die cMain geben können! */ // Hilfsfunktion für die beiden unteren Methoden private static Projects fillProjectFromSQLDataReader(SqlDataReader reader) { Projects oneProject = new Projects(); oneProject.id = reader.GetString(0); oneProject.name = reader.GetString(1); oneProject.customerID = reader.GetString(2); oneProject.dateCreate = reader.GetDateTime(3).ToString("dd.MM.yyyy"); oneProject.dateEnd = reader.GetDateTime(4).ToString("dd.MM.yyyy"); Customers projectCustomer = Customers.Load(oneProject.customerID); oneProject.customerName = projectCustomer.name; return oneProject; }