My way from
FoxPro
to
Silverlight
General things
Why Silverlight? (Non-Darvin evolution.)
Paleogene. Personal computers
Neogene. Local networks and GDI.
Quaternary. Public networks and markup languages.
Our Era. Local and public networks merge. Markup+Code.
NET applications.
Click-once applications.
SilverLight applications
In honor to FoxPro
To wait? Or not to wait? It's a question!
This book...
Lowest-level Silverlight dissection as "My bills" example rewriting from VFP to Silverlight.
Creating "My bills" example in Visual FoxPro
Data structure
Creating directories
Creating project
Creating base classes library
Creating MyClasses library
Creating MyApplication and MyBillsApp classes
Creating Init method
Creating Login method
Creating DataConnect method
OS Security and directories
Creating procedure file and data access functions
Creating DataCheck method
Creating Fox_Environment_Save and FoxEnvironment_Restore methods
Creating SetMyEnvironment method
Creating system menu
Creating CleanUp method
Creating main program file
Creating MyFlat class to working with flat tables
Creating InitObject method
Creating Select method
Creating SetGridSource method
Creating means to modify data in tables
Creating MyScrollBar class
Creating MyScrollContainer class
Creating MyEdit_Control and child classes for various data types
Creating MyEditContainer class
Creating MyEditModal form
Creating New method of MyFlat class
Creating Edit method of MyFlat class
Creating MyFlatModal and MyFlatModeless forms
Calling MyFlatModeless form from system menu to create and edit flat tables
Creating MyQuery class to working with reference-books.
Creating MyFilterContainer class and set of MyFilter_Control classes to represent fields
Creating MyQuery class
Creating MyQueryModal and MyQueryModeless forms
Calling MyQueryModeless form to edit MYBILLS_Services and MYBILLS_Clients
Creating means to work with bills
Creating set of controls for document.
Creating MyDocument class
Creating MyBill class
Creating MyDoc_Form class and MyBills form
Creating "My bills" example in Silverlight.
Creating solution
Creating client-projects (Silverlight) and interface (without data access)
Creating MyBills blank main project and solution
Creating MyClassesSL blank project
Creating MyBaseClassesSL project and base classes
Code file structure, Namespaces, Assemblies and class definitions in C#
Class members and code syntax in Visual C#
Constructors
Creating MyButtons classes
#region ... #endregion constructions and outlining
Content-controls and controls with children-collection
"new" initialization
if ... else construction in C#
Arranging controls using Grid class and Margin, HozizontalAlignment, VerticalAlignment properties
Using methods as operators (operator overload)
Referencing pictures and other resources included into projects
Creating project references inside solution
Creating images and adding into projects
Application class
XAML code extracting
Events and handling in C#
New operations in C#
Using delegates to create user-events
Main Page developing
XAML syntax base
Object instances as tags in XAML
Referencing namespaces in XAML
TreeView class in Silverlight
Creating Silverlight MyClasses blanks (without data access)
Adding namespaces and references
Creating MyChildWindow class
Coloring, Colors and Brushes
ARGB color format, Color class and Colors structure
Brushes
Colors in XAML
Creating MyFlat class blank
Creating MyScrollContainer, MyEditContainer and MyFilterContainer classes blanks
Using SctollViewer class to create objects with scrolling
Virtual methods and overriding in C#
Creating MyQuery class blank
Creating MyDocument class blank
Creating MyBillsClasses blanks (without data access)
Creating MyBillDoc class blank
DatePicker control
MainPage TreeView navigation creating
Navigation in Children-collection to move controls before others
Updating TreeViewItems Select event handlers
Solution first building and launch
Creating service-projects (WCF and ADO.NET) to working with data in SQL Server
Windows Communication Foundation (WCF)
Creating MyDataAccess project to implement common data access classes using ADO.NET
Creating MyData class
Connecting to datasource
SqlConnection class in ADO.NET
Connection string syntax in ADO.NET to connect to SQL Server database
Security improving with System.Security.Cryptography namespace
Creating MyCrypt project (WPF application)
Calling system dialogs (Save file, Open file, ...) in WPF application (not Silverlight) instead of GetFile() and PutFile() VFP functions
Accessing to files in service directory on site from service inside
C# method overloading instead of implicit parameters in FoxPro
MyData constructors
MyData.Select
method
"using" statement , IDisposable and unmanaged resources
"interface"s in C#
SqlCommand class in ADO.NET
SqlDataAdapter class in ADO.NET
DataTable class in ADO.NET
MyData.Update
methods
Passing parameters for SQL statement (like ? in ODBC)
MyData.InsertId
method
Full MyData class code
Creating MyDataService project to implement WCF service and common data access contracts
Creating data contracts
Creating operation contracts
Creating service class
Using DataSet class to create XML document
try ... catch and error handling
GetData
operation contract
Select
operation contract
Update
operation contract
Insert
operation contract
GatherFlat
operation contract
InsertFlat
operation contract
Full code of service class
Security notes
Building service notes
Updating client-projects (Silverlight) to working with data using WCF client
Generating WCF client
Synchronous and asynchronous WCF client operations
Client data types. Passing collections as arrays.
WCF client members and other definitions in client code file
Creating MyDataSet class
WCF client instance as MyDataSet.Client property
XDocument class as local in-memory data storage and analog of DataSession in VFP
XElement class
IEnumerable<XElement> collection. VFP cursors representation.
Selecting IEnumerable<XElement> collections using methods
.
Selecting IEnumerable<XElement> collections using LINQ
Scanning IEnumerable<XElement> collection using foreach statement.
Accessing to elements of IEnumerable<XElement> using element indexes
XDocuments as MyDataSet properties
Creating user events to uniform handling of asynchronous executing of all operation contracts
MyDataSet constructor and main methods to access data
Handling GetData operation contract "completed" event
Handling Select operation contract "completed" event
Handling Update operation contract "completed" event
Handling Insert operation contract "completed" event
Handling GatherFlat operation contract "completed" event
Handling InsertFlat operation contract "completed" event
Binding DataGrid to data
Binding DataGrid to data from flat tables
ObservableCollection<T> type, INotifyPropertyChanged interface and automatic data refreshing on changing
Selective mapping columns and column layout changing (DataGrid.AutoGeneratingColumn event)
Binding DataGrid to data with free structure (move of the knight / hat trick )
Creating IMyCursorRow interface
Creating MyCursorRow* classes set
Creating MyCursorColumn class
Creating MyCursor class
Reading data structure from XDocument arrived from service. Creating XName using element name and namespace.
Creating MyLinkToFlat control to edit links in MyEditContainer and MyFilterContainer
Data dictionary fragment with links
MyLinkToFlat properties
MyLinkToFlat constructors
Passing parameters by reference in C#
MyLinkToFlat events handling
Creating MyTextBoxMasked class to control input using mask like in VFP
Creating MyClientData class to help providing operations with SQL Server data
Creating MyEdit* controls to represent fields in MyEditContainer
Creating MyScrollContainerControl class
Creating MyEditControl class
Creating MyEditTextBox class
Creating MyEditText class
Creating MyEditLinkToFlat class
Creating MyEditCheckBox class
Creating MyEditDateTime class
Creating MyFilter* controls to represent fields in MyFilterContainer
Creating IMyFilterControl interface and MyFilterControl class
Creating MyFilterTextBox class
Creating MyFilterText class
Creating MyFilterLinkToFlat class
Creating MyFilterCheckBox class
Creating MyFilterDateTime class
Updating MyScrollContainer, MyEditContainer and MyFilterContainer classes
Updating MyScrollContainer class
Updating MyEditContainer class
Updating MyFilterContainer class
Creating MyEdit class
Updating MyFlat class
Updating MyQuery class
Updating MyBillDoc class
Creating MyDocumentTextBox class
Creating MyDocumentLinkToFlat class
Creating MyDocumentDateTime class
Creating MyDocumentCheckBox class
Creating MyDocumentButton class
Creating MyDocument class
Updating MyBillDoc class exactly
Updating MainPage class
Creating authentication dialog
Updating MainPage code
Building and debugging solution
Cross-domain access policy
Debugging WCF service
Running application
Deploying application
Web.config attributes check
Publishing service
Change service reference from WCF-client
Silverlight application (client-part of solution) deploying
Sources:
VFP example:
http://www.dataodyssey.com/downloads/MyBillsVfp.zip
Silverlight example:
Stage1:
http://www.dataodyssey.com/downloads/MyBillsSL_Stage1.zip
Stage2:
http://www.dataodyssey.com/downloads/MyBillsSL_Stage2.zip
(c) Endrey Evsikov 2010
www.dataodyssey.com