这与DevExpess XtraGrid的GridView有关。
我需要从GridView中的任何MasterRow中删除drilldown plus icon (+)
,而它的ChildRow没有任何数据。
当前,我的GridView中的所有行(MasterRows)都显示drilldown plus icon (+)
。单击drilldown plus icon (+)
时,将显示ChildRow和相应的数据。但是,如果ChildRow没有数据,则不会显示(展开)ChildRow。我需要使drilldown plus icon (+)
不可见,以便如果ChildRow中没有数据,则用户看不到它。
我有一个检查数据是否可用于ChildRow的功能,然后该功能允许ChildRow显示(扩展)或不显示。
我使用了 GridView.OptionsView.ShowDetailButtons
,但这在所有行上都隐藏了drilldown plus icons (+)
。这对我来说是行不通的,因为仅在没有有关ChildRow的数据的情况下才需要将其隐藏。
这是我到目前为止的代码:
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:";
}
任何方向或建议,将不胜感激。
提前致谢,
马万(^_^)
最佳答案
我建议您遵循此DevExpress线程-How to hide disabled expand/collapse buttons for master rows without detail records
这是必要的代码:
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;
}
}
希望能有所帮助。