1

4 つのバンドを持つグリッドがあり、band[3] の列が親バンドのように順番に配置されていません。私の主な要件は、Band[3] 列を配置することです。これは、「Excel にエクスポート」コードの一部です。グリッドはすでにフォームに表示されています。私は以下のアプローチを試しました -

    private UltraGrid rearrangeCol(UltraGrid grid)
    {
        int bandCount = grid.DisplayLayout.Bands.Count;
        int band = 0;
        List<String> colPos = new List<string>();
        for (int i = grid.DisplayLayout.Bands[band].Columns["EndurEndInv"].Index; i < grid.DisplayLayout.Bands[band].Columns.Count; i++)
        {
            colPos.Add(grid.DisplayLayout.Bands[band].Columns[i].Key);
        }
        band++;
        while (band < bandCount)
        {
            int initialColPos = grid.DisplayLayout.Bands[band].Columns["EndurEndInv"].Index;
            for (int i = initialColPos, j = 0; i < grid.DisplayLayout.Bands[band].Columns.Count && j < colPos.Count; i++, j++)
            {
                if(!grid.DisplayLayout.Bands[band].Columns[i].Key.Equals(colPos[j], StringComparison.InvariantCulture))
                {
                    grid.DisplayLayout.Bands[band].Override.AllowColSwapping = Infragistics.Win.UltraWinGrid.AllowColSwapping.WithinBand;
                    int xcngPos = grid.DisplayLayout.Bands[band].Columns[colPos[j]].Index;
                    grid.DisplayLayout.Bands[band].Columns.Insert(i, "Temp");
                    grid.DisplayLayout.Bands[band].Columns[xcngPos + 1].Swap(grid.DisplayLayout.Bands[band].Columns[i]);
                    grid.DisplayLayout.Bands[band].Columns.Remove("Temp");
                    grid.DisplayLayout.Bands[band].Override.AllowColSwapping = Infragistics.Win.UltraWinGrid.AllowColSwapping.Default;

                }
                else
                    continue;
            }
            band++;

        };
        return grid;
    }

実際、SWAP を使用しても何も起こらず、キー、インデックスは同じままです。より良いアプローチはありますか?

4

1 に答える 1

1

はい、列の位置に再配置するには、作業する必要があります

grid.DisplayLayout.Bands[index].Columns[colName].Header.VisiblePosition = newPos;

列の位置を入れ替える必要はありません。ヘッダーの位置を再配置するだけです。

以下のこのコードはテストされておらず、例として記述します

    private UltraGrid rearrangeCol(UltraGrid grid)
    {
        int bandCount = grid.DisplayLayout.Bands.Count;
        int band = 1;

        UltraGridBand b0 = grid.DisplayLayout.Bands[0];
        while (band < bandCount)
        {
            UltraGridBand b = grid.DisplayLayout.Bands[band]
            for (int i = b0.Columns["EndurEndInv"].Index; i < b0.Columns.Count; i++)
            {
                string colKey = b0.Columns[i].Key;
                if(b.Columns.Exists(colKey))
                    b.Columns[colKey].Header.VisiblePosition = 
                                   b0.Columns[colKey].Header.VisiblePosition;
            }
            band++;
        }
        return grid;
    }
于 2012-07-03T13:26:32.930 に答える