Deprecated: Function set_magic_quotes_runtime() is deprecated in /var/www/web1643/html/phpBB3/common.php on line 106
[phpBB Debug] PHP Notice: in file /includes/session.php on line 916: Cannot modify header information - headers already sent by (output started at /common.php:106)
[phpBB Debug] PHP Notice: in file /includes/session.php on line 916: Cannot modify header information - headers already sent by (output started at /common.php:106)
[phpBB Debug] PHP Notice: in file /includes/session.php on line 916: Cannot modify header information - headers already sent by (output started at /common.php:106)

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 112

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 112

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 112

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 112

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 112

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 112

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 112

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/web1643/html/phpBB3/includes/bbcode.php on line 112
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 3526: Cannot modify header information - headers already sent by (output started at /common.php:106)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 3528: Cannot modify header information - headers already sent by (output started at /common.php:106)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 3529: Cannot modify header information - headers already sent by (output started at /common.php:106)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 3530: Cannot modify header information - headers already sent by (output started at /common.php:106)
ppsGrid.de • Thema anzeigen - Value Eigenschaft und Anzeige Zellenwert Embedded Control

Value Eigenschaft und Anzeige Zellenwert Embedded Control

Hier werden Fragen zur Programmierung des ppsGrids...

Value Eigenschaft und Anzeige Zellenwert Embedded Control

Beitragvon eoe am 08.05.2008, 14:30

Hallo Torsten,

nach einiger Zeit mal wieder eine kleine Frage von mir. Ich habe meine Grids in der Art erweitert, so dass ich in der ersten Spalte eine Checkbox integriert habe. Ändert sich deren Wert, so sollen sich auch alle Werte von untergeordneten Knoten mit ändern. Ich habe es mir jetzt mal sehr einfach gemacht und folgenden kleinen Algo verwendet, der das Grid traversiert, und dann einfach die Value Eigenschaft der entsprechenden Zelle auf true setzt.

Code: Alles auswählen
protected virtual void verarbeiteStatusUntergeordnetePositionenBeiCheckChange(bool check, GridRow row)
      {
         if (Cols[sCheck] != null )
         {
            if ( row != null)
            {
               GridRow next = row.Outline.FirstChild;
            
               while (next != null )
               {
                  if ( next.Outline.Count > 0 )
                  {
                     verarbeiteStatusUntergeordnetePositionenBeiCheckChange(check, next);
                  }

                  if ( next.Enabled != eBoolean.False )
                  {
                     next[sCheck].Value = true;                                       
                  }

                  next = next.Outline.NextRow;
               }      
            }      
         }
      }


Allerdings hat das leider keine Auswirkung auf die Anzeige. Nur in einigen Fällen (so nach etwa 5 – 10 Änderungen einer Checkbox), ändern sich die Kinder mit. Woran kann das liegen? Ist es überhaupt richtig, hier über die Value Eigenschaft der Zelle zu gehen, oder muss ich direkt auf das Emmbedded Control zugreifen?

Danke und Gruß

Erik
eoe
 
Beiträge: 38
Registriert: 17.04.2007, 15:02
Wohnort: Oedheim

Beitragvon torsten am 08.05.2008, 15:28

Hallo Erik

Mit dem Demo bis du viel zu kompliziert :-)

Code: Alles auswählen
protected virtual void verarbeiteStatus(bool check, GridRow row){
  if(Cols[sCheck] != null ){
    if(row != null){
      for(int rw=row.Row+1;rw<Rows.Count;rw++){
        GridRow next=this.Rows[rw];

        if(next.Outline.Level>row.Outline.Level){
          if(next.Enabled!=eBoolean.False)
            next[sCheck].Value = true; // kommt da nicht 'check' rein ?
        }
        else
          break;
      }
    }
  }         
}


Einfach alle Zeilen unterhalb der angeklickten abändern, solange der Level größer ist als der Level der angeklickten Zeile.
Das war's.
Bei deinem Demo werden die Checkboxen wegen 'rekursivität' mehrfach angeklickt.

Gruß Torsten

PS.: Die Zeilen sind freihand kodiert. Fehler nicht ausgeschlossen
torsten
Site Admin
 
Beiträge: 92
Registriert: 02.05.2006, 09:04
Wohnort: Bremen

Beitragvon eoe am 08.05.2008, 15:58

Hallo Torsten,

danke für den Tipp. Allerdings sehe ich immer noch nicht, dass sich die Checkbox der untergeordneten Knoten ändert. Bei einem Click ändert sich nur die Zelle, die angewählt wird. Bei den anderen ändert sich die anzeige nicht, obwohl der Wert richtig gesetzt ist.

Was muss ich tun?

Danke

Erik
eoe
 
Beiträge: 38
Registriert: 17.04.2007, 15:02
Wohnort: Oedheim

Beitragvon torsten am 08.05.2008, 16:36

Hallo Erik

Hast du die Checkbox über "ControlEditInfo.Control" verbunden ?
Welche Eigenschaft hast du unter "ControlEditInfo.PropertyName" gesetzt ?

Gruß Torsten
torsten
Site Admin
 
Beiträge: 92
Registriert: 02.05.2006, 09:04
Wohnort: Bremen

Beitragvon eoe am 08.05.2008, 16:56

Hallo Torsten,

ich denke, ich mache soweit alles richtig.

Code: Alles auswählen
CheckBox c2 = new CheckBox();
               c2.CheckedChanged += mOnAuswahlCheckChanged;
               c2.Appearance = Appearance.Button;
               row[key].ControlEditInfo.Control = c2;
               row[key].ControlEditInfo.PropertyName = "Checked";


Aber keine Garantie...

Erik
eoe
 
Beiträge: 38
Registriert: 17.04.2007, 15:02
Wohnort: Oedheim

Beitragvon torsten am 09.05.2008, 09:33

Hallo Erik

Heute morgen hab' ich ein kleines Demo geschrieben:

Code: Alles auswählen
    private void cbox_CheckedChanged(object sender, System.EventArgs e) {
      CheckBox cbox=(CheckBox)sender;
      int row=grid.FocusCell.Y;
     
      for(int rw=row+1;rw<grid.Rows.Count;rw++){
        if(grid.Rows[rw].Outline.Level>grid.Rows[row].Outline.Level)
          grid["colCheck",rw].Value=cbox.Checked;
        else
          break;
        }
      break;
      }
    }


Wenn du auf jeden Klick reagieren willst, darfst du nicht den Value-Wert der Zelle verwenden, sondern musst den Check-Wert der Checkbox benutzen.
Der Value-Wert der Zelle wird erst erneuert, wenn der "Edit"-Modus beendet wird (spr., wenn das Steuerelement den Fokus verliert und das "AfterEdit"-Eregnis auftritt). Die Verbindung zwischen der Checkbox und der dazugehörigen Zelle bekommst du immer über die Fokuszelle (da ja nur eine Zelle aktiv sein kann).

Das gilt für alle "Embedded Controls": Wenn du auf Ereignisse des Controls reagieren möchtest (als sei das Controls irgendwo auf dem Formular), dann fragst du das Control selbst ab und stellst dann die Verbindung zum Grid bzw. zur Zelle mittels Fokuszelle her. Bsw. kannst du bei einer Textbox die Text-Eigenschaft als "PropertyName" angeben, zusätzlich aber auch über das "TextChanged"-Ereignis Einfluß auf die Zelle nehmen. Das macht das ganze ziemlich flexilbel. Aufpassen muss man dann nur, das durch "rekursivitäten" man sich selbst nicht "durch die Brust ins Auge piekst". :-)

Gruß Torsten
torsten
Site Admin
 
Beiträge: 92
Registriert: 02.05.2006, 09:04
Wohnort: Bremen

Beitragvon eoe am 09.05.2008, 13:21

Hallo Torsten,

irgendwie steht bei mir gerade der Elefant auf der Leitung. Ich habe jetzt die Sachen umprogrammiert und direkt auf die Checkboxen zugegriffen sowie die Events bei rekursiven Aufrufen unterdrückt.

Allerdings bekomme ich die Anzeige der "Häckchen" erst dann, wenn ich nach der Aktion an eine beliebige Stelle im Grid clicke. Ich stelle mich wahrscheinlich gerade etwas dumm an, aber ich stehe voll auf dem Schlauch.

Danke und Gruß

Erik
eoe
 
Beiträge: 38
Registriert: 17.04.2007, 15:02
Wohnort: Oedheim

Beitragvon torsten am 09.05.2008, 18:23

Hallo Erik
Mmmh, eigentlich ist das ganze doch garnicht soooo kompliziert, oder ?
Nochmal als ganzes...

Code: Alles auswählen
namespace CtrlOutline {
  public partial class Form1: Form {
    public Form1() {
      InitializeComponent();

      GridRow row;
      Random rnd = new Random();

// eine Checkbox zur Eingabe
      CheckBox cbox = new CheckBox();
      cbox.Dock = DockStyle.Fill;
      cbox.CheckAlign = ContentAlignment.MiddleCenter;

      grid1.Cols["colCheck"].ControlEditInfo.Control = cbox;
      grid1.Cols["colCheck"].ControlEditInfo.PropertyName = "Checked";
      cbox.CheckedChanged += new System.EventHandler(chk_CheckedChanged);

// eine Checkbox zur Anzeige
      cbox = new CheckBox();
      cbox.Dock = DockStyle.Fill;
      cbox.CheckAlign = ContentAlignment.MiddleCenter;
      grid1.Cols["colCheck"].ControlDisplayInfo.Control = cbox;
      grid1.Cols["colCheck"].ControlDisplayInfo.PropertyName = "Checked";

// grid vorbereiten
      grid1.BeginUpdate();
      grid1.AddRows(10);
      grid1.Cells["colNo", 0].Value = "Nr.";
      grid1.Cells["colOutline", 0].Value = "Outline";
      grid1.Cells["colCheck", 0].Value = "Check";

// zufällige Baumstruktur erzeugen
      int y = grid1.FixedRowCount;
      while (y < grid1.Rows.Count) {
        row = grid1.Rows[y];
        if (rnd.Next(10) > 2 + row.Outline.Level)
          row.Outline.AddChilds(rnd.Next(8 - row.Outline.Level) + 1);

// Checkbox per Zufall an/aus
        grid1.Cells["colCheck", y].Value = (rnd.Next(2) == 0 ? false : true);
        y++;
      }
      grid1.EndUpdate();
    }

// Checkbox wurde geklickt, auf andere Checkboxen erweitern
    private void chk_CheckedChanged(object sender, System.EventArgs e) {
      CheckBox cbox = (CheckBox)sender;
      int row = grid1.FocusCell.Y;

      grid1.BeginUpdate();
      for (int rw = row + 1; rw < grid1.Rows.Count; rw++) {
        if (grid1.Rows[rw].Outline.Level > grid1.Rows[row].Outline.Level)    // child der angeklickten Zeile ?
          grid1["colCheck", rw].Value = cbox.Checked;                                       // Value's setzen durch angeklickte Checkbox
        else
          break;
        grid1.EndUpdate();
      }
    }
  }
}


Wenn es nicht funzt oder du das alles nicht so richtig verstanden hast, dann schreib' mal, wo dein Elefant auf dem Schlauch steht...
Das gesamte Projekt schick' ich dir noch per Mail....
Gruß Torsten
torsten
Site Admin
 
Beiträge: 92
Registriert: 02.05.2006, 09:04
Wohnort: Bremen

Re: Value Eigenschaft und Anzeige Zellenwert Embedded Control

Beitragvon eoe am 24.06.2008, 11:01

Hallo Torsten,

sorry für die späte Antwort. Ich war etwas Land unter und konnte mich nicht weiter um das hier beschriebene Problem kümmern. Wollte aber auch nur sagen, dass ich mir die Sache am WE angesehen habe und es jetzt richtig gut funktioniert.

Vielen Dank für deine (wie immer) prima Unterstützung!!!

Erik
eoe
 
Beiträge: 38
Registriert: 17.04.2007, 15:02
Wohnort: Oedheim


Zurück zu Fragen zur Programmierung

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron