2012-09-05 2 views
2

Я пытаюсь имитировать существующий код выше, который работает для DatagridView, но для UltraGrid, но не уверен, как клонировать столбец, я также посмотрел на CopyFrom, который работает для UltraGridRows.Как клонировать UltraGridColumn (Infragistics)?

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); 
} 
+0

Что такая ошибка? –

+0

Infragistics.Win.UltraWinGrid.UltraGridColumn 'не содержит конструктор, который принимает аргументы «0», я не уверен, что мне нужно назначить newCol новым UltraGridColumn()? Его клон или копия меня интересует – Standage

+0

Почему вы пытаетесь клонировать столбцы, а не добавляете новый в сетку? Что вы получаете, клонируя колонку? Что вы пытаетесь выполнить с помощью UltraGrid? – alhalama

ответ

1

реорганизовать InitializeLayout метода, который я имею в виду, чтобы извлечь весь код, написанный для этого метода (как правило, форматирования столбцов для отображения или другой конфигурации один раза сетки) и поместить все в другом методе непосредственно вызываемом из ваш код.

Затем, когда ваш пользователь нажимает кнопку, чтобы распечатать сетку, инициализируйте gridReport с тем же источником данных, вызовите тот же общий код и выполните конкретное скрытие для столбцов второй сетки.

Это псевдокод предположит, что вы объявили две сетки (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); 
} 
+0

Приветствия за то, что мне пришлось добавить строку, чтобы сделать эту работу, мне пришлось: grdReport.BindingContext = grdMain.BindingContext; – Standage

+0

Да, правильно. Я предполагал прямую связь с данными или набором данных. – Steve

Смежные вопросы