ppsGrid Class Library
HasChild Property
NamespacesppsGridGridOutlineRowHasChild
ppsGrid (c] 2004-2007 by Torsten Oberprieler
Ruft einen Wert ab, der angibt, ob das Strukturelement untergeordnete Zeilen besitzt, oder legt diesen fest.
Declaration Syntax
C#Visual BasicVisual C++
public bool HasChild{ get; set;}
Public Property HasChild As Boolean
public:
property bool HasChild {
	bool get ();
	void set (bool value);
}
Value
true, wenn die Zeile untergeordnete Zeilen enthält, ansonsten false. Der Standardwert ist falsch
Remarks
Mittels der Eigenschaft HasChild können Sie feststellen, ob eine Zeile untergeordnete Zeilen enthält. Ist die Eigenschaft true, wird die Zeile mit dem Plus-/Minus-Symbol (genauer: Die Spalten mit der Eigenschaft OutlineMode = true) dargestellt. Wird die letzte, untergeordnete Zeile gelöscht, verschwindet auch das Symbol.
Die Eigenschaft HasChild läßt auch den schreibenden Zugriff zu. Wenn Sie feststellen, daß eine Zeile untergeordnete Zeilen haben soll, muß normalerweise mindestens eine Zeile als "Child"-Zeile eingefügt werden, damit das Symbol Plus/Minus angezeigt wird. Klickt der Benutzer auf das Plus-/Minus-Symbol, muß diese Zeile gelöscht werden, um anschließend die untergeordneten Daten einzufügen und als Zeilen anzuzeigen. Dieser Umstand entfällt, weil Sie HasChild einfach auf true setzen können, um dem Benutzer anzuzeigen, daß die Zeile untergeordnete Zeilen enthält.
Examples
CopyC#
grid.AddCols(1);                          // eine Spalte
grid.AddRows(1);                          // ..und eine Zeile
grid[0,0].Value = "Hallo";                // kleiner Text dazu
grid.Cols[0].Outline = true;              // Spalte hat Strukturknoten
grid.Rows[0].Outline.HasChild = true;     // Zeile hat plus/minus-Symbol
Beispiel 1:
Das erste Beispiel erzeugt nur eine Zelle. Die letzte Programmzeile erzeugt das Plus/Minus-Symbol.


CopyC#
string[] drv=Environment.GetLogicalDrives();               // liste der Laufwerke

grid.AddCols(1);                                           // eine Spalte und..
grid.AddRows(1);                                           // ..vorerst nur 1 Zeile
                                                           // Spalte..
grid.Rows[0].Fixed = true;                                 // ..Kopfzeile
grid.Cols[0].Outline = true;                               // ..als Strukturknoten
grid.Cols[0].Width = 240;                                  // ..Weite
grid[0,0].Value = "Ordner";                                // ..Titel
grid.AddRows(drv.Length);                                  // Platz für Laufwerke

for(int i=0; i<drv.Length; i++){                           // Laufwerke..
  grid[0,i+1].Value = drv[i];                              // ..Name zeigen
  try{
    DirectoryInfo dir = new DirectoryInfo(drv[i]);         // ..Verzeichnis-Info
    bool hasDir = (dir.GetDirectories().Length>0);         // ..prüfen auf Unterverzeichnisse
    grid.Rows[i+1].Outline.HasChild = hasDir;              // ..anzeigen (plus/minus-Symbol)
  }
  catch{}                                                  // keine Disc eingelegt ?
}

private void grid_BeforeExpand(object sender, ppsGrid.BeforeExpandEventArgs e) {
  if(e.FirstTime){                                         // ordner beim 1. klick lesen
    GridRow           row = grid.Rows[e.Row];              // angeklickte Zeile
    string            drv = row.Outline.FullPath(0,@"\");  // kompl.Pfad ("c:\Windows\System32")
    DirectoryInfo     dir = new DirectoryInfo(drv);        // Infos's darüber
    FileSystemInfo[]  srt = dir.GetDirectories();          // Verzeichnisse einlesen
    int               cnt = 1;
    bool              hasDir;

    grid.Rows[e.Row].Outline.AddChilds(int)(srt.Length);        // Zeilen erzeugen
    foreach(DirectoryInfo d in srt){                       // alle Unterverzeichnisse
      row = grid.Rows[e.Row+cnt];                          // ..in diese Zeile
      row[0].Value = d.Name;                               // ..Name vom Verzeichnis
      hasDir = (d.GetDirectories().Length>0);              // ..prüfen auf Unterverzeichnisse
      row.Outline.HasChild = hasDir;                       // ..anzeigen (plus/minus-Symbol)
      cnt++;                                               // ..nächste Zeile
    }
  }
}
Beispiel 2:
Das zweite Beispiel soll verdeutlichen, wie der schreibende Zugriff auf die HasChild-Eigenschaft in der Praxis genutzt werden kann. Zuerst werden die Laufwerke angezeigt. Bereits dabei wird mittels der Variable "hasDir" geprüft, ob die Laufwerke mindestens ein Unterverzeichnis enthalten. Dann werden nämlich die Symbole "Plus/Minus" angezeigt (obwohl die Unterverzeichnisse weder eingelesen noch als Zeilen eingefügt wurden). Beim Aufklappen, Einlesen und Anzeigen der Verzeichnisse geschieht dasselbe wie bei den Laufwerken.
See Also

Assembly: ppsGrid (Module: ppsGrid) Version: 1.3.4.0