Как добавить еще один столбец в XamDataGrid от Infragistics из другого источника данных или элементов данных?

У меня есть следующий Xaml для сетки данных, в которую я хочу добавить другой столбец, а затем заполнить этот столбец данными за пределами источника данных, используемого в настоящее время:

<igDP:XamDataGrid Grid.Row="0" Margin="10,10,188,10" Name="gateResourceLinksGrid" DataSource="{Binding}" VerticalAlignment="Stretch" AutoFit="True" IsNestedDataDisplayEnabled="False" AllowDrop="False" SelectedItemsChanged="gateResourceLinksGrid_SelectedItemsChanged" MouseDoubleClick="gateResourceLinksGrid_MouseDoubleClick">
<igDP:XamDataGrid.FieldSettings>
<igDP:FieldSettings AllowCellVirtualization="True" AutoSizeOptions="All" AllowEdit="False" />
</igDP:XamDataGrid.FieldSettings>
<igDP:XamDataGrid.FieldLayoutSettings>
<igDP:FieldLayoutSettings SelectionTypeCell="Range" SelectionTypeField="Range" SelectionTypeRecord="Single" />
</igDP:XamDataGrid.FieldLayoutSettings>


<igDP:XamDataGrid.FieldLayouts>

</igDP:XamDataGrid.FieldLayouts>

</igDP:XamDataGrid>

Тогда следующий код CS связан с этим:

Infragistics.Windows.DataPresenter.FieldLayout glo = new Infragistics.Windows.DataPresenter.FieldLayout();
glo.Fields.Add(new Infragistics.Windows.DataPresenter.Field("Field1", "Field one"));
glo.Fields.Add(new Infragistics.Windows.DataPresenter.Field("Field2", "Field two"));

gateResourceLinksGrid.FieldLayoutSettings.AutoGenerateFields = false;

glo.FieldSettings.AutoSizeOptions = Infragistics.Windows.DataPresenter.FieldAutoSizeOptions.All;
gateResourceLinksGrid.FieldLayouts.DataPresenter.AutoFit = true;
gateResourceLinksGrid.FieldLayoutSettings.AutoFitMode = Infragistics.Windows.DataPresenter.AutoFitMode.Default;
gateResourceLinksGrid.FieldLayouts.Add(glo);

gateResourceLinksGrid.DataSource = gateResourceLinksCol;

Это отлично работает,

Однако мне нужно добавить еще один столбец в этот xamdatagrid, который извлекает данные из другого источника данных, как бы я это сделал,

например: glo.Fields.Add(new Infragistics.Windows.DataPresenter.Field("Field3", "Field three"));

Я пытался обойти это с помощью:

gateResourceLinksGrid.DataItems.Add(attachedResources); 

добавить данные для Field3, однако это дает мне сообщение об ошибке "Невозможно установить источник данных в datapresenter, в котором элементы явно добавлены через коллекцию dataitems". Есть идеи, пожалуйста?


Обновление / Решение

Поэтому я также связался со службой поддержки Infragistics, которая оперативно ответила решением, в котором было указано, как сопоставить данные с несвязанными полями. Как только я обернул голову вокруг этого, было довольно просто вставить другие данные в xamdatagrid, и этот шаблон мог использоваться другими, следовательно, поэтому я помещаю это здесь на SO.

Для любых данных вне назначенного нами источника данных вам нужно добавить несвязанное поле, а затем заполнить его данными, используя событие.

Первая строка нашего XAML становится:

<igDP:XamDataGrid Grid.Row="0" Margin="10" Name="gateResourceLinksGrid" VerticalAlignment="Stretch" AutoFit="True" IsNestedDataDisplayEnabled="False" AllowDrop="False" 
                              SelectedItemsChanged="gateResourceLinksGrid_SelectedItemsChanged" MouseDoubleClick="gateResourceLinksGrid_MouseDoubleClick" 
                              InitializeRecord="gateResourceLinksGrid_OnInitializeRecord">

Тогда наш код CS становится:

Infragistics.Windows.DataPresenter.FieldLayout glo = new Infragistics.Windows.DataPresenter.FieldLayout();
glo.Fields.Add(new Infragistics.Windows.DataPresenter.Field("Field1", "Field one"));
glo.Fields.Add(new Infragistics.Windows.DataPresenter.Field("Field2", "Field two"));

glo.Fields.Add(new Infragistics.Windows.DataPresenter.UnboundField());
glo.Fields[2].Name = "Field3";
glo.Fields[2].Label = "Field three";

gateResourceLinksGrid.FieldLayoutSettings.AutoGenerateFields = false;

glo.FieldSettings.AutoSizeOptions = Infragistics.Windows.DataPresenter.FieldAutoSizeOptions.All;
gateResourceLinksGrid.FieldLayouts.DataPresenter.AutoFit = true;
gateResourceLinksGrid.FieldLayoutSettings.AutoFitMode = Infragistics.Windows.DataPresenter.AutoFitMode.Default;
gateResourceLinksGrid.FieldLayouts.Add(glo);

gateResourceLinksGrid.DataSource = gateResourceLinksCol;

и мы добавляем следующую функцию для заполнения данных для Field3 при загрузке xamdatagrid.

private void gateResourceLinksGrid_OnInitializeRecord(object sender, Infragistics.Windows.DataPresenter.Events.InitializeRecordEventArgs e)
{


  var dr = (Infragistics.Windows.DataPresenter.DataRecord)e.Record;
//dr.Cells["Field3"].Value = "333"; 
//This works and applies the value of 333 
//to every cell in the Field3 column (for testing). 
//Say our datasource is mapped to a table with pk = ID and this ID is also  
//pk of the table we want to populate our data for Field3 from, but we want 
//the NAME in our Field3 column.             
  foreach (Field3Row f3 in Field3Rows)//prepopulated list holding our data
  {
    if (dr.Cells["ID"].Value.ToString() == f3.ID.ToString() ) 
    {
                        dr.Cells["Field3"].Value = f3.NAME;
                        break;
    }
  }

}

0 ответов

Другие вопросы по тегам