Здравствуйте, подскажите пожалуйста как сохранить измененные в 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); ) а как сохранить любые данные?
из грида логично сохронять в формат *.xls а не *.txt это ведь таблица. как это делать: статья [en] статья [ru]
Ну там немного все сложнее просто , мне нужно сделать hex-редактор. То есть открыл файл, что-то там изменил и снова закрыл, поэтому нужно именно в этом файле сохранить изменения. Там текстовый формат это пока просто для примера, потом я переделаю чтобы сохранялось все в том же файле который и открылся.
да . Как сделать чтобы любые данные сохранять я уже понял, там нужно сделать string result1 = (string)Clipboard.GetData(DataFormats.CommaSeparatedValue); но вот с сохранением обновленного datagrid проблема так и осталась
Я когда в datagrid меняю значения и жму сохранить, он почему то сохраняет старые введенные значения datagrid (т . е. те которыми был заполнен datagrid которые читал из файла) а не новые( т.е. я хочу отредактировать файл изменив там несколько значений и сохранить изменения а он их не сохраняет почему-то и вместо них сохраняет неотредактированные значения datagrid)
Вот 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; }
Может следует пройтись по источнику, то есть, по oTable и сделать обратное преобразование в байты. А после записать результат в файл. Code: if (String.Format("{0:X}", value) == [B]20.ToString()[/B]) Кстати, можно было сразу указать на [источник кода]
Ну конечно, редактируете вы данные в гриде, а в файл пишете с таблицы источника. Странно было бы если б данные обновлялись. Вообще если по уму вам надо почитать теорию про привязку данных - [MSDN] Привязка данных
да я про это читал , но думал что тут можно было бы и без этого обойтись ладно щас попробуем Просто мне то потом сам источник не нужен(т.е нужен но там он как бы один раз обращается к нему- в момент заполнения datagrid) , я хочу тупо сохранить данные в файл( хотя похоже это не правильно, поидее нужно было сделать привязку с mode=twoway и к сохранению прицепить обновление данных в источнике по команде, но только звучит как то немного сложно. Эмм и еще это ведь не сработает если я захочу сохранить изменения как "Сохранить как" ( так ведь? раз мы работаем то со старым источником) ?
если я тебя правильно понял, то ты хочеш при каждом изминении сохранять данные? это полная глупость на мой взгляд.Будет весьма нерациональное использование , если бы ты меня только одно значение - то да, но когда надо поменять несколько-множество, то прийдётся постоянно открывать и писать в файл. По поводу "сохранить как.." Используй класс Filedialog-OpeFileDialog вот линьк http://msdn.microsoft.com/ru-ru/library/system.windows.forms.filedialog(v=vs.80).aspx