2014-07-04 14 views
5

Devo impostare l'elemento selezionato della mia griglia di proprietà. Sto ricevendo un eventargs, che memorizza una stringa (questa stringa mi dice quale proprietà nel mio propertygrid l'utente vuole selezionare). Il problema è che non riesco a trovare una collezione di elementi della griglia, posso selezionarne uno. Inoltre, non so come creare correttamente un nuovo oggetto GridItem e impostare la proprietà SelectedGridItem.Come impostare l'elemento selezionato della griglia di proprietà

GridItem gridItem = ???; 
detailsPropertyGrid.SelectedGridItem = gridItem; 

grazie per il vostro aiuto.

Edit:

sua quasi ora di lavoro si tahnk molto.

GridItem gi = this.detailsPropertyGrid.EnumerateAllItems().First((item) => 
       item.PropertyDescriptor != null && 
       item.PropertyDescriptor.Name == colName); 
     this.detailsPropertyGrid.SelectedGridItem = gi; 
     this.detailsPropertyGrid.Select(); 

L'unico problema è: Ora seleziona il campo Nome proprietà. Posso impostare lo stato attivo sul campo di input della proprietà?

risposta

7

Qui ci sono un paio di estensioni PropertyGrid che possono enumerare tutti gli elementi in una griglia. Ecco come puoi usarlo per selezionare un articolo:

// get GridItem for a property named "Test" 
    GridItem gi = propertyGrid1.EnumerateAllItems().First((item) => 
        item.PropertyDescriptor != null && 
        item.PropertyDescriptor.Name == "Test"); 

    // select it 
    propertyGrid1.Focus(); 
    gi.Select(); 

    // enter edit mode 
    SendKeys.SendWait("{F4}"); 

    ... 

    public static class PropertyGridExtensions 
    { 
     public static IEnumerable<GridItem> EnumerateAllItems(this PropertyGrid grid) 
     { 
      if (grid == null) 
       yield break; 

      // get to root item 
      GridItem start = grid.SelectedGridItem; 
      while (start.Parent != null) 
      { 
       start = start.Parent; 
      } 

      foreach (GridItem item in start.EnumerateAllItems()) 
      { 
       yield return item; 
      } 
     } 

     public static IEnumerable<GridItem> EnumerateAllItems(this GridItem item) 
     { 
      if (item == null) 
       yield break; 

      yield return item; 
      foreach (GridItem child in item.GridItems) 
      { 
       foreach (GridItem gc in child.EnumerateAllItems()) 
       { 
        yield return gc; 
       } 
      } 
     } 
    } 
+0

Grazie mille !!! Puoi per favore dare un'occhiata alla mia modifica? grazie – user3596113

+0

Puoi usare SendKeys per andare in modalità modifica. Vedi la mia modifica. –

+0

Non ho visto un metodo di estensione così dolce e utile per un po 'di tempo. Semplicemente fantastico. Non avrei potuto pensare in questo modo. Grazie! – RBT

Problemi correlati