none
wpf ecrire le fichier d'un data grid view non lié à une base de données

    Question

  • bonjour

     je suis sur wpf avec vs 2015 j'ai un datagridview sur mon form et je voudrais pouvoir l'écrire dans un fichier texte et le lire après action de boutons   pouvez vous m'aider

      voici la copie de mon form

    lundi 22 mai 2017 13:18

Réponses

  • Alors voici cette fois-ci tout le code complet. Il faudra juste le réajuster à vos besoins mais le copier, coller et lecture dans le fichier txt fonctionnent :). J'ai testé tout le code : 

    Création de la classe Client : 

    public class Client
        {
            public string Name { get; set; }
        }

    XAML : 

    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfApplication1"
            mc:Ignorable="d"
            Title="MainWindow"
            Height="350"
            Width="525">
        <Grid x:Name="MainGrid">
            <StackPanel>
                <Button Click="Button_Click"
                        Content="Copier dans le fichier txt" />
    
                <Button Click="LoadButton_Click" Margin="0 10 0 0"
                        Content="Charger les données depuis le fichier txt" />
                <DataGrid x:Name="dataGrid"
                          Margin="0 20 0 0">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="Item"
                                            Binding="{Binding Name}" />
                    </DataGrid.Columns>
                </DataGrid>
    
    
            </StackPanel>
        </Grid>
    </Window>

    Code C# : 

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    
    namespace WpfApplication1
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
    
    
    
            public MainWindow()
            {
                InitializeComponent();
    
                List<Client> LstItems = new List<Client>();
    
                //Initialisation des valeurs de la gridview sans passer par le fichier txt
    
                for (int i = 0; i < 20; i++)
                {
                    LstItems.Add(new Client { Name = "Item" + i.ToString() });
                }
    
                dataGrid.ItemsSource = LstItems;
                
            }
    
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                dataGrid.SelectAllCells();
    
                dataGrid.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
                ApplicationCommands.Copy.Execute(null, dataGrid);
    
                dataGrid.UnselectAllCells();
    
                string result = (string)System.Windows.Clipboard.GetData(System.Windows.DataFormats.CommaSeparatedValue);
    
                //Si le fichier text n'existe pas il sera créé automatiquement
                File.AppendAllText(@"C:\Users\MHoumadi\myfile.txt", result, UnicodeEncoding.UTF8);
            }
    
            private void LoadButton_Click(object sender, RoutedEventArgs e)
            {
                dataGrid.ItemsSource = ReadTxt(@"C:\Users\MHoumadi\myfile.txt");
            }
    
            private IEnumerable<Client> ReadTxt(string fileName)
            {
    
                string[] lines = File.ReadAllLines(fileName);
    
                return lines.Select(line =>
                {
                    string[] data = line.Split(';');
              
                    return new Client {Name= data[0] };
                });
            }
        }
    }

    J'espère que j'ai bien répondu à votre question.

    Si c'est le cas, n'hésitez pas à mettre ma réponse en réponse à votre post

    Vous pouvez me suivre sur Twitter : https://twitter.com/NordineMhoumadi


    Download my NEW FREE application MCP PREPARATION in the Windows 10 Store for preparing your Microsoft Certification or test your skills in Microsoft Technologies;


    lundi 22 mai 2017 22:59
  • Supposons qu'un client possède 7 propriétés : 

    public class Client
        {
            public string Name { get; set; }
     public string Name1 { get; set; }
     public string Name2 { get; set; }
     public string Name3 { get; set; }
     public string Name4 { get; set; }
     public string Name5 { get; set; }
     public string Name6 { get; set; }
        }

    Du coup la lecture de tous les champs serait : 

    private IEnumerable<Client> ReadTxt(string fileName)
            {
    
                string[] lines = File.ReadAllLines(fileName);
    
                return lines.Select(line =>
                {
                    string[] data = line.Split(';');
              
                    return new Client {Name= data[0], Name1=data[1], Name2=data[2], Name3=data[3], Name4=data[4], Name5=data[5], Name6=data[6] };
                });
            }

    Pour l'ajout des 7 lignes colonnes, le code que je vous ai fourni s'ajuste automatiquement, quelque soit le nombre de colonne. En fait son principe consiste à sélectionner tout le contenu de la data grid grâce à la méthode dataGrid.SelectAllCells() et de mettre le contenu de la datagrid dans le presse papier Windows.

    C'est donc le contenu du presse papier qui est copié dans le fichier :)


    Download my NEW FREE application MCP PREPARATION in the Windows 10 Store for preparing your Microsoft Certification or test your skills in Microsoft Technologies;

    • Marqué comme réponse SIMONGEORGES mardi 23 mai 2017 12:24
    mardi 23 mai 2017 09:19

Toutes les réponses

  • Bonjour Simon,

    Que voulez-vous dire par "écrire dans un fichier et le lire après action"?

    Est-ce :écrire dans le fichier texte et ensuite mettre tout son contenu dans la gridview?

    Merci d'avance


    Download my NEW FREE application MCP PREPARATION in the Windows 10 Store for preparing your Microsoft Certification or test your skills in Microsoft Technologies;

    lundi 22 mai 2017 13:27
  • excusez moi de mon imprécision  voila lorsque j'ai renseigne tout le datagridview je voudrais le sauvegarder dans un fichier texte et pourvoir le lire  j'ai en tout 6 colonnes

     merci de votre aide

    lundi 22 mai 2017 13:31
  • merci beaucoup

    pouvez vous me dire comment copier les textes en marron car j'ai des erreurs

    lundi 22 mai 2017 14:55
  • Bonjour Simon,

    J'ai supprimé l'ancien code car j'ai trouvé une manière plus simple de le faire.

    Pour la lecture du fichier utilisez ce lien : https://stackoverflow.com/questions/20574464/csv-text-in-datagrid-wpf

    Pour l'écriture : http://www.dylansweb.com/2015/06/wpf-datagrid-the-easy-way-to-export-to-csv/


    Download my NEW FREE application MCP PREPARATION in the Windows 10 Store for preparing your Microsoft Certification or test your skills in Microsoft Technologies;

    lundi 22 mai 2017 15:29
  • merci beaucoup je vais essayer demain et je vous dirais si cela réussi

    je ne sais pas comment créer le fichier cvs pouvez vous m'aider  car le lien que vous m'avez gentiment fourni je ne comprends pas 

    en attendant de vous lire

    encore un grand merci

    lundi 22 mai 2017 21:42
  • Alors voici cette fois-ci tout le code complet. Il faudra juste le réajuster à vos besoins mais le copier, coller et lecture dans le fichier txt fonctionnent :). J'ai testé tout le code : 

    Création de la classe Client : 

    public class Client
        {
            public string Name { get; set; }
        }

    XAML : 

    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfApplication1"
            mc:Ignorable="d"
            Title="MainWindow"
            Height="350"
            Width="525">
        <Grid x:Name="MainGrid">
            <StackPanel>
                <Button Click="Button_Click"
                        Content="Copier dans le fichier txt" />
    
                <Button Click="LoadButton_Click" Margin="0 10 0 0"
                        Content="Charger les données depuis le fichier txt" />
                <DataGrid x:Name="dataGrid"
                          Margin="0 20 0 0">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="Item"
                                            Binding="{Binding Name}" />
                    </DataGrid.Columns>
                </DataGrid>
    
    
            </StackPanel>
        </Grid>
    </Window>

    Code C# : 

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    
    namespace WpfApplication1
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
    
    
    
            public MainWindow()
            {
                InitializeComponent();
    
                List<Client> LstItems = new List<Client>();
    
                //Initialisation des valeurs de la gridview sans passer par le fichier txt
    
                for (int i = 0; i < 20; i++)
                {
                    LstItems.Add(new Client { Name = "Item" + i.ToString() });
                }
    
                dataGrid.ItemsSource = LstItems;
                
            }
    
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                dataGrid.SelectAllCells();
    
                dataGrid.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
                ApplicationCommands.Copy.Execute(null, dataGrid);
    
                dataGrid.UnselectAllCells();
    
                string result = (string)System.Windows.Clipboard.GetData(System.Windows.DataFormats.CommaSeparatedValue);
    
                //Si le fichier text n'existe pas il sera créé automatiquement
                File.AppendAllText(@"C:\Users\MHoumadi\myfile.txt", result, UnicodeEncoding.UTF8);
            }
    
            private void LoadButton_Click(object sender, RoutedEventArgs e)
            {
                dataGrid.ItemsSource = ReadTxt(@"C:\Users\MHoumadi\myfile.txt");
            }
    
            private IEnumerable<Client> ReadTxt(string fileName)
            {
    
                string[] lines = File.ReadAllLines(fileName);
    
                return lines.Select(line =>
                {
                    string[] data = line.Split(';');
              
                    return new Client {Name= data[0] };
                });
            }
        }
    }

    J'espère que j'ai bien répondu à votre question.

    Si c'est le cas, n'hésitez pas à mettre ma réponse en réponse à votre post

    Vous pouvez me suivre sur Twitter : https://twitter.com/NordineMhoumadi


    Download my NEW FREE application MCP PREPARATION in the Windows 10 Store for preparing your Microsoft Certification or test your skills in Microsoft Technologies;


    lundi 22 mai 2017 22:59
  • bonjour

     tres tres bien bravo cela fonctionne a merveille je le marque comme réponse

     un grand merci à vous

    mardi 23 mai 2017 06:37
  • bonjour je suis entrain d'adapter le code que vous m'avez fourni mais je bute  sur  comment ajouter une ligne apres action sur le bouton ajouter

    cette ligne doit contenir les texbox en tout 7 comment faire pour ecrire le code de la ligne merci de m'aider 

    mardi 23 mai 2017 08:55
  • Supposons qu'un client possède 7 propriétés : 

    public class Client
        {
            public string Name { get; set; }
     public string Name1 { get; set; }
     public string Name2 { get; set; }
     public string Name3 { get; set; }
     public string Name4 { get; set; }
     public string Name5 { get; set; }
     public string Name6 { get; set; }
        }

    Du coup la lecture de tous les champs serait : 

    private IEnumerable<Client> ReadTxt(string fileName)
            {
    
                string[] lines = File.ReadAllLines(fileName);
    
                return lines.Select(line =>
                {
                    string[] data = line.Split(';');
              
                    return new Client {Name= data[0], Name1=data[1], Name2=data[2], Name3=data[3], Name4=data[4], Name5=data[5], Name6=data[6] };
                });
            }

    Pour l'ajout des 7 lignes colonnes, le code que je vous ai fourni s'ajuste automatiquement, quelque soit le nombre de colonne. En fait son principe consiste à sélectionner tout le contenu de la data grid grâce à la méthode dataGrid.SelectAllCells() et de mettre le contenu de la datagrid dans le presse papier Windows.

    C'est donc le contenu du presse papier qui est copié dans le fichier :)


    Download my NEW FREE application MCP PREPARATION in the Windows 10 Store for preparing your Microsoft Certification or test your skills in Microsoft Technologies;

    • Marqué comme réponse SIMONGEORGES mardi 23 mai 2017 12:24
    mardi 23 mai 2017 09:19