Diciamo che ho una proprietà che voglio mostrare in un DataGridView, ma non quando lo stesso oggetto è mostrato in un PropertyGrid. So che posso usare [Browsable(false)]
, ma che lo nasconde in entrambe le visualizzazioni. Posso anche fare un gridView.Columns["blah"].Visible = false;
, ma questo è l'opposto di quello che voglio, poiché si nasconde in DataGridView ma non in PropertyGrid. C'è un modo per fare il contrario? (Senza creare un DataTable completamente nuovo solo per contenere gli stessi dati meno un campo, e rebinding di tutto quello invece - questo è davvero un modo scomodo per fare cose.) In alternativa, potrei vivere con una soluzione che aggiunge una colonna al DataGridView questo non è presente nella classe reale.Rendere visibile una proprietà in DataGridView ma NON in PropertyGrid?
risposta
è possibile risolvere questo problema utilizzando la proprietà BrowsableAttributes di un PropertyGrid. In primo luogo, creare un nuovo attributo come questo:
public class PropertyGridBrowsableAttribute : Attribute
{
private bool browsable;
public PropertyGridBrowsableAttribute(bool browsable){
this.browsable = browsable;
}
}
Quindi aggiungere questo attributo a tutte quelle proprietà che si desidera essere visualizzato nel PropertyGrid:
[DisplayName("First Name"), Category("Names"), PropertyGridBrowsable(true)]
public string FirstName {
get { return ... }
set { ... }
}
quindi impostare la proprietà BrowsableAttributes in questo modo:
myPropertyGrid.BrowsableAttributes = new AttributeCollection(
new Attribute[] { new PropertyGridBrowsableAttribute(true) });
Questo mostrerà solo le proprietà attribuite nella griglia della proprietà e DataGridView può ancora accedere a tutte le proprietà con solo un po 'più di sforzo di codifica.
Vorrei ancora andare con Tergiver e chiamare questo comportamento un bug, dal momento che la documentazione dell'attributo Browsable indica chiaramente il suo uso solo per le finestre di proprietà.
(merito va a utente "maro" presso http://www.mycsharp.de/wbb2/thread.php?postid=234565)
Beh, sono passati 3 mesi dall'ultima volta che ho toccato questo progetto, e parti di esso relative a questo sono state completamente refactored, quindi non posso davvero testarlo, ma ho intenzione di andare avanti e accettare comunque questa risposta, perché è l'unico che ho, e _looks_ valido ... –
Mi sono imbattuto in questo qualche giorno fa, avendo lo stesso problema. Funziona sicuramente come un incantesimo! Ma è molto interessante vedere che questo sembra essere stato toccato solo poche volte e solo UNA persona ha trovato una soluzione ... Bene, ora è disponibile anche in inglese. – Sebastian
Accetterò loro quando in realtà rispondere alle mie domande. Metà delle mie domande hanno appena avuto opinioni, per non parlare di buone risposte. –
Lo chiamo bug. 'Browsable' indica in modo specifico che determina la visibilità di un membro in una finestra delle proprietà. Questo non ha nulla a che fare con un DGV. Potresti aprire un problema di connessione, ma le probabilità che lo risolvano sono esattamente zero. Una correzione interromperà indubbiamente il codice esistente. Penso che tu sia sfortunato qui. – Tergiver
Dannazione. Naturalmente, potrebbero aggiungere un nuovo decoratore piuttosto che provare e correggere Browsable, ma fa comunque schifo che non ci sia modo di farlo. Penseresti che non sarebbe una richiesta insolita ... –