Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Silverlight 4 редактирование файла на хосте 
:(
    Опции темы
ad12
Дата 12.1.2011, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 19.7.2010

Репутация: нет
Всего: нет



Добрый день.
VS2010, Silverlight 4 браузерное приложение.

На моём хосте имеется файл 1.xml 
//Открываю поток для чтения с помощью WebClient
Uri url = new Uri("Statistic.xml", UriKind.Relative);
WebClient client = new WebClient();
client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
client.OpenReadAsync(url);

void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
   using (Stream s = e.Result)
   {
       XDocument xdoc = XDocument.Load(s);
   }

   // создаю коллекцию    
   records = new ObservableCollection<TDBInfo>();

   // наполняю её значениями атрибутов считанного XML
   …
   …

   // затем отображаю коллекцию в моих DataGrid и DataForm (из Silverlight Tools)
   myDataGrid.ItemsSource = records;
   myDataForm.ItemsSource = records;   
  
}

   // Теперь вручную редактирую поля в myDataForm

Подскажите, пожалуйста – как сохранить отредактированные значения полей в соответствующие значения атрибутов исходного 1.xml (на моём хосте)?
Не могу найти простого метода для сохранения.
Если использовать client.OpenWriteAsync(), то, как я понимаю,
придётся писать ещё серверный обработчик типа CGI или ISAPI расширения.
Неужели в Silverlight 4 нет какого-нибудь метода попроще?

PM MAIL   Вверх
jonie
Дата 12.1.2011, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 2
Всего: 118



Silverlight это клиентское приложение. С тем же успехом вы могли бы просить сделать javascript кодера в коде html запись файла. Без серверных вещей вам ничего не удастся.

В аттаче пример как это сделать.
По шагам.
0) создали DTO сущьность DBItem.cs
1) добавили в стандартную заглушку в web проект WCF Silverlight enabled Serice
2) вписали в него логику загрузки и сохранения коллекции dbitem-ов. Указали для нас что сервис есть синглетон (чтоб данные хранил в сессии) между вызовами Load\save:
Код

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]

3) пересобрали проект
4) добавили Add ServiceReference в SL Проект
5) пересобрали проект
6) открыли форму в режиме редактирования визуального
7) перешли на окно Data Source
8) пошли пить чай (это окно будет тупить достаточно долго).
9) перетащили из окна DataSource грид в окно
10) вписали в code файл окна: 
Код


//метод сгенерировала студия
        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            ReloadData();
        }

        private void ReloadData()
        {
            // Do not load your data at design time.
            if (!System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))
            {
                //Load your data here and assign the result to the CollectionViewSource.
                ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
                client.GetListCompleted += new EventHandler<ServiceReference1.GetListCompletedEventArgs>(client_GetListCompleted);
                client.GetListAsync();
            }
        }

        void client_GetListCompleted(object sender, ServiceReference1.GetListCompletedEventArgs e)
        {
            System.Windows.Data.CollectionViewSource myCollectionViewSource = (System.Windows.Data.CollectionViewSource)this.Resources["dBItemViewSource"];
            myCollectionViewSource.Source = e.Result;
            MessageBox.Show("LOADED!");
        }

        private void SaveBtn_Click(object sender, RoutedEventArgs e)
        {
            System.Windows.Data.CollectionViewSource myCollectionViewSource = (System.Windows.Data.CollectionViewSource)this.Resources["dBItemViewSource"];
            var collection = myCollectionViewSource.Source as ObservableCollection<ServiceReference1.DBItem>;
            ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
            client.SaveListCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(client_SaveListCompleted);
            client.SaveListAsync(collection);
        }

        void client_SaveListCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
        {
            MessageBox.Show("SAVED!");
            ReloadData();
        }


добавили кнопку на окно и привязали её Click делегат к SaveBtn_Click.
Где в коде разметки студия также сгенила:
Код

    <UserControl.Resources>
        <CollectionViewSource x:Key="dBItemViewSource" d:DesignSource="{d:DesignInstance my:DBItem, CreateList=True}" />
    </UserControl.Resources>


запускаем. Радуемся (ну или огорчаемся что там всё сложно)...

Присоединённый файл ( Кол-во скачиваний: 12 )
Присоединённый файл  SilverlightApplication1.rar 17,38 Kb


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0418 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.