Autor Beitrag
mats74
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: Di 31.03.20 08:15 
Hallo zusammen

Ich habe eine Tabelle in einem UpdatePanel erstellt:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
  <ContentTemplate>
  ...
    <asp:Table ID="Table1" runat="server">
    </asp:Table>
  ...
  </ContentTemplate>
</asp:UpdatePanel>


... und erstelle den Inhalt (Spalte mit Checkbox) in einem Event:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
private void MeinEvent1 ()
{
...
// Selektierung
TableCell cell1 = new TableCell();
cell1.Width = 20;
cell1.Text = "";
cell1.VerticalAlign = VerticalAlign.Top;
System.Web.UI.WebControls.CheckBox cb1 = new System.Web.UI.WebControls.CheckBox();
cb1.AutoPostBack = true;
cb1.Checked = false;
cb1.CheckedChanged += new EventHandler(MeinEvent2);
cell1.Controls.Add(cb1);
row1.Cells.Add(cell1);
...
}

private void MeinEvent2 (object sender, EventArgs e)
{
  MessageBox.Show("Hallo zusammen");
}


Der Event für den Inhalt der Tabelle wird beim Page-Load der Seite ausgeführt.

Nun mein Problem:
- Beim ersten Selektieren der Checkbox verschwindet der Hacken wieder (Checked-Controls.Count = 0)
- Ab dem zweiten Selektieren bleibt der Hacken auf der Checkbox bestehen (Checked-Controls.Count = 1)

Warum bleibt die Selektierung beim ersten Mal nicht bestehen?
Es scheint, wie wenn die Checkbox erst beim zweiten Mal "richtig" initialisiert oder vorhanden ist.

Vielen Dank für eure Hilfe.

_________________
Gruss
mats74
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4791
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 31.03.20 09:39 
Du erstellst doch zuerst die CheckBox ohne Haken: cb1.Checked = false;?

Oder meinst du mit Selektierung (Navigation per Tab o.ä.) eigentlich Aktivierung (z.B. per Mausklick)?

Und verstehe ich dein 2. Problem richtig, daß danach der Haken dauerhaft gesetzt bleibt (auch wenn du danach weiter drauf klickst)?
Erscheint denn jedesmal die MessageBox?
mats74 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: Di 31.03.20 10:03 
Hallo Th69

Beim Erstellen ist die CheckBox ohne Hacken gesetzt / cb1.Checked = false;

Wenn ich nun das erste Mal (nach dem Load-Event der Seite) auf die CheckBox klicke erscheint der Hacken und danach verschwindet er gleich wieder.
Klicke ich zum zweiten Mal darauf, erscheint der Hacken wieder und bleibt bestehen.
Klicke ich zum dritten Mal darauf, geht der Hacken wie gewohnt wieder weg.
Also nach dem zweiten Mal klicken ist die Funktionalität der CheckBox wie gewohnt.

Die MessageBox erscheint nur nach dem ersten Mal klicken.
Beim ersten Mal klicken wird der Eventhandler also nicht durchlaufen :( .
Der Count der selektierten CheckBoxen steht ebenfalls auf 0.

Wenn ich keinen Eventhandler an die CheckBox hänge. bleibt der Hacken bestehen.
Aber nur soweit bis ein anderes Steuerelement bedient wird, z.B. einen Button.
Danach verschwindet der Hacken der CheckBox aus der Tabelle wieder (auch nur beim ersten Mal der Selektierung der CheckBox).

Moderiert von user profile iconTh69: C#-Tags hinzugefügt

_________________
Gruss
mats74
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4791
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 31.03.20 11:47 
Hat das evtl. etwas mit dem AutoPostBack zu tun?
mats74 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: Di 31.03.20 12:42 
Wenn ich das AutoPostBack ausschalte bleibt der Hacken bestehen.
Bei der Bedienung eines anderen Steuerelements (Buttons) wird danach der Hacken auf der CheckBox in der Tabelle entfernt.

Wenn ich das AutoPostBack einschalte, geht der Hacken nach dem Klick auf die CheckBox ohne weitere Aktion wieder weg.
Wie bereits gesagt, nur beim ersten Mal klicken auf die CheckBox der Tabelle.
Es können auch auf mehrere CheckBoxs der Tabelle geklickt werden, es werden alle Selektierungen wieder entfernt.

Dieses Verhalten habe ich auf unterschiedlichen Browsern festgestellt.
Der Browser hat wahrscheinlich keinen Einfluss.

_________________
Gruss
mats74
mats74 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: Di 31.03.20 14:15 
... das gleiche Verhalten habe ich bei einer TextBox:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
...
TableCell cell2 = new TableCell();
cell2.Width = 300;
cell2.Text = "";
System.Web.UI.WebControls.TextBox tb21 = new System.Web.UI.WebControls.TextBox();
tb21.TextMode = TextBoxMode.MultiLine;
tb21.BorderStyle = System.Web.UI.WebControls.BorderStyle.None;
tb21.Width = 295;
tb21.Height = 50;
tb21.Font.Bold = true;
tb21.Font.Name = "Arial";
tb21.Text = "";
cell2.Controls.Add(tb21);
row1.Cells.Add(cell2);
...


Ich kann problemlos in der Tabelle in die TextBox schreiben.
Wenn ich nun durch einen Button-Klick durch die Tabelle iteriere, erhalte ich leeren Text aus dem Control tb21 (tb21..Text).
Durch den Button-Klick wird vor dem Durchlauf der Inhalt entfernt.
Somit wäre dann auch die CheckBox-Problematik erklärt.

Wie komme ich nun durch einen Button-Klick vor dem Durchlauf an den Inhalt der TextBox ran?
Könnte dies mit DataBinding zu tun haben?

_________________
Gruss
mats74
mats74 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: Mi 01.04.20 13:07 
Hallo zusammen

Die Lösung ist (nach Stunden der Erkenntnis) ganz einfach:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
private void MeinEvent1 ()
{
...
// Selektierung
TableCell cell1 = new TableCell();
cell1.Width = 20;
cell1.Text = "";
cell1.VerticalAlign = VerticalAlign.Top;
System.Web.UI.WebControls.CheckBox cb1 = new System.Web.UI.WebControls.CheckBox();

// ID vergeben
cb1.ID = "Eindeutige_ID";
// Postback setzen
cb1.AutoPostBack = false;

cb1.Checked = false;
cb1.CheckedChanged += new EventHandler(MeinEvent2);
cell1.Controls.Add(cb1);
row1.Cells.Add(cell1);
...
}


Ich habe dies leider erst bemerkt, als ich Zwischenspeicherungen der Zustände und Inhalte mit den entsprechenden Steuerelement_ID's erstellen wollte.
In diesem Sinne, Fall gelöst :wink:

_________________
Gruss
mats74