私は複数のグループでGridViewコントロールを持っていると私は各グループの行数を表示するには、CustomDrawGroupRow
イベントを使用します。表示再帰的な行数
private void gridView_CustomDrawGroupRow(object sender, DevExpress.XtraGrid.Views.Base.RowObjectCustomDrawEventArgs e)
{
var view = (GridView)sender;
var info = (GridGroupRowInfo)e.Info;
var caption = info.Column.Caption;
if (info.Column.Caption == string.Empty)
{
caption = info.Column.ToString();
}
info.GroupText = $"{caption} : {info.GroupValueText} ({view.GetChildRowCount(e.RowHandle)})";
}
今、私がしたいと思います再帰的に行数を表示すると、最初のレベルは2171(1913 + 135 + 123)のカウントを示します。
これは私が試したものですが、それは、StackOverflowExceptionがをスローし、私はここでの問題を見ることができない。
private void gridView_CustomDrawGroupRow(object sender, DevExpress.XtraGrid.Views.Base.RowObjectCustomDrawEventArgs e)
{
var view = (GridView)sender;
var info = (GridGroupRowInfo)e.Info;
var caption = info.Column.Caption;
if (info.Column.Caption == string.Empty)
{
caption = info.Column.ToString();
}
info.GroupText = $"{caption} : {info.GroupValueText} ({GetRowCountRecursive(view, e.RowHandle)})";
}
private int GetRowCountRecursive(GridView view, int rowHandle)
{
int totalCount = 0;
int childrenCount = view.GetChildRowCount(rowHandle);
for (int i = 0; i < childrenCount; i++)
{
var childRowHandle = view.GetChildRowHandle(rowHandle, i);
totalCount += GetRowCountRecursive(view, childRowHandle);
}
return totalCount;
}
あなたGetChildRowCount呼び出しは常にあなたの最初のレベルの子行の少なくとも一つのループの間に1つの以上の数を返すようです。このシナリオをブレークポイントで確認できますか?これをチェックして、ServerModeを使用しますか? https://www.devexpress.com/Support/Center/Question/Details/T393756 – jambonick
ServerModeプロパティとこのリンクは、ASPxGridViewに関連しています。私はwinformsのためにXtraGridを使用しています。 – Marc
レベル1の子行(カテゴリ行)がグループ行そのものの場合、おそらくGetChildRowHandle()関数呼び出しは正しい結果を返しません。この場合、次のGetRowCountRecursive呼び出しwiil中のGetChildRowCount()の呼び出しは、結果がさらに混在します。 forループ中に無効な行ハンドルまたは間違った番号が返ってくるのを確認できますか? – jambonick