Buttons dynamisch generierer

xloouch

Erfahrenes Mitglied
Hallo zusammen

Habe ein kleines / grosses Problem. Für Neulinge wie mich, ist es ein grosses Problem.

Ich muss für einen Projekt einen solchen Aufgab einhalten ( im Anhang ist dieses Bild ersichtlich). Angemerkt, es ist eine ASPX Seite. Mein Tool schreibe ich in einem Web-User-Control (in der Sprache C#) um eine leichte Integration in die bestehende Seite zu gewährleisten.

Beschreibung des Bildes:

Feld 1:
Im Feld 1 werden alle Projekte dargestellt. Hinter jedem Projekt wird ein dynamischer
Button erstellt. Dieser ruft auf im Feld 2 alle Dokumente auf. (Source-Code folgt später)

Feld 2:
Im Feld 2 werden alle Dokumente aufgelistet, welche durch den Klick auf das Projekt,
aus einer MS-SQL-Datenbank geladen wird.
Ebenfalls werden hier dynamisch Buttons hinter dem Dokument generiert, welche im
Feld 3 jeweils die entsprechende Dokumenthistorie aufruft.

Feld 3:
Im Feld 3 wird die komplette Dokumenthistorie angezeigt. ( Also die Releases). Hier
werden keine Buttons mehr generiert.

Die Page_load Funktion in C# sieht so aus:
Code:
protected void Page_Load(object sender, EventArgs e)
        {
            text = db.getStatus();
                        
           
            StatusLabel.Text = text;
            
            designProjektHeader();
            designDocumentHeader();
            designHistoryHeader();

            showProjects();
       }

Die drei Desgin Header erstellen jeweils die Header der einzelnen 3 Tabellen.

Nun die showProjects();
Code:
        private void showProjects()
        {
            ArrayList array = new ArrayList();
            array = db.get_projects();

            for (int i = 0; i < array.Count; i++)
            {
                TableRow tempRow = new TableRow();
                TableCell tempCell = new TableCell();
                TableCell tempCell1 = new TableCell();
                ArrayList tempArray = new ArrayList();

                tempArray = array;

                string cellText = tempArray[i].ToString();
                tempCell.Text = cellText;

                Button btn = new Button();
                btn.CssClass = "buttonClass";
                btn.CommandArgument = tempArray[i].ToString();
                btn.CommandName = "DocumentShow";
                btn.Click += new EventHandler(BtnDocumentShow);
                tempCell1.Controls.Add(btn);
                tempRow.Cells.Add(tempCell);
                tempRow.Cells.Add(tempCell1);
                BrowsingView.Rows.Add(tempRow);
            }
        }

Wie ihr hier seht, werden für jedes Element ein eigener EventHandler erstellt. Hier der Source des BtnDocumentShow:

Code:
        protected void BtnDocumentShow(object sender, EventArgs e)
        {
            Button btn = sender as Button;
            ErrorStatus.Text = "All Documents loaded";
            Session["CurrentProjectName"] = btn.CommandArgument.ToString();
            showDocuments(btn.CommandArgument.ToString());
            showHistory("asdf");
        }

Beim Drücken dieses Buttons im Feld 1, werden im Feld 2 alle Dokumente dargestellt..
Somit bis hier her keine Probleme.

Nun kommt die Krux. Im zweiten Feld, werden alle Dokumente angezeigt,
also die Methode "showDocuments" ausgeführt.

(bitte beachtet nicht, wie ich zu den Dokumenten komme, ich weiss, ist ein schlechter Programmier Stil);

Methode showDocument:
Code:
private void showDocuments(string projectName)
        {
            ArrayList documents = new ArrayList();
            string projectID;

            projectID = db.getProjectID(projectName);
            Session["CurrentProjectID"] = projectID.ToString();
            documents = db.get_documents(projectID);

            for (int i = 0; i < documents.Count; i++)
            {
                TableRow tempRow = new TableRow();
                TableCell tempCell = new TableCell();
                TableCell tempCell1 = new TableCell();
                ArrayList tempArray = new ArrayList();
                
                tempArray = documents;

                string cellText = tempArray[i].ToString();
                tempCell.Text = cellText;
                tempCell1.HorizontalAlign = HorizontalAlign.Center;

                Button btn = new Button();
                btn.CssClass = "buttonClass";
                btn.CommandArgument = tempArray[i].ToString();
                btn.CommandName = tempArray[i].ToString();
                btn.Click += new EventHandler(BtnHistoryShow);

                tempCell1.Controls.Add(btn);
                tempRow.Cells.Add(tempCell);
                tempRow.Cells.Add(tempCell1);
                DocumentView.Rows.Add(tempRow);
            } 
        }

Hier werden die ganzen Dokumente aufgelistet und die entsprechenden HistoryButtons generiert.

Code Der BtnHistoryShow
Code:
protected void BtnHistoryShow(object sender, EventArgs e)
        {
            Button btn = sender as Button;
            ErrorStatus.Text = "All older Versions loaded";
            showProjects();
            showDocuments(Session["CurrentProjectName"].ToString());
            showHistory("101608");
        }

Noch als Anmerkung: Die Methode showHistory ist noch nicht ganz implementiert.

ABER

Wenn ich einen Break-Point nun in der Methode BtnHistoryShow auf diesen Befehl lege
"Button btn = sender as Button" hält das System nie..

D.h. ich komme gar nicht erst zu diesem Break-Point. Habe via eines Assistenten Hilfe gesucht. Er hat mir gesagt, ich soll die Methode onPreRender() implementieren. Dies habe ich getan. Aber ich gelange trotzdem NIE zu dem obengenannten Breakpoint.

Methode onPreRender()
Code:
        protected override void OnPreRender(EventArgs e)
        {
            string projectName = (Session["CurrentProjectName"] != null) ? Session["CurrentProjectName"].ToString() : "";
            string projectID = (Session["CurrentProjectID"] != null) ? Session["CurrentProjectID"].ToString() : "";
            showDocuments(projectName);
            showHistory(projectID);
            base.OnPreRender(e);
        }

Kann mir jemand erklähren, wieso es nicht funktioniert? Oder noch besser, kann mir jemand sagen, wie ich es fertig bringen kann, dass es Funktioniert?


Ich danke euch schon mal im voraus für eure Hilfe!!
 

Anhänge

  • aufbau_site.JPG
    aufbau_site.JPG
    9,1 KB · Aufrufe: 20
Zuletzt bearbeitet:
Zurück