2014-12-26 1 views
1

Infragistics xamDataGrid가있는 양식이 포함 된 WPF 프로젝트가 있습니다. 이 xamDataGrid에 표시되는 데이터는 호출자에 따라 다릅니다. 내가 뭘 하려는지 소수점 4 자릿수를 표시하는 숫자 열 (비율) 서식을 지정하는 것입니다. XAML로이 작업을 수행하는 방법에 대한 지침이있는 여러 사이트를 찾았지만이 그리드의 데이터는 동적이므로 코드 숨김에서이 ​​작업을 수행해야합니다. (가급적이면 C#하지만 VB.Net로 관리 할 수 ​​있습니다.) 호출자는 현재 눈금에 표시 할 데이터와 숨길 열과 편집 할 수있는 열을 전달합니다. 그래서 나에게 형식의 열 목록과 사용할 형식 문자열을 전달할 수 있습니다. xamDataGrid가 특정 방식으로 열이나 필드의 서식을 지정하는 방법을 알아내는 것만으로도 충분합니다.xamDataGrid에서 소수 자릿수 4 자리 숫자 서식 지정

<igWPF:XamDataGrid x:Name="GrdMaint" 
        Margin="10" 
        DataSource="{Binding Source={StaticResource cvsDataGrid}}" 
        BorderBrush="Black" 
        BorderThickness="1" 
        HorizontalAlignment="Stretch" 
        VerticalAlignment="Stretch" 
        IsSynchronizedWithCurrentItem="True" 
        Theme="Office2k7Blue" 
        GroupByAreaLocation="None" 
        FieldLayoutInitialized="GrdMaint_OnFieldLayoutInitialized" 
        PreviewMouseDoubleClick="GrdMaint_OnPreviewMouseDoubleClick" 
        RecordUpdated="GrdMaint_RecordUpdated"> 

    <igWPF:XamDataGrid.FieldSettings> 
     <igWPF:FieldSettings AllowRecordFiltering="True" 
          FilterLabelIconDropDownType="MultiSelectExcelStyle" 
          Width="Auto" /> 
    </igWPF:XamDataGrid.FieldSettings> 

    <igWPF:XamDataGrid.FieldLayoutSettings> 
     <igWPF:FieldLayoutSettings HighlightAlternateRecords="True" 
            FilterUIType="LabelIcons" 
            AllowDelete ="False" 
            AutoGenerateFields="True" /> 
    </igWPF:XamDataGrid.FieldLayoutSettings> 
</igWPF:XamDataGrid> 

답변

1

가 좋아, 그리드와 싸우고 며칠을 검색 한 후, 나는 운 좋게 발견 한 다음 XAML을보고 싶은 분들을 위해

어쨌든, 여기에 데이터 그리드에 대한 XAML입니다 나를위한 해답을 찾은 마법의 검색 문자열. Infragistics 지원 포럼에서 this post을 발견했습니다 (StackOverflow가 나를 망쳐 놓았습니다. 여기가 훨씬 좋네요.) 그리고 그 덕분에이 솔루션을 생각해 낼 수있었습니다. OnFieldLayoutInitialized 이벤트에서 각 필드를 반복하고 해당 필드의 서식을 지정할지 여부를 결정할 수 있습니다. 필자의 경우 필자는 필드 이름이 필드 이름/형식 문자열 사전에 있는지 확인하려고합니다. 그렇다면 형식 문자열을 적용합니다.

private void GrdMaint_OnFieldLayoutInitialized(object sender, FieldLayoutInitializedEventArgs e) 
{ 
    Dictionary<string,string> NumericColumnsToFormat = _Vm.GetNumericColumnFormats(_currentStep); 

    foreach (var fld in e.FieldLayout.Fields) 
    { 
     // apply custom numeric format to specific field, if necessary. 
     if (NumericColumnsToFormat.Keys.Contains(fld.Name)) 
     { 
      string formatString = NumericColumnsToFormat[fld.Name]; 
      if (!string.IsNullOrEmpty(formatString)) 
      { 
       var numberEditorStyle = new Style(typeof(XamNumericEditor)); 
       numberEditorStyle.Setters.Add(new Setter(XamNumericEditor.FormatProperty, formatString)); 
       fld.Settings.EditorStyle = numberEditorStyle; 
      } 
     } 
    } 
} 
관련 문제