Interaktion zwischen C# und ASP.NET

xloouch

Erfahrenes Mitglied
Hallo zusammen

Habe ein kleines Problem. Ich habe eine ASPX Site, welche Tabellen enthält. Die einzelnen Tabellen werden via C# gefüllt. Den Code poste ich anschliessend.

Das Problem ist nun, wie ich in eine Tabelle einen Button, bzw ein Bild reinbekomme, welche mir die anderen Tabellen füllt.

Hier mal der ASP.NET-Code für die Tabelle:
Code:
<asp:Table ID="BrowsingView" runat="server" Width="280px" HorizontalAlign="Left">
</asp:Table>

Hier der dazugehörige C#-Code, welcher die Tabelle füllt, und gleich das Bild für den Button einfügt:
Code:
        private void showProjects(ArrayList array)
        {
            TableHeaderCell header = new TableHeaderCell();
            TableHeaderCell header1 = new TableHeaderCell();
            header.Text = "Projektname";
            header.Width = 200;
            header.Font.Bold = true;
            header.BackColor = Color.Gray;
            header.HorizontalAlign = HorizontalAlign.Center;
            header.VerticalAlign = VerticalAlign.Top;
            header1.Text = "";
            header1.Width = 50;
            header1.BackColor = Color.Gray;
            TableRow headerRow = new TableRow();
            headerRow.Cells.Add(header);
            headerRow.Cells.Add(header1);
            BrowsingView.Rows.AddAt(0, headerRow);


            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;

                tempCell.Text =tempArray[i].ToString();
                tempCell1.Text = "<img src='./intranet_files/project_view.jpg' Alt='Projekt " +tempArray[i].ToString()+" ansehen'>";
                tempRow.Cells.Add(tempCell);
                tempRow.Cells.Add(tempCell1);
                BrowsingView.Rows.Add(tempRow);
            }
        }

Die ArrayList, die übergeben wird, ist eine aus einer MSSQL-05 gelesene Query.

Wie gezeigt, wird in der Zeile:
Code:
 tempCell1.Text = "<img src='./intranet_files/project_view.jpg' Alt='Projekt " +tempArray[i].ToString()+" ansehen'>";

Ein Bild eingefügt.

Meine Frage ist nun, wie kann ich das bewerkstelligen, dass beim Klick auf das Bild, alle Dokumente in der zweiten Tabelle angezeigt werden? (Die Dokumente sind alle via einer eindeutigen ID zu identifizieren)

Wenn ihr wollt, kann ich euch auch den Code der Datenbankklasse Posten, bzw der Methode, welche die Projekte ausliest.

Danke vielmals im vorraus für eure Hilfe
 
Du könntest aus dem <img .../> einen Button machen der einen Postback auslöst. Im OnClick-Event ermittelst du dann, welcher Button geklickt wurde und zeigst je nachdem die Daten in der anderen Tabelle an, die zugeordnet sind.

Dazu benötigst du zunächst einmal die Methode die auf dem Server ausgeführt wird

Code:
protected void BtnDoSomething_Click(object sender, EventArgs e)
{
  //MachWasIchWill();
}

Beim erstellen der Tabelle erzeugst du dann anstatt
Code:
tempCell1.Text = "<img src='./intranet_files/project_view.jpg' Alt='Projekt " +tempArray[i].ToString()+" ansehen'>";

einen Button:

Code:
Button btn = new Button();
//CSS-Class zuweisen damit du das Bild hast
btn.CssClass = "MyImageButtonClass";

// Hier kannst du Infos hinterlegen die du in der Ziel-Methode auslesen kannst
btn.CommandArgument = "CommandArg";
btn.CommandName = "CommandName";
//Noch den Click-Event anhängen
btn.Click +=new EventHandler(BtnDoSomething_Click);

//Den Button jetzt nur noch in die Zelle und das sollte es gewesen sein
tempCell1.Controls.Add(btn);

Wenn du jetzt auf den Button klickst landest du in deiner Methode BtnDoSomething, hier kannst du CommandName und CommandArgument ganz einfach auslesen und das tun, was du tun willst

Code:
protected void BtnDoSomething_Click(object sender, EventArgs e)
{
   Button btn = sender as Button;
   if(btn == null) return;

   switch(btn.CommandArgument)
   { ......... }
}


So in etwa könnte das passen, habs nicht ausprobiert, sollte aber nah an der Lösung sein
 
Danke dir M4st3r

Genau das habe ich gesucht.. nun habe ich aber ein weiteres Problem.

Habe nun den Code so erweitert:

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

            TableHeaderCell header = new TableHeaderCell();
            TableHeaderCell header1 = new TableHeaderCell();
            header.Text = "Projektname";
            header.Width = 200;
            header.Font.Bold = true;
            header.BackColor = Color.Gray;
            header.HorizontalAlign = HorizontalAlign.Center;
            header.VerticalAlign = VerticalAlign.Top;
            header1.Text = "";
            header1.Width = 50;
            header1.BackColor = Color.Gray;
            TableRow headerRow = new TableRow();
            headerRow.Cells.Add(header);
            headerRow.Cells.Add(header1);
            BrowsingView.Rows.AddAt(0, headerRow);


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

                tempArray = array;
                //tempArray = (ArrayList)array[0];
                //tempArray1 = (ArrayList)array[1];

                tempCell.Text =tempArray[i].ToString();
                //tempCell1.Text = tempArray1[1].ToString();
                Button btn = new Button();
                btn.CssClass = "buttonClass";
                btn.CommandArgument = i.ToString();
                btn.Click += new EventHandler(BtnDocumentShow);
                tempCell1.Controls.Add(btn);
                //tempCell1.Text = "<img src='./intranet_files/project_view.jpg' Alt='Projekt " +tempArray[i].ToString()+" ansehen'>";
                tempRow.Cells.Add(tempCell);
                tempRow.Cells.Add(tempCell1);
                BrowsingView.Rows.Add(tempRow);
            }
        }

Zudem hab ich im CSS-File folgende Classe hinzugefügt:
Code:
#buttonClass
{
	background-image: url(./intranet_files/project_view.jpg);
}

Aber leider zeigt es mir keinen Button an..

(Sorry, bin nicht so der CSS Hirsch.. Ich entschuldige mich dafür)

---- edit---

Hier die Ausgabe vom Browserquelltext:

Code:
<td><input type="submit" name="ctl00" value="" class="buttonClass" /></td>


---- /edit ----


Dessweiteren würde es mich interessieren ob man diese Zeile angeben muss:

btn.CommandName = "CommandName";


Danke dir im voraus für deine weitere Hilfe
 
Zuletzt bearbeitet:
Danke für die Hilfe.. hab den Fehler selber gefunden.

Lag daran, dass ich von der Datei aus geschaut habe, welche das CSS-File aufruft. Anstatt vom CSS-File selber. Darum hat er mir das Bild auch nicht angezeigt.

M4st3r ich danke dir nochmals für deine schnellle Hilfe..

Somit ist dieses Thema beendet
 

Neue Beiträge

Zurück