Ibraheem Osama Mohamed (ابراهيم اسامه محمد)

Welcome to my blog :)

C# 8الاحتفاظ و عرض البيانات فى حالة انقطاع الانترنت فى تطبيقك فى ويندوز

leave a comment »

هل تطبيقك يستخدم الانترنت لكى يعرض على المستخدم بعض الاخبار و بعض البيانات ؟؟
ماذا لو انقطع الانترنت . هل ترا ان يظهر للمستخدم التطبيق خاليا ؟؟

هنا تأتى فكره تخزين البيانات القديمة (Caching) و عرضها على المستخدم مع عرض رسالة صغيرة تنبة بانه لا يوجد انترنت. على سبيل المثال تطبيق Twitter عند فتح التطبيق تجد ان التطبيق قد احتفظ ببعض البيانات التى عرضها عليك فى السابق حتى لا تجد التطبيق خاليا.

كيف هذا ؟ و ياخذا اخر بيانات  استخدمتها و يقوم بحفظها فى مكان ما ربما ملف او قاعدة بيانات . و هذه فكره خاصة من الفكره العامة لتخذين بعض البيانات على جهاز المستخدم و التى تسمى ال Caching .
نجد ان متصفحات الانترنت تستخدم ايضا ال Caching و العديد و العديد من التطبيقات

سوف نعرض عليكم فى هذا المقال كيفية حفظ بعض البيانات فى ملف ثم كيفية عرضها مرة اخرا

1) افتح تطبيق ويندوز 8 بلغة ال #C .
2) اضف 2 Buttons و GridView .
3)و كمثال : نتصور ان البيانات القادمة مكونة من الاتى First Name و Last Name
4)نضيف ItemTemplate لل GridView  على هذه البيانات

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
         <Button Content="Read" Name="ReadButton" Click="ReadButton_Click_1"
 HorizontalAlignment="Left" Margin="428,237,0,0" VerticalAlignment="Top"/>
         <Button Content="Write" Click="WriteButton_Click_1" Name="WriteButton"
 HorizontalAlignment="Left" Margin="612,237,0,0" VerticalAlignment="Top"/>
         <GridView Name="dataGridView" HorizontalAlignment="Left" Margin="282,443,0,0"
 VerticalAlignment="Top" Width="678" Height="287" ItemsSource="{Binding}">
             <GridView.ItemTemplate>
                 <DataTemplate>
                     <StackPanel Orientation="Vertical">
                         <StackPanel Orientation="Vertical">
                             <TextBlock Text="First Name : "></TextBlock>
                             <TextBlock Text="{Binding FirstName}"></TextBlock>
                         </StackPanel>
                         <StackPanel Orientation="Vertical">
                             <TextBlock Text="Last Name : "></TextBlock>
                             <TextBlock Text="{Binding LastName}"></TextBlock>
                         </StackPanel>
                     </StackPanel>
                 </DataTemplate>
             </GridView.ItemTemplate>
         </GridView>
</Grid>

انظر الى الكود السابق بتمعن
الان يجب ان نضيف الكود المسؤل عن الكتابة و القرائة من الملف لاكن قبل كل هذا يجب تضيف الملف و تضيف ال Class للبيانات التى ستستخدمها هذا هو بقية الكود المسئول عن انشاء الملف و استخدام Read و Write Buttons

StorageFile file = null;
         public MainPage()
         {
             this.InitializeComponent();
                      }
         protected async override void OnNavigatedTo(NavigationEventArgs e)
         {
             //File Creation
             file = await Windows.Storage.ApplicationData.Current.LocalFolder
.CreateFileAsync("Cache.data", CreationCollisionOption.OpenIfExists);
         }
         public static T Deserialize<T>(string json)
         {
             var _Bytes = Encoding.Unicode.GetBytes(json);
             using (MemoryStream _Stream = new MemoryStream(_Bytes))
             {
                 var _Serializer = new DataContractJsonSerializer(typeof(T));
                 return (T)_Serializer.ReadObject(_Stream);
             }
         }
         public static string Serialize(object instance)
         {
             using (MemoryStream _Stream = new MemoryStream())
             {
                 var _Serializer = new DataContractJsonSerializer(instance.GetType());
                 _Serializer.WriteObject(_Stream, instance);
                 _Stream.Position = 0;
                 using (StreamReader _Reader = new StreamReader(_Stream))
                 {
 return _Reader.ReadToEnd();
 }
             }
         }
                  private async void ReadButton_Click_1(object sender, RoutedEventArgs e)
         {
             string fileContent = await FileIO.ReadTextAsync(file);
             List<UserData> myDataList = Deserialize<List<UserData>>(fileContent);
             dataGridView.ItemsSource = myDataList;
         }
         private async void WriteButton_Click_1(object sender, RoutedEventArgs e)
         {
             List<UserData> userDataList = new List<UserData>();
             userDataList.Add(new UserData() { FirstName = "Ahmed", LastName = "Mohamed" });
             userDataList.Add(new UserData() { FirstName = "PoP", LastName = "Michael" });
             userDataList.Add(new UserData() { FirstName = "Ibraheem", LastName = "Mohamed" });
             string DataToSave = Serialize(userDataList);
             await FileIO.WriteTextAsync(file, DataToSave);
         }
         public class UserData         {
             public string FirstName { get; set; }
             public string LastName { get; set; }
         }

جرب الكود و ان كان لك اي استفسار ارجوك لا تترد فى سؤالى 🙂

شكرا

2056910448_thanks_xlarge

Advertisements

Written by Ibraheem Osama Mohamed

October 11, 2013 at 2:19 pm

Posted in Windows 8

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: