2
reportGrid = new DataGridView();
foreach (DataGridViewColumn col in grid.Columns)
{
    DataGridViewColumn newCol = new DataGridViewColumn();
    newCol = (DataGridViewColumn)col.Clone();
    reportGrid.Columns.Add(newCol);
}

DatagridViewで機能する上記の既存のコードを模倣しようとしていますが、UltraGridで機能しますが、列のクローンを作成する方法がわからないため、UltraGridRowsで機能するCopyFromも確認しました。

 foreach (UltraGridColumn col in grid.DisplayLayout.Bands[0].Columns)
 {
      UltraGridColumn newCol = new UltraGridColumn();  //Errror here as well
      //newCol = (UltraGridColumn)col.Clone();
      newCol.CopyFrom(col);

      reportGrid.DisplayLayout.Bands[0].Columns.Add(newCol);
 }
4

1 に答える 1

1

InitializeLayoutメソッドをリファクタリングするには、このメソッド用に記述されたすべてのコードを抽出し(通常、表示用の列のフォーマットまたはグリッドの他の1回限りの構成)、コードから直接呼び出し可能な別のメソッドにすべてを配置します。

次に、ユーザーがボタンを押してグリッドを印刷し、同じデータソースでgridReportを初期化し、同じ共通コードを呼び出して、2番目のグリッドの列に対して特定の非表示を実行します。

この擬似コードは、2つのグリッド(初期データを含むgrdMainと印刷に使用するgrdReport)を宣言していることを前提としています。また、印刷プロセスを開始するためにultraGridPrintDocumentが存在することを前提としています。

private void gridMain_InitializeLayout(object sender, InitializeLayoutEventArgs e)
{
    CommonInitializeLayout(gridMain, e);
}


private void CommonInitializeLayout(UltraWinGrid grd, InitializeLayoutEventArgs e)
{
   UltraGridBand b = e.Layout.Bands[0];
   // Now do the customization of the grid passed in, for example....
   b.Override.AllowRowFiltering = Infragistics.Win.DefaultableBoolean.True;
   b.Override.AllowAddNew = AllowAddNew.No;
   b.Override.NullText = "(Not available)";
   b.Columns["CustName"].Header.Caption = "Customer Name";
   ....... etc ....
}

private void cmdMakeReport_Click(object sender, EventArgs e)
{
    // This assignment will trigger the InitializeLayout event for the grdReport
    grdReport.DataSource = grdMain.DataSource;
    // Now the two grids have the same columns and the same data 

    // Start to hide the columns not desired in printing
    grdReport.DisplayLayout.Bands[0].Columns["CustID"].ExcludeFromColumnChooser =
                                                             ExcludeFromColumnChooser.True 
    grdReport.DisplayLayout.Bands[0].Columns["CustID"].Hidden = true;
    // .... other columns to hide.....

    // Now print the grdReport
    ultraGridPrintDocument.Grid = grdReport;
    ultraGridPrintDocument.Print();
}

private void gridReport_InitializeLayout(object sender, InitializeLayoutEventArgs e)
{
    CommonInitializeLayout(griReport, e);
}
于 2012-09-06T20:40:18.250 に答える