Как сохранить данные из datagrid в файл (WPF)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by zog777, 22 Dec 2011.

  1. zog777

    zog777 New Member

    Joined:
    1 Aug 2011
    Messages:
    18
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте, подскажите пожалуйста как сохранить измененные в datagrid данные в файл. Я пробовал делать так
    Code:
     public void Grid_To_File()
            {
                dataGrid1.SelectAllCells();
                dataGrid1.ClipboardCopyMode = DataGridClipboardCopyMode.ExcludeHeader;
                ApplicationCommands.Copy.Execute(null,dataGrid1);
                dataGrid1.UnselectAllCells();
                string path1 = @"C:\test.txt";
                string result1 = (string) Clipboard.GetText(TextDataFormat.Text);
                Clipboard.Clear();
                StreamWriter stream = new StreamWriter(path1);
                stream.WriteLine(result1);
                stream.Close();
    
            }
    
    но только он почему-то все равно сохраняет именно старые данные datagrid( которые были до изменения. И еще похоже что так я только текстовые данные сохраню (из за команды Clipboard.GetText(TextDataFormat.Text); ) а как сохранить любые данные?
    
     
  2. mrazota

    mrazota New Member

    Joined:
    8 Dec 2011
    Messages:
    20
    Likes Received:
    1
    Reputations:
    0
    из грида логично сохронять в формат *.xls а не *.txt это ведь таблица.
    как это делать:
    статья [en]
    статья [ru]
     
  3. zog777

    zog777 New Member

    Joined:
    1 Aug 2011
    Messages:
    18
    Likes Received:
    0
    Reputations:
    0
    Ну там немного все сложнее просто , мне нужно сделать hex-редактор. То есть открыл файл, что-то там изменил и снова закрыл, поэтому нужно именно в этом файле сохранить изменения. Там текстовый формат это пока просто для примера, потом я переделаю чтобы сохранялось все в том же файле который и открылся.
     
    #3 zog777, 22 Dec 2011
    Last edited: 22 Dec 2011
  4. mrazota

    mrazota New Member

    Joined:
    8 Dec 2011
    Messages:
    20
    Likes Received:
    1
    Reputations:
    0
    хм.. любой файл в датагриде отображаешь?..
     
  5. zog777

    zog777 New Member

    Joined:
    1 Aug 2011
    Messages:
    18
    Likes Received:
    0
    Reputations:
    0
    да . Как сделать чтобы любые данные сохранять я уже понял, там нужно
    сделать string result1 = (string)Clipboard.GetData(DataFormats.CommaSeparatedValue);

    но вот с сохранением обновленного datagrid проблема так и осталась :(
     
    #5 zog777, 22 Dec 2011
    Last edited: 22 Dec 2011
  6. Spot

    Spot Elder - Старейшина

    Joined:
    1 Mar 2007
    Messages:
    461
    Likes Received:
    38
    Reputations:
    1
    что за проблема?
     
  7. zog777

    zog777 New Member

    Joined:
    1 Aug 2011
    Messages:
    18
    Likes Received:
    0
    Reputations:
    0
    Я когда в datagrid меняю значения и жму сохранить, он почему то сохраняет старые введенные значения datagrid (т . е. те которыми был заполнен datagrid которые читал из файла) а не новые( т.е. я хочу отредактировать файл изменив там несколько значений и сохранить изменения а он их не сохраняет почему-то и вместо них сохраняет неотредактированные значения datagrid)
     
  8. X-rus

    X-rus Member

    Joined:
    22 Dec 2010
    Messages:
    88
    Likes Received:
    22
    Reputations:
    4
    А как вы заполняете DataGrid данными?
     
  9. zog777

    zog777 New Member

    Joined:
    1 Aug 2011
    Messages:
    18
    Likes Received:
    0
    Reputations:
    0
    Вот
    Code:
    public void BytesToGrid()
            {                                   
                int j=0;
                int value;
                for (int i=0; i<myBytes.Length; i+=16)
                {                
                    string[] myStringArr = new string[17];
                   
                    myStringArr[0] = j.ToString();                
                    for (int k=0; k<=15 & i+k<myBytes.Length; k++) 
                    {
                        
                        value = Convert.ToInt32(myBytes[i + k]); 
                        if (String.Format("{0:X}", value) == 20.ToString())
                        {
                            myStringArr[k + 1] = "--";
                            
                        }
                        else
                        {
                            myStringArr[k + 1] = String.Format("{0:X}", value);
                        }
                    }
                    oTable.Rows.Add(myStringArr);
                    j++;
                }            
                dataGrid1.ItemsSource = oTable;
            }
    
     
  10. X-rus

    X-rus Member

    Joined:
    22 Dec 2010
    Messages:
    88
    Likes Received:
    22
    Reputations:
    4
    Может следует пройтись по источнику, то есть, по oTable и сделать обратное преобразование в байты. А после записать результат в файл.

    :D
    Code:
    if (String.Format("{0:X}", value) == [B]20.ToString()[/B])
    Кстати, можно было сразу указать на [источник кода]
     
  11. mrazota

    mrazota New Member

    Joined:
    8 Dec 2011
    Messages:
    20
    Likes Received:
    1
    Reputations:
    0
    Ну конечно, редактируете вы данные в гриде, а в файл пишете с таблицы источника. Странно было бы если б данные обновлялись. Вообще если по уму вам надо почитать теорию про привязку данных - [MSDN] Привязка данных
     
  12. zog777

    zog777 New Member

    Joined:
    1 Aug 2011
    Messages:
    18
    Likes Received:
    0
    Reputations:
    0
    аа точно , я про это забыл :) шас попробую

    аа нуу там просто как основу его брал для своего проекта ))
     
    #12 zog777, 22 Dec 2011
    Last edited: 22 Dec 2011
  13. zog777

    zog777 New Member

    Joined:
    1 Aug 2011
    Messages:
    18
    Likes Received:
    0
    Reputations:
    0
    да я про это читал , но думал что тут можно было бы и без этого обойтись :( ладно щас попробуем

    Просто мне то потом сам источник не нужен(т.е нужен но там он как бы один раз обращается к нему- в момент заполнения datagrid) , я хочу тупо сохранить данные в файл( хотя похоже это не правильно, поидее нужно было сделать привязку с mode=twoway и к сохранению прицепить обновление данных в источнике по команде, но только звучит как то немного сложно. Эмм и еще это ведь не сработает если я захочу сохранить изменения как "Сохранить как" ( так ведь? раз мы работаем то со старым источником) ?
     
    #13 zog777, 22 Dec 2011
    Last edited: 22 Dec 2011
  14. Spot

    Spot Elder - Старейшина

    Joined:
    1 Mar 2007
    Messages:
    461
    Likes Received:
    38
    Reputations:
    1
    если я тебя правильно понял, то ты хочеш при каждом изминении сохранять данные? это полная глупость на мой взгляд.Будет весьма нерациональное использование , если бы ты меня только одно значение - то да, но когда надо поменять несколько-множество, то прийдётся постоянно открывать и писать в файл.

    По поводу "сохранить как.."
    Используй класс Filedialog-OpeFileDialog
    вот линьк http://msdn.microsoft.com/ru-ru/library/system.windows.forms.filedialog(v=vs.80).aspx