• الإعلانات

    • فيصل الحربي

      تسجيل عضوية جديدة في المنتدى   01/31/2016

      السلام عليكم ورحمة الله وبركاته  عزيزي العضو الجديد :  حاليا رسالة الإيميل لتأكيد صحة إيميلكم تذهب للبريد العشوائي ( جاري حل المشكلة )  فإذا لم تجد رسالة التحقق من إيميلكم في صندوق الوارد لديكم إتجه للبريد العشوائي ( JUNK)  وقم بتفعيل إشتراككم من هناك   

البحث في المنتدى

Showing results for tags 'php framework'.

  • البحث بالتاقات

    اكتب الكلمات المفتاحيه بينها علامه الفاصله
  • البحث بكاتب الموضوع

تم إيجاد 12 نتيجة

  1. هل يلزم استخدام php Framework  لبناء تطبيق ويب باسخدام php ؟
  2. بسم اله الرحمن الرحيم ارجو المساعدة فى العثور على استضافة مجانية متوفر لديها فريم ورك Zend لتجربة سكربت منزوع الكود تحياتى
  3. بسم الله الرحمن الرحيم  إنَّ الحَمْدَ لِلَّهِ نَحْمَدُهُ وَنَسْتَعِيُنُهُ وَنَسْتَغْفِرُهُ وَنَسْتَهْدِيهِ وَنَعُوذَ بِاللهِ مِن شُرُورِ أَنفُسِنَا وَسَيئَاتِ أَعْمَاِلَنَا، مَن يَهْدهِ اللهُ فَلا مُضلَّ لَه ، وَمَن يُضْلِل فَلا هَادِي لَه، وَأَشْهَدُ أَنَّ لاَ إِلهَ إلا اللهُ وَحدَهُ لاَ شَريكَ لَهُ، وَأَشْهدُ أنَّ مُحَمَّداً عَبدُهُ وَرَسُولُهُ . ----------------------------------------------------------------------------------------------   طوّرت شركة مايكروسوفت ( Microsoft ) منصّة عمل سمّتها دوت نت ( NET Framework. ) وبيئة عمل سمّتها ( Visual Studio IDE ) حيث أصبح بإمكان مطوّر التّطبيقات الإستعانة بهذين الأخيرين بالإضافة للغة برمجة تعمل تحت هذه المنصّة أن يطوّر التّطبيقات المكتبيّة وتطبيقات الويب والتّطبيقات الموزّعة أيضاً. سوف نتحدّث في هذه السلسلة التّعليميّة عن لغة السي شارب ( #C ) التي طوّرتها مايكروسوفت خصّيصاً لمنصّة ( NET. ). زوّدت #C بالعديد من الميّزات التي تجعلها من أقوى لغات البرمجة الغرضيّة التّوجّه ( Object Oriented Programming ) ومن أهمّ هذه الميّزات : أوّلاً : معالجة السّلاسل المحرفيّة ( Strings ). ثانياً : الرّسوميّات ( Graphics ). ثالثاً : الواجهات التّخاطبيّة ( Graphical User Interface ). رابعاً : معالجة الاستثناءات ( Exception Handling ). خامساً : النياسب المتعدّدة ( Multi Threading ). سادساً : التّعامل مع الملفّات ( File Streams ). سابعاً : الوسائط المتعدّدة ( صوت ،صورة ،فيديو ) ( Multimedia ). ثامناً : التّكامل مع قواعد البيانات ( ADO.NET ). تاسعاً : التّطبيقات الشّبكيّة ( Network Programming ). أخيراً : التّطبيقات الموزّعة ( Distributed Applications ). والكثير والكثير ..........                                        - الهدف الذي أطمح إليه من هذه السّلسلة :    تقديم محتوى تعليمي إلكتروني شامل حول هذه اللغة ( #C ) موجّه لمن لديه معرفة بسيطة أو لا يمتلك أيّ خبرة سابقة في البرمجةوالوصول به إلى مستوى عالٍ ومتقدّم .لذلك سوف تكون هذه السّلسلة شاملة بمحتواها من شرح نظري وأمثلة عمليّة وتمارين                 وأسئلة ومشاريع احترافيّة.....                     وأسأل الله تعالى أن يوفّقنا لما يحبّ ويرضى ، والله ولي التوفيق.                                   =============================================================================  الشرح فيديو على اليوتيوب ارجو ان يعجبكم الشرح     https://www.youtube.com/watch?v=G99wGpuSxwU   لجميع الفيديوهات ستجدون شرح مفصل لدورة لغة C# من A الي Z     https://www.youtube.com/channel/UCZx_t7YftSh9GCKqVadw2pQ/videos       
  4. السلام عليكم أعزائي. أتمنى أن أجد من يفيدني ولو بالقليل، ولكم جزيل الشكر والعرفان. طلب مني أحد العملاء برمجة موقع بسيط جداً باستخدام ASP.NET وسأقوم بعمله بـ MVC 5. الموقع كالآتي تماماً بدون القوائم العلوية والجانبية: http://www.smartschool-kw.net/droos.aspx بحيث يختار الطالب الفترة والصف والمادة، ثم يقوم بتحميل الكتب. وهنا التفاصيل: http://im56.gulfup.com/PIqZEG.png أعلم أنه بسيط جداً، ولكني واجهت مشكلة في تحليله لأنه أول مشروع برمجي لي. لذلك أرجو مساعدتي في الخطوات ولو بشكل مختصر جداً، وسأستطيع عمله بإذن الله. _______________________________ استفسارات من فضلكم: 1- قمت بإنشاء جداول قاعدة البيانات والتعامل معها عبر Entity Framework database first كالآتي:  http://im45.gulfup.com/3Md2Ev.png وأشعر بأن هناك أشياء ناقصة، إما جداول أو حقول أو ارتباطات Relations، فما هي؟ 2- بما أنه لا توجد إمكانية لتسجيل عضويات (فقط عضوية المدير)، فهل أكتفي بجدول الـ User؟ أم أستخدم التقنية الحديثة التي جاءت مع MVC وهي Membership Provider و Identity؟ 3- هل أقوم بحفظ "الملفات" و "الصور" في مجلد واحد؟ أم كلاً في مجلد خاص به؟ 4- كيف أقوم بتسمية الـ value للقيم المختارة من القوائم المنسدلة الثلاثة؟ فمثلاً لو اخترنا مادة الإسلاميات، تكون التسمية 1 أم islamic؟ وجزيتم خيراً.
  5. السلام عليكم ورحمة الله وبركاته ان شاء الله مستعد علي تنفيذ اي مشروع ويب بسعر مناسب في الوقت المحدد     Technical  Skills DatabaseMicrosoft SQL Server 2000/2005/2008 .ADO.NET .LINQ - Entity FrameworkOracle SQL 10G .MYSQL.Microsoft Access .  Web LanguageHtml5. CSS3.JavaScript-JQuery-AjaxWeb Services.ASP.Net 2 , 3.5 , 4 .ASP.NET MVC4 Php  Programming LanguageMicrosoft Visual Studio 2003/2005/2008/2010Microsoft C#.Net 2 , 3.5 .Microsoft VB.NET.      Certifications University Certificate  . Deutsch A1 , A2 Certificate . Microsoft .NET Framework 2.0 - Web-based Client Development          Mastering PHP & MySQL  جزاكم الله كل خير للتواصل Email: [email protected] Mobile : +201008265792 Khaled Abd El Azeem Harby
  6. بالفيديو استخدام Gii tool و استخدام قاعدة بيانات MySQL و كيفية استخدام CRUD للتعامل مع الجداول بقاعدة البيانات   http://husseinmostafa.blogspot.com/2013/11/2-gii-tool-mysql-crud.html
  7. بالفيديو كيفية تنصيب  YII PHP Framework http://husseinmostafa.blogspot.com/2013/11/yii-php-framework.html
  8. [ بسم الله الرحمن الرحيم ]     السلام عليكم ورحمة الله.   سنكمل في هذا الدرس ما بدأناه في الدرس الماضي. حيث قمنا في الدرس الماضي بإنشاء قاعدة بيانات جديدة وأنشأنا ضمنها جدولين Category و Product، وصممنا نافذة بسيطة للتعامل مع الجدول Category، كل ذلك تم بالتعامل مع Entity Framework. لذلك سنكمل اليوم التعامل مع الجدول Product، وسنستخدم DataTemplate، لعرض الـ Products من قاعدة البيانات، حيث سنحصل في نهاية المطاف على الشكل التالي:     العمل مشابه للدرس السابق في كثير من الأجزاء، ولكن لا ننسى أن لدينا هنا علاقة بين الجدولين ضاهرة لدينا وهي Product <-> Category. سنلاحظ سهولة التطبيق في هذا الدرس.   لكن دعونا نشرح قليلا عن كود XAML لهذه النافذة. كما قلنا استخدمنا DataTemplate، لعرض البيانات القادمة من قاعدة البيانات. في الواقع الإسم يعطينا انطباع عن ما سيتم عمله، وهو إنشاء قالب معين لعرض البيانات من خلاله. سنمر على الكثير حول هذا الموضوع ضمن درس WPF Templates، ولكن ما اضفناه جوهريا زيادة عن الدرس الماضي هو DataTemplate، لذلك سنشرح عنه بشكل بسيط. أولاً: البيانات ستعرض ضمن ListBox، أي يجب علينا تعريف هذا القالب  ضمنها، كالتالي: <ListBox> <ListBox.ItemTemplate> <DataTemplate> ... </DataTemplate> </ListBox.ItemTemplate> </ListBox> لكن في الواقع WPF أكثر مرونة حيث يمكننا تعريف هذا القالب ضمن الـ Resource مما يمكننا من إعادة استخدامه مرات أخرى، ويكننا من فصل طبقات العمل بشكل أفضل، كالتالي: <Window.Resources> <DataTemplate > ... </DataTemplate> </Window.Resources>وتزيدنا الـ WPF من جماليتها حيث تعطينا القدرة على تعريف ما يسمى ب Typed Data Template والتي من خلالها نحدد نوع البيانات اللازم عرضه، وستقوم WPF بعدها بعرض تلك البيانات أينما وجدت على أساس هذا القالب، فيصبح لدينا الشكل النهائي التالي: <Window.Resources> <DataTemplate xmlns:data="clr-namespace:EntityFrameworkWithWPF" DataType="{x:Type data:Product}"> </DataTemplate> </Window.Resources>السؤال الأن: ماذا سوف نكتب ضمن هذا القالب؟ في الواقع نستطيع تعريف أي عنصر نريد وبالشكل الذي نريد، لنأخذ مثلاً الشكل في الصورة في الأعلى:     أي أن تصميم القالب كأي تصميم أخر، عبارة عن تعريف مجموعة من العناصر. فيكون كود XAML الكامل للقالب كالتالي: <Window.Resources> <DataTemplate xmlns:data="clr-namespace:EntityFrameworkWithWPF" DataType="{x:Type data:Product}"> <Border Name="border" BorderThickness="1,1,1,2" TextBlock.Foreground="DimGray" BorderBrush="DimGray" CornerRadius="1,1,4,4" Width="150" Height="150"> <Border.Background> <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> <GradientStop Color="White" Offset="0"/> <GradientStop Color="#FFC4EAF0" Offset="1"/> <GradientStop Color="#FFF3FBFC" Offset="0.583"/> </LinearGradientBrush> </Border.Background> <Grid Margin="10" Background="Transparent"> <Grid.RowDefinitions> <RowDefinition Height="auto"/> <RowDefinition Height="auto"/> <RowDefinition Height="auto"/> <RowDefinition Height="auto"/> <RowDefinition Height="auto"/> <RowDefinition Height="auto"/> <RowDefinition Height="auto"/> </Grid.RowDefinitions> <TextBlock Grid.Row="0" TextWrapping="Wrap" HorizontalAlignment="Left" Margin="0,0,0,3"> <Run Text="Name:" FontWeight="Bold"/> <Run Text="{Binding Path=Name}" /> </TextBlock> <TextBlock Grid.Row="1" TextWrapping="Wrap" HorizontalAlignment="Left" Margin="0,0,0,3"> <Run Text="Category:" FontWeight="Bold"/> <Run Text="{Binding Path=Category.Name}" /> </TextBlock> <TextBlock Grid.Row="2" Margin="0,0,0,3"> <Run Text="Price:" FontWeight="Bold"/> <Run Text="{Binding Path=Price}"/> </TextBlock> <TextBlock Grid.Row="3" Text="Notes:" FontWeight="Bold"/> <TextBlock Grid.Row="4" Text="{Binding Path=Notes}" TextWrapping="Wrap" Margin="5,0,0,0"/> </Grid> </Border> </DataTemplate> </Window.Resources>كما نعلم أن ListBox تقوم بعرض عناصر بشكل أسطر متتالية، هذا لانها تحوي على Panel خاصة بترتيب العناصر، وضمن WPF فإن ListBox تحوي على StackPanel افتراضياً، والتي تعرض العناصر فوق بعضها البعض. ولكن ما نريده في مثالنا هو عرض القوالب بشكل مشابة لعرض المجلدات ضمن ويندز. لذلك نحن بحاجة لقولبة Panel الخاصة ب ListBox ووضعها لـ Wrap Panel،  والتي تفي بالغرض فهي تعرض العناصر بجانب بعضها البعض وفي كل مرة يتم تكبير النافذة أو تصغيرها فإنا تقوم بإعادة ترتيب العناصر. فيكون لدينا قولبة هذه Panel بالشكل التالي: <ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled"> <ListBox.ItemsPanel> <ItemsPanelTemplate> <WrapPanel/> </ItemsPanelTemplate> </ListBox.ItemsPanel> </ListBox>نلاحظ وضع خاصية [ScrollViewer.HorizontalScrollBarVisibility="Disabled"]، لكي نمنع من امتداد العناصر افقيا، أي كي لا تظهر العناصر بجانب بعضها على سطر واحد وإنما النزول لسطر جديد في حال كثرة العناصر.   أما بالنسبة لتصيميم الواجهة ككل فهو مشابة لما حصل في الدرس الماضي، لذلك سيكون كود XAML  الخاص بهذه النافذة كاملاً بالشكل التالي: <Window x:Class="EntityFrameworkWithWPF.ProductsWindow" 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" Loaded="Window_Loaded" UseLayoutRounding="True" WindowStartupLocation="CenterScreen" Title="ProductsWindow" Height="600" Width="750"> <Window.Resources> <DataTemplate xmlns:data="clr-namespace:EntityFrameworkWithWPF" DataType="{x:Type data:Product}"> <Border Name="border" BorderThickness="1,1,1,2" TextBlock.Foreground="DimGray" BorderBrush="DimGray" CornerRadius="1,1,4,4" Width="150" Height="150"> <Border.Background> <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> <GradientStop Color="White" Offset="0"/> <GradientStop Color="#FFC4EAF0" Offset="1"/> <GradientStop Color="#FFF3FBFC" Offset="0.583"/> </LinearGradientBrush> </Border.Background> <Grid Margin="10" Background="Transparent"> <Grid.RowDefinitions> <RowDefinition Height="auto"/> <RowDefinition Height="auto"/> <RowDefinition Height="auto"/> <RowDefinition Height="auto"/> <RowDefinition Height="auto"/> <RowDefinition Height="auto"/> <RowDefinition Height="auto"/> </Grid.RowDefinitions> <TextBlock Grid.Row="0" TextWrapping="Wrap" HorizontalAlignment="Left" Margin="0,0,0,3"> <Run Text="Name:" FontWeight="Bold"/> <Run Text="{Binding Path=Name}" /> </TextBlock> <TextBlock Grid.Row="1" TextWrapping="Wrap" HorizontalAlignment="Left" Margin="0,0,0,3"> <Run Text="Category:" FontWeight="Bold"/> <Run Text="{Binding Path=Category.Name}" /> </TextBlock> <TextBlock Grid.Row="2" Margin="0,0,0,3"> <Run Text="Price:" FontWeight="Bold"/> <Run Text="{Binding Path=Price}"/> </TextBlock> <TextBlock Grid.Row="3" Text="Notes:" FontWeight="Bold"/> <TextBlock Grid.Row="4" Text="{Binding Path=Notes}" TextWrapping="Wrap" Margin="5,0,0,0"/> </Grid> </Border> </DataTemplate> </Window.Resources> <Grid Background="WhiteSmoke"> <Grid.RowDefinitions> <RowDefinition Height="auto"/> <RowDefinition Height="*"/> <RowDefinition Height="auto"/> <RowDefinition Height="auto"/> </Grid.RowDefinitions> <StackPanel Orientation="Horizontal"> <TextBlock FontSize="14" Text="Products" Margin="5"/> <TextBlock VerticalAlignment="Center" Margin="5"><Hyperlink Name="lnkNew" Click="lnkNew_Click">New</Hyperlink></TextBlock> </StackPanel> <ListBox Grid.Row="1" Name="lstProducts" ScrollViewer.HorizontalScrollBarVisibility="Disabled" SelectionChanged="lstProducts_SelectionChanged"> <ListBox.ItemsPanel> <ItemsPanelTemplate> <WrapPanel/> </ItemsPanelTemplate> </ListBox.ItemsPanel> </ListBox> <Grid Grid.Row="2" Name="gridDetails"> <Grid.ColumnDefinitions> <ColumnDefinition Width="auto"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="auto"/> <RowDefinition Height="auto"/> <RowDefinition Height="auto"/> <RowDefinition Height="auto"/> </Grid.RowDefinitions> <TextBlock Grid.Row="0" Grid.Column="0" Text="Name: " Margin="7"/> <TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Path=Name}" Margin="5"/> <TextBlock Grid.Row="1" Grid.Column="0" Text="Category: " Margin="7"/> <ComboBox Grid.Row="1" Grid.Column="1" Name="lstCategories" DisplayMemberPath="Name" SelectedItem="{Binding Path=Category}" Margin="5"/> <TextBlock Grid.Row="2" Grid.Column="0" Text="Price: " Margin="7"/> <TextBox Grid.Row="2" Grid.Column="1" Text="{Binding Path=Price}" Margin="5"/> <TextBlock Grid.Row="3" Grid.Column="0" Text="Notes: " Margin="7"/> <TextBox Grid.Row="3" Grid.Column="1" AcceptsReturn="True" Text="{Binding Path=Notes}" Height="60" Margin="5"/> </Grid> <StackPanel Grid.Row="3" Orientation="Horizontal" HorizontalAlignment="Right"> <Button Name="btnAdd" Content="Add" Width="75" Margin="5" Click="btnAdd_Click"/> <Button Name="btnUpdate" Content="Update" Width="75" Margin="5" Click="btnUpdate_Click"/> <Button Name="btnDelete" Content="Delete" Width="75" Margin="5" Click="btnDelete_Click"/> </StackPanel> </Grid></Window>بالنسبة لكود C# لهذه النافذة فلن تجد إختلافاً ابداً بينه وبين ما حصل في الدرس السابق لذلك سيكون لدينا الكود كاملا بالشكل التالي: public partial class ProductsWindow : Window { ShopEntities db = new ShopEntities(); public ProductsWindow() { InitializeComponent(); } private void Window_Loaded(object sender, RoutedEventArgs e) { db.Products.Load(); lstProducts.ItemsSource = db.Products.Local; lstCategories.ItemsSource = db.Categories.ToList(); } // Send the selected item for presentation private void lstProducts_SelectionChanged(object sender, SelectionChangedEventArgs e) { gridDetails.DataContext = lstProducts.SelectedItem; } // Create new product object. private void lnkNew_Click(object sender, RoutedEventArgs e) { gridDetails.DataContext = new Product() { Price = 1 }; gridDetails.Children[1].Focus(); } // Add the product to the database. private void btnAdd_Click(object sender, RoutedEventArgs e) { db.Products.Add((Product)gridDetails.DataContext); db.SaveChanges(); } // Update the information of a selected product. private void btnUpdate_Click(object sender, RoutedEventArgs e) { db.SaveChanges(); } // Delete the selected product object. private void btnDelete_Click(object sender, RoutedEventArgs e) { Product product = (Product)gridDetails.DataContext; db.Products.Remove(product); db.SaveChanges(); } }ملاحظة 1: في الدرس الماضي فاتني ملاحظة هامة فيما يتعلق بتحميل البيانات بواسطة الميثود [;Load()] فهي عبارة عن Extension Method متوضعة ضمن فضاء الأسماء [System.Data.Entity] لذلك من الواجب إضافته.[using System.Data.Entity].   ملاحظة 2: لا نجد في هذا الدرس أو في الدرس السابق أي عمليات تحقق من صحة البيانات، حتى Logic الخاص بالواجهة لا نجده أيضاً، مثلاً: يجب عدم إظهار زر Add للمستخدم إلا في حالة ضغطه على زر New. وأيضاً عدم إظهار زري Update, Delete إلا في حالة قام المستخدم بتحديد عنصر Product من الـ ListBox، ولكن ما يهمنا في هذا الدرس والدرس السابق مقدمة تمهيدية لعرض قوة WPF وجماليتها في صناعة التطبيقات أياً كانت، وسنترك هذه الملاحظة لدرس Validation إن شاء الله تعالى.   ملاحظة 3: يمكننا في تطبيق WPF تحديد النافذة التي تظهر أولا عند تشغيل التطبيق. فكما هو الحال في Windows Forms عندما كنا نحدد واجهة الإقلاع من program.cs من خلال Application.Run(new Form1()); فإنه يمكننا ذلك في WPF من خلال App.xaml حيث نقوم بوضع خاصية  StartupUriإلى إسم النافذة المطلوبة، ففي هذا المثال قمت بتغييرها إلى  StartupUri="ProductsWindow.xaml".     تحميل المشروع: http://www.4shared.com/rar/RflEpuHg/EntityFrameworkWithWPF2.html   إذا كان هناك إي أسئلة أو استفسارات، فأنا موجود إن شاء الله تعالى. بالتوفيق.  
  9. بسم الله الرحمن الرحيم Entity Framework with WPF  بداية أحبذ لو يتم قراءة المقال من ملف [PDF] لكون التنسيق به أفضل[http://www.4shared.com/office/wr0MBEiQ/Entity_Framework_with_WPF.html]. كان من المفترض أن تبدأ سلسلة WPF بمكوناتاها والانتقال تدريجيا من موضوع لآخر، ولكن نظراً لكون أكثر البرامج تطبيقاً هي تلك اللي تتعامل مع قواعد البيانات، فقد جاء هذا الدرس، حيث سنعالج أكثر المشاكل التي تنتج عن برامج قواعد البيانات، ولبيان أهيمة WPF في بناء تطبيقات كهذه، وهو ما سوف يحفزك عزيزي القارىء إلى الانتقال إلى بيئة WPF لتطوير مشاريع مهما كانت، بأجمل وأقوى أسلوب، وبأقل سطور كود ممكنة كما سنلاحظ في مثالنا الحالي حيث سيتم اختصار الكود المكتوب إلى ما دون العشرة أسطر!!. في واقع الأمر هناك عدة منهجيات لعمل تطبيقات قواعد البيانات مع WPF، ولكي يتناسب محتوى المقال مع عنوانه، سوف نقوم بإنشاء تطبيق بأحدث ما تقدمه لنا WPF من ميزات، وإذا مررنا على أحد المفاهيم الجديدة، فسوف يأتي شرحها لاحقاً في المقالات القادمة إن شاء الله تعالى، فكل ما يهمنا حالياً هو بناء التطبيق الذي يتعامل مع قاعدة البيانات. والإستفادة منه قدر الإمكان، سوف نقوم بعمل المراحل التالية لإتمام المشروع: 1.      تصميم قاعدة البيانات الخاصة بنا. 2.      إنشاء مشروع WPF جديد، و إنشاء طبقة التعامل مع قاعدة البيانات، Entity Framework Model. 3.      إختبار المشروع. 1. تصميم قاعدة البيانات:سوف نقوم بعمل قاعدة بيانات جديدة ونسميها [Shop] ونقوم بعمل جدولين[Category] و [Product]، ونربط بينهما للإستفادة من موضوع الربط بين الجداول، بعد عمل قاعدة البيانات الجديدة، نقوم بتصميم الجداول كالشكل التالي، مراعاة وضع حقل [Id] كمفتاح رئيسي [Primary Key]، ووضع خاصيته [IsIdentity] ضمن نافذة [Column Properties] إلى [Yes] في الجدولين، ليصبح لدينا الشكل التالي:     والأن نقوم بإنشاء العلاقة بينهما، حيث نلاحظ أن جدول [Product] يحوي على حقل [CategoryId] التابع للجدول الاخر [Category]، حالياً العلاقة افتراضية فقط، لذلك سوف نقوم بالربط كالتالي: نقوم بالضغط بالزر الإيمن على مساحة فارغة بجوار جدول [Product]، ونختار من القائمة الخيار الرابع [RelationShips...]، تظهر واجهة صغير فارغة نقوم بالضغط على زر [Add] لإضافة علاقة جديدة، فتظهر لدينا بعض المعلومات في النافذة التي تحوي خصائص العلاقة هناك الحقل الثاني يسمى [Tables And Columns Specifications] بجانبة يظهر زر [...]، نضغظ عليه، الأن نقوم بتحديد جدول العلاقة الرئيسي وحقله، وتحديد جدول العلاقة الثانوي وحقله كالتالي:     نضغط على موافق، لنعود للواجهة السابقة، نجد حقل بالخصائص اسمة [INSERT And UPDATE Specification]، نقوم بفتحة فنجد هناك خياران الاول [Delete Rule] والثاني [Update Rule]، نقوم بتحديد  قيمة الخيار الاول [Delete Rule] ونضعها [Cascade]، لكي تتم عمليات المسح بالتوافق. هكذا يكون لدينا قاعدة بيانات علائقية مربوطة مع بعضها بشكل منطقي. نضغط على زر []، ونقوم بحفظ العمل للانتقال إلى المرحلة الثانية. 2. إنشاء مشروع WPF جديد:نقوم بفتح [Visual Studio] ونعمل [File> New> Project] ونختار نوع اللغة [Visual C#] ونوع المشروع [Wpf Application]، نقوم بتسمية المشروع [EntityFrameworkWithWPF]، ثم نضغط على موافق. الأن سوف نقوم بجزء مهم من العمل وهو إضافة طبقة البيانات [Data Access Layer] إلى مشروعنا، وبالطبع هذه الطبقة هي []، الذي سيقدم لنا خدمات مميزة للتعامل مع البيانات. لذلك نقوم بإضافة عنصر جديد للمشروع [Add New Item]، ونختار [ADO.NET Entity Framework Model]. ونقوم بتسميه [Shop].     بعدها سوف تظهر لنا نافذة لتحديد نوع [Model]، نقوم باختيار [Generate from database]، سوف نقوم بشرح النوعين وأوقات استخدامهن في المقالات القادمة بإذن الله.       نضغط على [Next]، الأن سوف تظهر نافذة أخرى لتحديد الاتصال مع قادة البيانات، نضغط على [New Connection...]، وبعدها سوف تظهر نافذة اخرى لتحديد الاتصال. نقوم أولا بإدخال إسم [Server]، وثم نختار إسم قاعدة البيانات التي قمت بإنشاءها قبل قليل. وبالتالي يصبح لدينا الشكل التالي، بإعتبار أني استخدمت [SQLEXPRESS].     يمكننا اختبار الاتصال بالضغط على زر [OK]. وبعد التحقق من نجاح الاتصال، نضغط على موافق للعودة للنافذة السابقة والتي تكون قد اخذت إعدادات الاتصال الجديد، نضغط على [Next]، بعدها تظهر لنا نافذة مميزة، تحوي على ثلاث عناصر أساسية هي: [Tables]، [Views] ، و[Stored Procedures and Functions]، وهي واضحة المعالم، ما يهمنا حالياً هو أن نختار الجداول التي أنشاءها مسبقاً لذلك نفتح الخيار [Tables] ونحدد الجدولين الخاصين بنا كالتالي:     نضغط على [Finish]، وننتظر حتى يتم إنشاء [Model]، الخاص بقاعدة البيانات خاصتا، بعدها سيظهر لنا الجدولين مربوطين مع بعضهما البعض وهذا المكان يسمى [Conceptual Model]، او مكان التصميم حيث يمكننا التعديل بما يناسبنا، وهناك العديد من الخيارات يمكننا عملها مع هذا التصيم، مثلا يمكننا عمل علاقات وراثة مع الجداول، او تعريف أنواع بيانات جديدة مركبة، كل هذا سنشاهده في المقالات القادمة بإذن الله. ملاحظة: كما تحدثنا مسبقاً هناك عدة طرق او منهجيات لتطبيق هذا المشروع ضمن [WPF]، سوف ننطلق من منهجية بسيطة نوعاً مع العلم أن هناك طرق أخرى تختصر علينا الكثير العمل وكتابة الكود، ولكننا بحاجة لتسلسل منطقي من الأبسط إلى الأعقد بالإضافة لبعض المفاهيم الواجب فهمها. الأن سوف نقوم تصميم واجهة عمل تتكون من [ListBox]، لعرض البيانات الحالية ومجموعة من العناصر لعرض تفاصيل كل عنصر على حدة، ومجوعة من الأزار للتحكم بالبيانات. سوف تصبح لدينا النافذة كالشكل التالي:     وإليك عزيزي القارئ كود [XAML]، لهذه النافذة والذي يحوي على بعض المعلومات الهامة جداً، سوف نناقشها بعد قليل. <Window x:Class="EntityFrameworkWithWPF.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" WindowStartupLocation="CenterScreen" Title="MainWindow" Height="379.767" Width="441.653" Loaded="Window_Loaded"> <Grid Background="WhiteSmoke"> <Grid.RowDefinitions> <RowDefinition Height="auto"/> <RowDefinition Height="*"/> <RowDefinition Height="auto"/> </Grid.RowDefinitions> <TextBlock Grid.Row="0" Margin="5"> <Run Text="Categories "/> <Hyperlink Name="lnkNew" Click="lnkNew_Click">New</Hyperlink> </TextBlock> <ListBox Grid.Row="1" Name="lstCategories" DisplayMemberPath="Name" SelectionChanged="lstCategories_SelectionChanged"/> <Grid Grid.Row="2" Name="gridDetails" Margin="10" > <Grid.RowDefinitions> <RowDefinition Height="auto"/> <RowDefinition Height="auto"/> <RowDefinition Height="auto"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="auto"/> <ColumnDefinition/> </Grid.ColumnDefinitions> <TextBlock Grid.Row="0" Grid.Column="0" Text="ID: " Margin="5"/> <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Path=Id}" Margin="5"/> <TextBlock Grid.Row="1" Grid.Column="0" Text="Name: " Margin="7"/> <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding Path=Name}" Margin="5"/> <StackPanel Grid.Row="2" Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right"> <Button Name="btnAdd" Content="Add" Width="75" Margin="5" Click="btnAdd_Click"/> <Button Name="btnUpdate" Content="Update" Width="75" Margin="5" Click="btnUpdate_Click"/> <Button Name="btnDelete" Content="Delete" Width="75" Margin="5" Click="btnDelete_Click"/> </StackPanel> </Grid> </Grid></Window>لم يسعفني محرر الأكود في هذه الصفحة من عرض كود [] بالتنسيق المطلوب ولكن ما يهمنا هو بعض الاسطر للشرح: ·        DisplayMemberPath="Name" نلاحظ وجود هذه الخاصية ضمن [ListBox]، وفائدتها أننا سنربط الـ [ListBox]، مع مجموعة من [Categories objects] قادمة من قاعدة البيانات وحيث انه لا توجد طريق معينة لعرض هذه [Categories objects] لذلك نقوم بتحديد الخاصية المراد عرضها من ضمن مجوعة [Categories objects] القادمة، لذلك وضعنا القيمة [Name]. ·        Text="{Binding Path=Id}"   ·        Text="{Binding Path=Name}" هنا فائدة عظيمة تقدمها لنا [WPF]، حيث نقوم بتحديد نوع النص الذي سيظهر عند تشغيل البرنامج واحضار الـ [Categories] من قاعدة البيانات، وتوفر علينا هذه الخاصية الكثير مع عمليات تجميع البيانات وربطها، أو تحويلها من نوع لأخر، ففي أغلب الأحيان نقوم بإحضار قيمة من [TextBox] معين ومن ثم تحويلها إلى [double] مثلاً لتتناسب مع قاعدة البيانات، هنا لا يوجد داعي لأي من هذه الأعمال المستهلكة للوقت. يكفي أن تفهم فهما مبدئيا معنى هذا الحديث، لأن كل هذا سيشرح في مقالات [Data Binding] الخاصة بسلسلة [WPF] إن شاء الله تعالى. بعد أن تقوم بتعديل كود النافذة, وتعمل [Build] للمشروع للتأكد من عدم وجود أخطاء معينة، تأتي مرحلة كتابة بعض أسطر الكود لإتمام العمل، وكما تحدثت في السابق ليس علينا كتابة الكثير من الكود. ولا ننسى وجود طرق تختصر أيضا الكثير عما سنقوم به حالياً ولكنني سأتركة كما تحدث لبعد الحديث عن عدة مفاهيم. الأن نقوم بعرض كود [C#] للنافذة الحالية من خلال [View> Code]، هنا سنقوم بإدخال بعض أسطر كود [C#]، وللعلم لن تستطيع تشغيل البرنامج حتى تضيف كامل هذه الاسطر البرمجية، لانه سيعطيك بعض الأخطاء مثل أن هناك حدث معين معرف ضمن [XAML] ولا يوجد ضمن [C# code]، لذلك اضف هذه الاسطر أولاً.   نقوم بتعريف [object] من نوع طبقة البيانات التي عرفناها مسبقا، وهو ما سيمكننا من التخاطب مع قاعدة البيانات وإجراء العمليات اللازمة. وسيكون التعريف وموقعه لدينا كالتالي:  ShopEntities db = new ShopEntities(); public MainWindow() { InitializeComponent(); }    نقوم بإضافة حدث تحميل النافذة [Window_Load]، والذي سيقوم بإحضار بيانات [Categoies] من قاعدة البيانات وعرضها ضمن [ListBox] وسيكون شكل الحدث كالتالي.private void Window_Loaded(object sender, RoutedEventArgs e) { db.Categories.Load(); lstCategories.ItemsSource = db.Categories.Local; }    الأن نقوم بإضافة الحدث الخاص بإنشاء [Category] جديد، ربما يختلف نوع الكود المكتوب عن ما هو متعارف عليه ولكن لاحظ سهولة العمل في البداية وسيكون كل شيء بخير بعدها. private void lnkNew_Click(object sender, RoutedEventArgs e) { gridDetails.DataContext = new Category(); gridDetails.Children[3].Focus(); }   الأن سنقوم بإضافة الحدث الخاص بإضافة العنصر الجديد إلى قاعدة البيانات، وهو الخاص بزر [Add] وسيكون كالتالي: private void btnAdd_Click(object sender, RoutedEventArgs e) { Category c = (Category)gridDetails.DataContext; db.Categories.Add(c); db.SaveChanges(); } ·        الأن الحدث الخاص بالتعديل، أي زر [Update]، بكل بساطة سيكون كالتالي: private void btnUpdate_Click(object sender, RoutedEventArgs e) { db.SaveChanges(); } ·        وفي النهاية الحدث الخاص بالحذف، زر [Delete] سيكون كالتالي:             private void btnDelete_Click(object sender, RoutedEventArgs e) { Category c = (Category)gridDetails.DataContext; if (MessageBox.Show("Do you want to delete " + c.Name + " ?") == MessageBoxResult.OK) { db.Categories.Remove(c); db.SaveChanges(); } } هكذا نكون انتيهنا من العمل الكامل. الأن بإمكانك تشغيل البرنامج [F5]، بالطبع لا يوجد بيانات حالياً. لذلك عليك بالضغظ على [New] وادخال إسم العنصر الجديد ومن ثم [Add]، وقم بتجريب باقي الخدمات. قمت بإدخال ثلاث عناصر جديدة إلى قاعدة البيانات، وكانت كالتالي:     بعد تحديد عنصر من ال [ListBox]، يمكنك تعديل قيمتة أو حذفها، أو كما تحدثنا الضغط على [New] لادخال عنصر جديد ثم [Add] لحفظه. في المرة القادمة إن شاء الله سنتعلم كيف نتعامل مع الجدول الثاني [Product]، الذي لم نتعامل معه في هذا المثال التوضيحي، وسنقوم أيضا بعرض بياناتنا الحالية بشكل أفضل بمساعدة [WPF]، وكمثال على ذلك:     في الأسفل المشروع مع كامل مع [scripts]، الخاص بقاعدة البيانات. ولكم أفضل التحية.   http://www.4shared.com/rar/wW-sWGtp/EntityFrameworkWithWPF.html
  10. بسم الله الرحمن الرحيم   هذا الموضوع باللغه الانجليزية   يتناول كيفية البحث فى ملفات الحاسب عن طريق الفهرسة Indexing مما يجعل البرنامج قادر على البحث فى ملايين الملفات بسرعه و كفائة و هى الطريقة التى تعتمدها محركات البحث الضخمه مثل جوجل Google و Ping و أيضا يتناول الموضوع طريقة التعامل مع أداة جديده اسمها dtSearch Engine و هى المسؤلة عن الفهرسة و البحث و هى قادرة على البحث فى جميع أنواع الملفات و حتى قواعد البيانات .   من المعروف لمن يعمل فى البرمجه أن معرفة طرق البحث من المؤهلات المطلوبه للعمل فى مجال البرمجه ... معظم البرامج المكلفة تتطلب على الأقل معرفة بسيطه بطريقة الفهرسة و البحث .   للتعرف على الاداه و تحميلها كامله - من هنا   لقراءة الموضوع كاملا باللغة الانجليزيه + تحميل مثال عملى الجزء الأول من هنا  , و يتناول باختصار منطقية البرنامج و طريقة عملة و تصميم الفور . الجزء الثانى من هنا و يتناول باختصار أكواد الفورم و منطقية الأكواد و كيف تتم عملية الفهرسه و البحث عن الملفات ...   الجزء القادم ان شاء الله سيتناول التعامل مع جميع أنواع قواعد البيانات .....
  11. يمكنكم تحميل الشيفرة المصدرية Source Code لمكتبات دوت نت فريم وورك Dot Net Framework باصداراتها المختلفة من رابط مايكروسوفت التالي : http://referencesource.microsoft.com/netframework.aspx حجم مكتبة 4.5 حوالي 133 MB للعلم هو مكتوب بلغة السي شارب C# كما يحتوي على ملفات الرموز Symbols من أجل دخول المنقح إلى داخل مناهج وخصائص وأصناف تلك المكتبات لمزيد عن كيفية تفعيل خاصية التنقيح الداخلي http://blogs.msdn.com/b/dotnet/archive/2012/08/15/announcing-the-release-of-net-framework-4-5-rtm-product-and-source-code.aspx لاستكشاف فئة ما يمكن البحث عنها ضمن المجلد باسمها كمثال String.cs أو DateTime.cs بالطبع ستظهر نتيجتين أو ثلاثة لأنها موجودة في مكتبات الـ ndp أو clr أو WPF وستجدون أن الملف يحتوي الشيفرة مكررة (لا أدري ما السبب) تجدون في المرفقات مثال عن شيفرة نوع المعطيات DateTime DateTime.rar