2012-08-30 13 views
6

Questo è correlato a un GridView di XExGrid di DevExpess.Rimozione dell'icona Drilldown Plus (+) da XtraGrid GridView's MasterRow quando ChildRow non ha dati

Ho bisogno di rimuovere lo drilldown plus icon (+) da qualsiasi MasterRow in un GridView che non ha dati per il suo ChildRow.

Attualmente, tutte le righe (MasterRows) nel mio GridView visualizzano drilldown plus icon (+). Quando si fa clic su drilldown plus icon (+), la ChildRow viene visualizzata con i dati appropriati. Ma se ChildRow non ha dati, la ChildRow non viene visualizzata (espansa). Devo rendere invisibile lo drilldown plus icon (+) in modo che l'utente non lo veda se non ci sono dati in ChildRow.

Ho una funzione che verifica se i dati sono disponibili per ChildRow, che consente quindi a ChildRow di visualizzare (espandere) o meno.

Ho utilizzato GridView.OptionsView.ShowDetailButtons ma che nasconde lo drilldown plus icons (+) su tutte le righe. Questo non funziona per me dal momento che ho solo bisogno di nasconderlo se non ci sono dati per il ChildRow.

Ecco il codice che ho finora:

private void gridView1_MasterRowGetRelationCount(object sender, MasterRowGetRelationCountEventArgs e) 
{ 
    e.RelationCount = 1; 
} 

private void gridView1_MasterRowEmpty(object sender, MasterRowEmptyEventArgs e) 
{ 
    e.IsEmpty = IsRelationEmpty(e.RowHandle, e.RelationIndex); 
} 

bool IsRelationEmpty(int rowHandleX, int relationIndex) 
{ 
    Tuple<string, double, double> row = (Tuple<string, double, double>)gridView1.GetRow(rowHandleX); 
    return rowHandleX == DevExpress.XtraGrid.GridControl.InvalidRowHandle || _tfs._dataDictionary[row.Item1.ToString()].Item2.Count == 0; 
} 

private void gridView1_MasterRowGetChildList(object sender, MasterRowGetChildListEventArgs e) 
{ 
    if (IsRelationEmpty(e.RowHandle, e.RelationIndex)) 
    { 
     return; 
    } 

    Tuple<string, double, double> row = (Tuple<string, double, double>)gridView1.GetRow(e.RowHandle); 
    e.ChildList = _tfs._dataDictionary[row.Item1.ToString()].Item2.ToList(); // _tfs.DictionaryToList(); 
} 

private void gridView1_MasterRowGetRelationName(object sender, MasterRowGetRelationNameEventArgs e) 
{ 
    e.RelationName = "Work Items with no Size Estimate:"; 
} 

Qualsiasi direzione o suggerimento sarebbe molto apprezzato.

Grazie in anticipo,

Marwan (^_^)

risposta

6

vi consiglio di seguire questa discussione DevExpress - How to hide disabled expand/collapse buttons for master rows without detail records

Il XtraGrid non fornisce un'opzione per nascondere master-detail espandi i pulsanti per i dettagli vuoti. È possibile aggirare questa limitazione tramite l'evento CustomDrawCell.

Ecco il codice necessario:

private void gridView1_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e) { 

    GridView view = sender as GridView; 
    if(e.Column.VisibleIndex == 0 && view.IsMasterRowEmpty(e.RowHandle)) 
     (e.Cell as GridCellInfo).CellButtonRect = Rectangle.Empty; 
    } 
} 

Spero che questo aiuto ..

+0

questo ha funzionato splendidamente ... Grazie! –