none
WPF datagrid binder a une datatable et nombre apres la virgule RRS feed

  • Question

  • Bonjour,

    J'ai une datagrid qui a comme source une datatable laquelle a plusieurs nombres avec de nombreux chiffres apres la virgule. J'aimerais limite le nombre apres la virgule.

     

    Merci

    • Déplacé Ciprian Duduiala jeudi 14 juillet 2011 06:31 question de WPF (Origine :Visual Basic)
    mardi 12 juillet 2011 20:26

Réponses

  • Bonjour,

    Je ne sais pas si vous voulez limiter le nombre après la virgule au niveau de l'affichage. je vais donc considérer dans mon exemple que c'est à l'affichage.

    Voici un exemple simple en xaml et c# :

    <Grid>
        <Grid.Resources>
          <local:MyConverter x:Key="MyConverter"/>
        </Grid.Resources>
        <DataGrid x:Name="dg" AutoGenerateColumns="False" >
          <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Path=Test,Converter={StaticResource ResourceKey=MyConverter}}" />
          </DataGrid.Columns>
        </DataGrid>
      </Grid>
    

     

    public partial class MainWindow : Window
      {
        public MainWindow()
        {
          InitializeComponent();
          this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
        }
    
        void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
          List<Essai> essais = new List<Essai>();
          Essai e1 = new Essai() { Test = 5.8999999999M };
          essais.Add(e1);
          Essai e2 = new Essai() { Test = 5.8999999999M };
          essais.Add(e2);
          Essai e3 = new Essai() { Test = 5.8564329999M };
          essais.Add(e3);
          dg.ItemsSource = essais;
        }
      }
    
      public class Essai : INotifyPropertyChanged
      {
        private Decimal _test = 0;
    
        public Decimal Test
        {
          get { return _test; }
          set { _test = value; OnPropertyChanged("Test"); }
        }
        
    
        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged(String name)
        {
          if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(name));
        }
      }
    
      public class MyConverter : IValueConverter
      {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
          if (value is Decimal)
          {
            Decimal d = (Decimal)value;
            Decimal dResultat = Decimal.Round(d, 4);
            return dResultat;
          }
          return value;
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
          return value;
        }
      }
    

     

     

     

     

     


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    mercredi 20 juillet 2011 07:10
    Modérateur

Toutes les réponses

  • Bonjour,

    Je ne sais pas si vous voulez limiter le nombre après la virgule au niveau de l'affichage. je vais donc considérer dans mon exemple que c'est à l'affichage.

    Voici un exemple simple en xaml et c# :

    <Grid>
        <Grid.Resources>
          <local:MyConverter x:Key="MyConverter"/>
        </Grid.Resources>
        <DataGrid x:Name="dg" AutoGenerateColumns="False" >
          <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Path=Test,Converter={StaticResource ResourceKey=MyConverter}}" />
          </DataGrid.Columns>
        </DataGrid>
      </Grid>
    

     

    public partial class MainWindow : Window
      {
        public MainWindow()
        {
          InitializeComponent();
          this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
        }
    
        void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
          List<Essai> essais = new List<Essai>();
          Essai e1 = new Essai() { Test = 5.8999999999M };
          essais.Add(e1);
          Essai e2 = new Essai() { Test = 5.8999999999M };
          essais.Add(e2);
          Essai e3 = new Essai() { Test = 5.8564329999M };
          essais.Add(e3);
          dg.ItemsSource = essais;
        }
      }
    
      public class Essai : INotifyPropertyChanged
      {
        private Decimal _test = 0;
    
        public Decimal Test
        {
          get { return _test; }
          set { _test = value; OnPropertyChanged("Test"); }
        }
        
    
        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged(String name)
        {
          if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(name));
        }
      }
    
      public class MyConverter : IValueConverter
      {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
          if (value is Decimal)
          {
            Decimal d = (Decimal)value;
            Decimal dResultat = Decimal.Round(d, 4);
            return dResultat;
          }
          return value;
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
          return value;
        }
      }
    

     

     

     

     

     


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    mercredi 20 juillet 2011 07:10
    Modérateur
  • Bonjour,

    Est-ce que vous avez testé la solution proposée ? Merci de partager avec nous les résultats,afin que d'autres personnes avec le même problème puissent profiter de cette solution.


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    samedi 23 juillet 2011 18:27
    Modérateur