6

这与 DevExpess XtraGrid 的 GridView 有关。

我需要drilldown plus icon (+)从没有任何数据的 GridView 中的任何 MasterRow 中删除它的 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:";
}

任何方向或建议将不胜感激。

提前致谢,

马旺 (^_^)

4

1 回答 1

7

我建议你关注这个 DevExpress 线程 - How to hide disabled expand/collapse buttons for master rows without detail records

XtraGrid 不提供隐藏空详细信息的主从展开按钮的选项。您可以通过CustomDrawCell事件解决此限制 。

这是必要的代码:

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;
    }
}

希望这有帮助..

于 2012-08-31T14:32:17.093 回答