<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6353430478574550535</id><updated>2012-02-10T23:19:00.047+08:00</updated><category term='Threading'/><category term='.NET Framework 3.0'/><category term='Janus ExplorerBar'/><category term='Continuous Integration'/><category term='XtraGrid'/><category term='Microsoft Virtualization'/><category term='Janus ButtonBar'/><category term='Hardware review'/><category term='.NET Framework 4.0'/><category term='ASP .NET'/><category term='Telerik.Winforms.Spy'/><category term='Janus UI and Ribbon'/><category term='Microsoft Expression Studio 4'/><category term='Janus Systems'/><category term='Wireless Networks'/><category term='Janus Schedule'/><category term='Janus GridEX'/><category term='C# sample code'/><category term='DevExpress'/><category term='.NET Framework 3.5'/><category term='XtraVerticalGrid'/><category term='NoSQL'/><category term='Visual Studio 2010'/><category term='C#'/><category term='.NET Framework 2.0'/><category term='Visual Studio 2010 Tools'/><category term='Telerik'/><category term='XtraTreeList'/><category term='VB .Net sample code'/><category term='XPO'/><category term='Cloud'/><category term='HTML5'/><title type='text'>Code Library</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default?start-index=101&amp;max-results=100'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>135</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-688035779434822513</id><published>2012-02-10T23:19:00.000+08:00</published><updated>2012-02-10T23:19:00.126+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NoSQL'/><title type='text'>HBASE DISTRIBUTED STORAGE ARCHITECTURE</title><content type='html'>A robust HBase architecture involves a few more parts than HBase alone. At the very least, an underlying distributed, centralized service for confi guration and synchronization is involved. HBase deployment adheres to a master-worker pattern. Therefore, there is usually a master and a set of workers, commonly known as range servers. When HBase starts, the master allocates a set of ranges to a range server. Each range stores an ordered set of rows, where each row is identifi ed by a unique row-key. As the number of rows stored in a range grows in size beyond a confi gured threshold, the range is split into two and rows are divided between the two new ranges.&lt;br /&gt;&lt;br /&gt;Like most column-databases, HBase stores columns in a column-family together. Therefore, each region maintains a separate store for each column-family in every table. Each store in turn maps to a physical fi le that is stored in the underlying distributed fi lesystem. For each store, HBase abstracts access to the underlying fi lesystem with the help of a thin wrapper that acts as the intermediary between the store and the underlying physical fi le.&lt;br /&gt;&lt;br /&gt;Each region has an in-memory store, or cache, and a write-ahead-log (WAL). To quote Wikipedia, http://en.wikipedia.org/wiki/Write-ahead_logging, “write-ahead logging (WAL) is a family of techniques for providing atomicity and durability (two of the ACID properties) in database systems.” WAL is a common technique used across a variety of database systems, including the popular relational database systems like PostgreSQL and MySQL. In HBase a client program could decide to turn WAL on or switch it off. Switching it off would boost performance but reduce reliability and recovery, in case of failure. When data is written to a region, it’s fi rst written to the write-ahead-log, if enabled. Soon afterwards, it’s written to the region’s in-memory store. If the in-memory store is full, data is fl ushed to disk and persisted in the underlying distributed storage.&lt;br /&gt;&lt;br /&gt;If a distributed fi lesystem like the Hadoop distributed fi lesystem (HDFS) is used, then a masterworker pattern extends to the underlying storage scheme as well. In HDFS, a namenode and a set of datanodes form a structure analogous to the confi guration of master and range servers that column databases like HBase follow. Thus, in such a situation each physical storage fi le for an HBase column-family store ends up residing in an HDFS datanode. HBase leverages a fi lesystem API to avoid strong coupling with HDFS and so this API acts as the intermediary for conversations between an HBase store and a corresponding HDFS fi le. The API allows HBase to work seamlessly with other types of fi lesystems as well. For example, HBase could be used with CloudStore, formerly known as Kosmos FileSystem (KFS), instead of HDFS.&lt;br /&gt;&lt;br /&gt;In addition to having the distributed fi lesystem for storage, an HBase cluster also leverages an external confi guration and coordination utility. In the seminal paper on Bigtable, Google named this confi guration program Chubby. Hadoop, being a Google infrastructure clone, created an exact counterpart and called it ZooKeeper. Hypertable calls the similar infrastructure piece Hyperspace. A ZooKeeper cluster typically front-ends an HBase cluster for new clients and manages confi guration.&lt;br /&gt;&lt;br /&gt;To access HBase the fi rst time, a client accesses two catalogs via ZooKeeper. These catalogs are named -ROOT- and .META. The catalogs maintain state and location information for all the regions. -ROOT- keeps information of all .META. tables and a .META. fi le keeps records for a user-space table, that is, the table that holds the data. When a client wants to access a specifi c row it first asks ZooKeeper for the -ROOT- catalog. The -ROOT- catalog locates the .META. catalog relevant for the row, which in turn provides all the region details for accessing the specifi c row. Using this information the row is accessed. The three-step process of accessing a row is not repeated the next time the client asks for the row data. Column databases rely heavily on caching all relevant information, from this three-step lookup process. This means clients directly contact the region servers the next time they need the row data. The long loop of lookups is repeated only if the region information in the cache is stale or the region is disabled and inaccessible.&lt;br /&gt;&lt;br /&gt;Each region is often identifi ed by the smallest row-key it stores, so looking up a row is usually as easy as verifying that the specifi c row-key is greater than or equal to the region identifi er.&lt;br /&gt;&lt;br /&gt;So far, the essential conceptual and physical models of column database storage have been introduced. The behind-the-scenes mechanics of data write and read into these stores have also been exposed.  &lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color: #999999;"&gt;Source of Information : NoSQL&lt;/span&gt;&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-688035779434822513?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/688035779434822513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2012/02/hbase-distributed-storage-architecture.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/688035779434822513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/688035779434822513'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2012/02/hbase-distributed-storage-architecture.html' title='HBASE DISTRIBUTED STORAGE ARCHITECTURE'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-8152523686990138436</id><published>2012-02-07T23:03:00.000+08:00</published><updated>2012-02-07T23:03:00.528+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud'/><title type='text'>Case Studies of some Platform as Service (PaaS) offerings.</title><content type='html'>Aneka. Aneka is a .NET-based service-oriented resource management and development platform. Each server in an Aneka deployment (dubbed Aneka cloud node) hosts the Aneka container, which provides the base infrastructure that consists of services for persistence, security (authorization, authentication and auditing), and communication (message handling and dispatching). Cloud nodes can be either physical server, virtual machines (XenServer and VMware are supported), and instances rented from Amazon EC2.&lt;br /&gt;&lt;br /&gt;The Aneka container can also host any number of optional services that can be added by developers to augment the capabilities of an Aneka Cloud node, thus providing a single, extensible framework for orchestrating various application models.&lt;br /&gt;&lt;br /&gt;Several programming models are supported by such task models to enable execution of legacy HPC applications and MapReduce, which enables a variety of data-mining and search applications.&lt;br /&gt;&lt;br /&gt;Users request resources via a client to a reservation services manager of the Aneka master node, which manages all cloud nodes and contains scheduling service to distribute request to cloud nodes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;App Engine. Google App Engine lets you run your Python and Java Web applications on elastic infrastructure supplied by Google. App Engine allows your applications to scale dynamically as your traffic and data storage requirements increase or decrease. It gives developers a choice between a Python stack and Java. The App Engine serving architecture is notable in that it allows real-time auto-scaling without virtualization for many common types of Web applications. However, such auto-scaling is dependent on the application developer using a limited subset of the native APIs on each platform, and in some instances you need to use specific Google APIs such as URLFetch, Datastore, and memcache in place of certain native API calls. For example, a deployed App Engine application cannot write to the file system directly (you must use the Google Datastore) or open a socket or access another host directly (you must use Google URL fetch service). A Java application cannot create a new Thread either.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Microsoft Azure. Microsoft Azure Cloud Services offers developers a hosted . NET Stack (C#, VB.Net, ASP.NET). In addition, a Java &amp;amp; Ruby SDK for .NET Services is also available. The Azure system consists of a number of elements. The Windows Azure Fabric Controller provides auto-scaling and reliability, and it manages memory resources and load balancing. The .NET Service Bus registers and connects applications together. The .NET Access Control identity providers include enterprise directories and Windows LiveID. Finally, the .NET Workflow allows construction and execution of workflow instances.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Force.com. In conjunction with the Salesforce.com service, the Force.com PaaS allows developers to create add-on functionality that integrates into main Salesforce CRM SaaS application. Force.com offers developers two approaches to create applications that can be deployed on its SaaS plaform: a hosted Apex or Visualforce application. Apex is a proprietary Java-like language that can be used to create Salesforce applications. Visualforce is an XML-like syntax for building UIs in HTML, AJAX, or Flex to overlay over the Salesforce hosted CRM system. An application store called AppExchange is also provided, which offers a paid &amp;amp; free application directory.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Heroku. Heroku is a platform for instant deployment of Ruby on Rails Web applications. In the Heroku system, servers are invisibly managed by the platform and are never exposed to users. Applications are automatically dispersed across different CPU cores and servers, maximizing performance and minimizing contention. Heroku has an advanced logic layer than can automatically route around failures, ensuring seamless and uninterrupted service at all times.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color: #999999;"&gt;Source of Information : Wiley - Cloud Computing Principles and Paradigms 2011&lt;/span&gt;&lt;/em&gt; &lt;br /&gt;&lt;br /&gt;Source of information :&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-8152523686990138436?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/8152523686990138436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2012/02/case-studies-of-some-platform-as.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/8152523686990138436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/8152523686990138436'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2012/02/case-studies-of-some-platform-as.html' title='Case Studies of some Platform as Service (PaaS) offerings.'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-6093419326366047042</id><published>2012-02-04T22:49:00.000+08:00</published><updated>2012-02-04T22:49:00.488+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud'/><title type='text'>PLATFORM AS A SERVICE PROVIDERS</title><content type='html'>Public Platform as a Service providers commonly offer a development and deployment environment that allow users to create and run their applications with little or no concern to low-level details of the platform. In addition, specific programming languages and frameworks are made available in the platform, as well as other services such as persistent data storage and inmemory caches.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Programming Models, Languages, and Frameworks. Programming models made available by IaaS providers define how users can express their applications using higher levels of abstraction and efficiently run them on the cloud platform. Each model aims at efficiently solving a particular problem. In the cloud computing domain, the most common activities that require specialized models are: processing of large dataset in clusters of computers (MapReduce model), development of request-based Web services and applications; definition and orchestration of business processes in the form of workflows (Workflow model); and high-performance distributed execution of various computational tasks. For user convenience, PaaS providers usually support multiple programming languages. Most commonly used languages in platforms include Python and Java (e.g., Google AppEngine), .NET languages (e.g., Microsoft Azure), and Ruby (e.g., Heroku). Force.com has devised its own programming language (Apex) and an Excel-like query language, which provide higher levels of abstraction to key platform functionalities. A variety of software frameworks are usually made available to PaaS developers, depending on application focus. Providers that focus on Web and enterprise application hosting offer popular frameworks such as Ruby on Rails, Spring, Java EE, and .NET.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Persistence Options. A persistence layer is essential to allow applications to record their state and recover it in case of crashes, as well as to store user data. Traditionally, Web and enterprise application developers have chosen relational databases as the preferred persistence method. These databases offer fast and reliable structured data storage and transaction processing, but may lack scalability to handle several petabytes of data stored in commodity computers.&lt;br /&gt;&lt;br /&gt;In the cloud computing domain, distributed storage technologies have emerged, which seek to be robust and highly scalable, at the expense of relational structure and convenient query languages. For example, Amazon SimpleDB and Google AppEngine datastore offer schema-less, automatically indexed database services. Data queries can be performed only on individual tables; that is, join operations are unsupported for the sake of scalability.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color: #999999;"&gt;Source of Information : Wiley - Cloud Computing Principles and Paradigms 2011&lt;/span&gt;&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-6093419326366047042?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/6093419326366047042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2012/02/platform-as-service-providers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/6093419326366047042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/6093419326366047042'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2012/02/platform-as-service-providers.html' title='PLATFORM AS A SERVICE PROVIDERS'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-7795576932868070395</id><published>2012-01-31T22:29:00.000+08:00</published><updated>2012-01-31T22:29:00.061+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud'/><title type='text'>Case Studies of the most popular public IaaS clouds</title><content type='html'>Amazon Web Services. Amazon WS4 (AWS) is one of the major players in the cloud computing market. It pioneered the introduction of IaaS clouds in 2006. It offers a variety cloud services, most notably: S3 (storage), EC2 (virtual servers), Cloudfront (content delivery), Cloudfront Streaming (video streaming), SimpleDB (structured datastore), RDS (Relational Database), SQS (reliable messaging), and Elastic MapReduce (data processing).&lt;br /&gt;The ElasticCompute Cloud (EC2) offers Xen-based virtual servers (instances) that can be instantiated from Amazon Machine Images (AMIs). Instances are available in a variety of sizes, operating systems, architectures, and price. CPU capacity of instances is measured in Amazon Compute Units and, although fixed for each instance, vary among instance types from 1 (small instance) to 20 (high CPU instance). Each instance provides a certain amount of nonpersistent disk space; a persistence disk service (Elastic Block Storage) allows attaching virtual disks to instances with space up to 1TB.&lt;br /&gt;&lt;br /&gt;Elasticity can be achieved by combining the CloudWatch, Auto Scaling, and Elastic Load Balancing features, which allow the number of instances to scale up and down automatically based on a set of customizable rules, and traffic to be distributed across available instances. Fixed IP address (Elastic IPs) are not available by default, but can be obtained at an additional cost.&lt;br /&gt;&lt;br /&gt;In summary, Amazon EC2 provides the following features: multiple data centers available in the United States (East and West) and Europe; CLI, Web services (SOAP and Query), Web-based console user interfaces; access to instance mainly via SSH (Linux) and Remote Desktop (Windows); advanced reservation of capacity (aka reserved instances) that guarantees availability for periods of 1 and 3 years; 99.5% availability SLA; per hour pricing; Linux and Windows operating systems; automatic scaling; load balancing.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Flexiscale. Flexiscale is a UK-based provider offering services similar in nature to Amazon Web Services. However, its virtual servers offer some distinct features, most notably: persistent storage by default, fixed IP addresses, dedicated VLAN, a wider range of server sizes, and runtime adjustment of CPU capacity (aka CPU bursting/vertical scaling). Similar to the clouds, this service is also priced by the hour.&lt;br /&gt;&lt;br /&gt;In summary, the Flexiscale cloud provides the following features: available in UK; Web services (SOAP), Web-based user interfaces; access to virtual server mainly via SSH (Linux) and Remote Desktop (Windows); 100% availability SLA with automatic recovery of VMs in case of hardware failure; per hour pricing; Linux and Windows operating systems; automatic scaling (horizontal/vertical).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Joyent. Joyent’s Public Cloud offers servers based on Solaris containers virtualization technology. These servers, dubbed accelerators, allow deploying various specialized software-stack based on a customized version of Open- Solaris operating system, which include by default a Web-based configuration tool and several pre-installed software, such as Apache, MySQL, PHP, Ruby on Rails, and Java. Software load balancing is available as an accelerator in addition to hardware load balancers.&lt;br /&gt;&lt;br /&gt;A notable feature of Joyent’s virtual servers is automatic vertical scaling of CPU cores, which means a virtual server can make use of additional CPUs automatically up to the maximum number of cores available in the physical host.&lt;br /&gt;&lt;br /&gt;In summary, the Joyent public cloud offers the following features: multiple geographic locations in the United States; Web-based user interface; access to virtual server via SSH and Web-based administration tool; 100% availability SLA; per month pricing; OS-level virtualization Solaris containers; Open-Solaris operating systems; automatic scaling (vertical).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;GoGrid. GoGrid, like many other IaaS providers, allows its customers to utilize a range of pre-made Windows and Linux images, in a range of fixed instance sizes. GoGrid also offers “value-added” stacks on top for applications such as high-volume Web serving, e-Commerce, and database stores. It offers some notable features, such as a “hybrid hosting” facility, which combines traditional dedicated hosts with auto-scaling cloud server infrastructure. In this approach, users can take advantage of dedicated hosting (which may be required due to specific performance, security or legal compliance reasons) and combine it with on-demand cloud infrastructure as appropriate, taking the benefits of each style of computing.&lt;br /&gt;&lt;br /&gt;As part of its core IaaS offerings, GoGrid also provides free hardware load balancing, auto-scaling capabilities, and persistent storage, features that typically add an additional cost for most other IaaS providers.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Rackspace Cloud Servers. Rackspace Cloud Servers is an IaaS solution that provides fixed size instances in the cloud. Cloud Servers offers a range of Linux-based pre-made images. A user can request different-sized images, where the size is measured by requested RAM, not CPU.&lt;br /&gt;&lt;br /&gt;Like GoGrid, Cloud Servers also offers hybrid approach where dedicated and cloud server infrastructures can be combined to take the best aspects of both styles of hosting as required. Cloud Servers, as part of its default offering, enables fixed (static) IP addresses, persistent storage, and load balancing (via A-DNS) at no additional cost.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color: #999999;"&gt;Source of Information : Wiley - Cloud Computing Principles and Paradigms 2011&lt;/span&gt;&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-7795576932868070395?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/7795576932868070395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2012/01/case-studies-of-most-popular-public.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/7795576932868070395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/7795576932868070395'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2012/01/case-studies-of-most-popular-public.html' title='Case Studies of the most popular public IaaS clouds'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-2030540198926095156</id><published>2012-01-28T23:26:00.000+08:00</published><updated>2012-01-28T23:26:00.573+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud'/><title type='text'>Diagnostics in the cloud</title><content type='html'>At some point you might need to debug your code, or you’ll want to judge how healthy your application is while it’s running in the cloud. We don’t know about you, but the more experienced we get with writing code, the more we know that our code is less than perfect. We’ve drastically reduced the amount of debugging we need to do by using test-driven development (TDD), but we still need to fire up the debugger once in a while.&lt;br /&gt;&lt;br /&gt;Debugging locally with the SDK is easy, but once you move to the cloud you can’t debug at all; instead, you need to log the behavior of the system. For logging, you can use either the infrastructure that Azure provides, or you can use your own logging framework. Logging, like in traditional environments, is going to be your primary mechanism for collecting information about what’s happening with your application.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Using Azure Diagnostics to find what’s wrong&lt;br /&gt;Logs are handy. They help you find where the problem is, and can act as the flight data recorder for your system. They come in handy when your system has completely burned down, fallen over, and sunk into the swamp. They also come in handy when the worst hasn’t happened, and you just want to know a little bit more about the behavior of the system as it’s running. You can use logs to analyze how your system is performing, and to understand better how it’s behaving. This information can be critical when you’re trying to determine when to scale the system, or how to improve the efficiency of your code.&lt;br /&gt;&lt;br /&gt;The drawback with logging is that hindsight is 20/20. It’s obvious, after the crash, that you should’ve enabled logging or that you should’ve logged a particular segment of code. As you write your application, it’s important to consider instrumentation as an aspect of your design.&lt;br /&gt;&lt;br /&gt;Logging is much more than just remote debugging, 1980s-style. It’s about gathering a broad set of data at runtime that you can use for a variety of purposes; debugging is one of those purposes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Challenges with troubleshooting in the cloud&lt;br /&gt;When you’re trying to diagnose a traditional on-premises system, you have easy access to the machine and the log sources on it. You can usually connect to the machine with a remote desktop and get your hands on it. You can parse through log files, both those created by Windows and those created by your application. You can monitor the health of the system by using Performance Monitor, and tap into any source of information on the server. During troubleshooting, it’s common to leverage several tools on the server itself to slice and dice the mountain of data to figure out what’s gone wrong.&lt;br /&gt;&lt;br /&gt;You simply can’t do this in the cloud. You can’t log in to the server directly, and you have no way of running remote analysis tools. But the bigger challenge in the cloud is the dynamic nature of your infrastructure. On-premises, you have access to a static pool of servers. You know which server was doing what at all times. In the cloud, you don’t have this ability. Workloads can be moved around; servers can be created and destroyed at will. And you aren’t trying to diagnose the application on one server, but across a multitude of servers, collating and connecting information from all the different sources. The number of servers used in cloud applications can swamp most diagnostic analysis tools. The shear amount of data available can cause bottlenecks in your system.&lt;br /&gt;&lt;br /&gt;For example, a typical web user, as they browse your website and decide to check out, can be bounced from instance to instance because of the load balancer. How do you truly find out the load on your system or the cause for the slow response while they were checking out of your site? You need access to all the data that’s available on terrestrial servers and you need the data collated for you.&lt;br /&gt;&lt;br /&gt;You also need close control over the diagnostic data producers. You need an easy way to dial the level of information from debug to critical. While you’re testing your systems, you need all the data, and you need to know that the additional load it places on the system is acceptable. During production, you want to know only about the most critical issues, and you want to minimize the impact of these issues on system performance.&lt;br /&gt;&lt;br /&gt;For all these reasons, the Windows Azure Diagnostics platform sits on top of what is already available in Windows. The diagnostics team at Microsoft has extended and plugged in to the existing platform, making it easy for you to learn, and easy to find the information you need.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;Source of Information :&amp;nbsp;Manning Azure in Action 2010&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-2030540198926095156?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/2030540198926095156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2012/01/diagnostics-in-cloud.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/2030540198926095156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/2030540198926095156'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2012/01/diagnostics-in-cloud.html' title='Diagnostics in the cloud'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-688806516009194996</id><published>2012-01-24T23:08:00.000+08:00</published><updated>2012-01-24T23:08:00.312+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Virtualization'/><title type='text'>THE FIVE WINDOWS SERVER 2008 TERMINAL SERVICES ROLE SERVICES</title><content type='html'>The TS role is split into five parts called role services. Each role service performs its own unique function and each is explained in this section.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Terminal Server&lt;br /&gt;A server with the Terminal Server role service installed is referred to as a terminal server. It hosts the Remote Desktop sessions and the Windowsbased applications that are made available to your users.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;TS Licensing&lt;br /&gt;Each connection to a terminal server requires a TS client access license also known as a TS CAL. There are two types of TS CALs: TS Per Device CALs and TS Per User CALs. If Per Device licensing is chosen, you will need to purchase a CAL for each device in your enterprise that may be used to access your TS infrastructure. This can be a more economical choice if you have more users than computers in your enterprise. Per User licensing requires you to purchase a CAL for each user that may access your TS deployed applications or desktops. This is often the choice made by companies whose employees need to make a TS connection from a variety of different machines. It is highly recommended that you consult with a Microsoft licensing specialist when deciding which path is right for you. TS CALs are managed by a TS Licensing server, and you are required to have at least one in any TS infrastructure. If you implement a large TS environment with multiple terminal servers, it is recommended that you install TS Licensing on a separate server. However, if you are implementing a TS environment with a small footprint or just for testing you can install TS Licensing on a server running the Terminal Server role. For more detailed information on the installation and configuration of TS Licensing you can go to http://go.microsoft.com/fwlink/?linkid¼85873.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;TS Session Broker&lt;br /&gt;The TS Session Broker serves two purposes in a TS environment with a farm of terminal servers. The first is TS Session Broker Load Balancing. When this feature is enabled, the TS Session Broker monitors the number of TS sessions open to each terminal server and directs new session requests to the server with the fewest open sessions. This allows for an even distribution of sessions across all servers in a farm. The second function provided is the ability to ensure a TS user is automatically&lt;br /&gt;reconnected to their active session, if one exists. TS Session Broker tracks information on all open sessions within the farm, recording which user sessions reside on which terminal server. This allows a user to pick up where they left off if their session is unexpectedly disconnected. More detailed information on the installation and configuration of TS Session Broker can be found at http://go.microsoft.com/fwlink/?linkid¼92670.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;TS Gateway&lt;br /&gt;By leveraging TS Gateway, a TS environment and computer with Remote Desktop enabled can be configured to be accessible by authorized users over the public Internet without the need for an additional secure method to access your internal network such as a Virtual Private Network (VPN) connection. This is done by establishing an RDP over HTTPS connection from an Internet connected computer over port 443 versus the standard RDP port 3389. Security settings for this access are configured via TS Gateway Manager and include the ability to define several parameters, such as authorized Active Directory user and computer groups, accessible network resources, device and disk redirection, and acceptable authentication methods like passwords or&lt;br /&gt;smart cards. For TS Gateway installation information and a step-by-step installation guide, you can go to http://go.microsoft.com/fwlink/?linkid¼85872.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;TS Web Access&lt;br /&gt;TS Web Access makes available from a web browser the applications you publish with the traditional TS methods, such as RemoteApp programs and virtual desktops. You can choose to limit the access to the TS Web Access Web site to your local intranet or use it with TS Gateway as another way to enable your users to access TS applications from across the public Internet. &lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #cccccc;"&gt;Source of Information : Elsevier-Microsoft Virtualization Master Microsoft Server Desktop Application and Presentation&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-688806516009194996?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/688806516009194996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2012/01/five-windows-server-2008-terminal.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/688806516009194996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/688806516009194996'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2012/01/five-windows-server-2008-terminal.html' title='THE FIVE WINDOWS SERVER 2008 TERMINAL SERVICES ROLE SERVICES'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-1980833091382703973</id><published>2012-01-19T23:03:00.000+08:00</published><updated>2012-01-19T23:03:00.369+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Virtualization'/><title type='text'>Presentation virtualization (Terminal Services)</title><content type='html'>Presentation virtualization is a buzz phrase that refers to the features and functionality delivered by Windows Server 2008 version of Terminal Services (TS). With TS you can publish an entire Windows desktop just as in previous versions of TS. This enables your users to make a Remote Desktop connection to a terminal server accessing a fully functional desktop environment. In addition, by leveraging a subcomponent of TS called TS RemoteApp, you can publish individual applications that appear to be running locally on the desktop, but are actually running in your data center on a terminal server.&lt;br /&gt;&lt;br /&gt;The value of the TS approach to application deployment is realized in multiple areas. In an enterprise with remote locations utilizing slow links back to a centralized data center, this technology can substantially reduce the bandwidth used across slow Wide Area Network (WAN) circuits. This is because only the keyboard and mouse input along with display information is transmitted keeping the data flow between the TS server and the data source exclusively over the data center Local Area Network (LAN).&lt;br /&gt;&lt;br /&gt;TS can enable you to extend the useful life of client computers by moving the heavy processing off of the aging client equipment and onto your terminal servers. This allows you to implement newer more intensive applications without having to perform an expensive and time-consuming enterprisewide PC upgrade project. Along a similar line, performing an upgrade of a TS deployed application is accomplished from your centralized data center location. This can eliminate the need to visit all of the client computers in your enterprise to upgrade a locally installed program. Depending on the circumstances (numbers of computers and remote locations, etc.) this can save your company a considerable amount of money and you a considerable amount of time.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;Source of Information :&amp;nbsp;Elsevier-Microsoft Virtualization Master Microsoft Server Desktop Application and Presentation&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-1980833091382703973?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/1980833091382703973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2012/01/presentation-virtualization-terminal.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/1980833091382703973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/1980833091382703973'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2012/01/presentation-virtualization-terminal.html' title='Presentation virtualization (Terminal Services)'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-1482140502781373432</id><published>2012-01-16T22:59:00.000+08:00</published><updated>2012-01-16T22:59:00.089+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Virtualization'/><title type='text'>NEW FEATURES IN APP-V 4.5</title><content type='html'>AutoLoad packages&lt;br /&gt;One of the new features in Version 4.5 of App-V is the AutoLoad settings in the registry. These settings are created during the client installation and can be adjusted. By default, when a user logs on, the client attempts to load all previously used applications in cache. This ensures all features for are available locally on the computer. For mobile users, this option enables them to leave the network and still be able to use any application that has previously launched. However, this does not give them access to published applications that have not launched before. The AutoLoad options can be modified to download all applications published for a user and can also be triggered by a background publishing refresh.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Application streaming with Streaming Servers&lt;br /&gt;Another new component in Version 4.5 is the Streaming Server. The Streaming Server does not provide the publishing refresh process. It relies on another resource to perform this operation. The publishing refresh process is achieved by implementing a Management Server to handle the publishing refresh and using the Application Source Root (ASR) setting on the client to point to the Streaming Server. You can also use the manifest.xml file created during sequencing to script the package publishing using SFTMIME. These options provide flexibility in remote office scenarios. Streaming Servers implement authorization via NTFS permissions.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Application streaming with File Servers&lt;br /&gt;A file server can deliver packages in an App-V infrastructure, but like the Streaming Server, it cannot provide the publishing refresh process to the clients. As previously noted, this is accomplished by providing a Management Server for the publishing refresh process. This file server could be an actual server or a powerful desktop. File servers implement authorization by using NTFS permissions.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Application streaming with IIS&lt;br /&gt;IIS can also be used for streaming. However, like the Streaming Server and the File server, it cannot provide the publishing refresh process to the clients. The client supports a publishing refresh over an HTTP/HTTPS connection. However, App-V currently has no Web-based publishing refresh service. So the IIS streaming option would require a Management Server to publish applications. IIS Servers implement authorization by using NTFS permissions.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Stand-alone mode with MSI&lt;br /&gt;The App-V Sequencer supports creation of an MSI during the sequencing process. The stand-alone option does not have a formal publishing or streaming procedure. The MSI contains the ICO, OSD, and Manifest. xml files that are necessary for publishing the application on the machine and importing the SFT file into the App-V client cache. However, the package file (SFT) is not created as part of the MSI. It should be placed in the same directory as the MSI to successfully complete. You can place SFT files on a file server. In this scenario, the administrator uses the SFTPATH parameter to specify an alternate location of the SFT file. This removes the requirement that the SFT file to be in the same directory as the MSI. In Stand-alone mode the package will be published and the SFT file contents will be loaded into the client cache completely.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Streaming mode with MSI&lt;br /&gt;Another option is to use MSI packages and choose to stream the SFT file from an alternate location. In this configuration the package is published, but the SFT file is streamed to the App-V client cache. The process of streaming the SFT file is done by default as part of the installation of the MSI, but could optionally be configured to happen when the user launches the application the first time. This mode enables the features of streaming, such as Active Upgrade. The following registry key value must be set on the client to enable Streaming Mode supporting MSI deployment:&lt;br /&gt;&lt;br /&gt;HKLM\SOFTWARE\Microsoft\Softgrid\4.5\Client&lt;br /&gt;&lt;br /&gt;» Configuration\AllowIndependentFileStreaming ¼ 1&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;Source of Information :&amp;nbsp;Elsevier-Microsoft Virtualization Master Microsoft Server Desktop Application and Presentation&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-1482140502781373432?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/1482140502781373432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2012/01/new-features-in-app-v-45.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/1482140502781373432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/1482140502781373432'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2012/01/new-features-in-app-v-45.html' title='NEW FEATURES IN APP-V 4.5'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-7138033497908879012</id><published>2012-01-14T22:51:00.000+08:00</published><updated>2012-01-14T22:51:00.608+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Virtualization'/><title type='text'>CREATING AN APP-V PACKAGE</title><content type='html'>Microsoft’s best practices for sequencing applications, walk you through the steps of creating an App-V package, and explain the various options for publishing that application.&lt;br /&gt;&lt;br /&gt;Before sequencing, familiarize yourself with installation and use of the target application. Failure to fully understand the configuration and functionality of the application prior to sequencing may lead to an inefficiently sequenced package; one that may not work all. Specifically,&lt;br /&gt;&lt;br /&gt;» What are all of the application components needed to complete the installation of the application?&lt;br /&gt;&lt;br /&gt;» What updates such as adding new files to the package will need to be performed while sequencing?&lt;br /&gt;&lt;br /&gt;» What postinstallation configuration steps need to take place while sequencing?&lt;br /&gt;&lt;br /&gt;» How is the application commonly used by its target users?&lt;br /&gt;&lt;br /&gt;When sequencing on Windows Vista or Windows 7, configure the User Account Control (UAC) as it will exist on the target desktops. Disable the UAC if it is disabled on your target client machines.&lt;br /&gt;&lt;br /&gt;Always use the Comments field in the sequencer to include details about the package you may want to reference in the future. This allows the sequencer to maintain a log of your actions.&lt;br /&gt;&lt;br /&gt;Always sequence to a unique, 8.3 directory name. This applies to both the Asset and Installation directories. (‘Q:\MYAPP’ and ‘Q:\MYAPP.001’ are correct, ‘Q:\My Application’ is incorrect.)&lt;br /&gt;&lt;br /&gt;Sequence to a folder in the root of the drive, not to a subdirectory (‘Q:\MYAPP’ is correct; ‘Q:\’ is incorrect; ‘Q:\Temp_Junk\MYAPP’ is incorrect). If the suite has multiple parts, install each application in a subdirectory of the Asset Directory. For example, if a package contains a primary application with the Java Client, use Q:\AppSuite as the Asset Directory; sequence the application to Q:\AppSuite\APP; and sequence the Java Client to Q:\AppSuite\JavaClient.&lt;br /&gt;&lt;br /&gt;Use globally unique paths and Package names across the set of application sequencings. For example, place multiple Microsoft Office  sequencings in the same Asset Directory name. Use a standardized naming scheme that can be incremented, for example, Q:\OFFXP.v1 or Q:\OFFXP.001.&lt;br /&gt;&lt;br /&gt;Launch, configure, and test the application during the installation phase. Often this requires performing several manual steps that are not part of the application installation process, such as configuring database connections, copying updated files, etc. Launch and use the application multiple times in order to ensure that all of the most common features are utilized and captured properly by the sequencer. For example, run the application to get past any registration or initial pop-up dialog boxes. Some applications perform different tasks on first launch, second launch, and sometimes subsequent launches. Multiple launches ensure relevant application code makes it into Feature Block 1 during the execution phase. Use the Application Wizard to launch each executable in a suite of applications; do not just browse to their location under All Programs. Doing so may result in the sequencer failing to grab the proper first launch data for the primary feature block.&lt;br /&gt;&lt;br /&gt;Some applications have the option to Install on First Use for certain components. Do not sequence applications with this option selected.&lt;br /&gt;&lt;br /&gt;Disable any Auto Update features. Some applications have the ability to check a Web site or a server for the latest application updates. Leaving this feature enabled will not break the application, but it may affect version integrity should the application ever be resequenced to apply updates.&lt;br /&gt;&lt;br /&gt;There are applications that cannot or should not be sequenced, and there are limitations within App-V. The following list of applications that SHOULD NOT be sequenced is provided by Microsoft:&lt;br /&gt;&lt;br /&gt;» Applications (when sequenced) that are over 4 GB in size. If the application is too large the sequencer will not save the application. It will attempt to compress the file.&lt;br /&gt;&lt;br /&gt;» Applications that start services at boot time. App-V requires a logged in user initiate the launch of an application.&lt;br /&gt;&lt;br /&gt;» Applications that require device drivers. App-V cannot virtualize drivers, but it may be possible to bypass this issue and install the driver locally on the target computer, outside of the App-V package.&lt;br /&gt;&lt;br /&gt;» Applications required by several applications for information or access. For example, a program that launches another program. Normally you want to include both programs in the same suite. However, this is not always possible. This is especially true if one of the reasons you are deploying App-V is to avoid application conflicts. Remember that the virtual “bubble” can see the OS and what is installed on it but the OS can neither see the “bubble” nor interact with it.&lt;br /&gt;&lt;br /&gt;» Applications that are a part of the operating system, such as Internet Explorer.&lt;br /&gt;&lt;br /&gt;» Applications that use COMþ. COMþ is dynamic and initiates at runtime. The sequencer cannot capture this information.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;Source of Information :&amp;nbsp;Elsevier-Microsoft Virtualization Master Microsoft Server Desktop Application and Presentation&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-7138033497908879012?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/7138033497908879012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2012/01/creating-app-v-package.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/7138033497908879012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/7138033497908879012'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2012/01/creating-app-v-package.html' title='CREATING AN APP-V PACKAGE'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-440155518707573619</id><published>2012-01-11T15:05:00.000+08:00</published><updated>2012-01-11T15:05:00.138+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Virtualization'/><title type='text'>INSTALLING THE APP-V SEQUENCER</title><content type='html'>Before installing the Sequencer on a workstation or server, there are some items that you must be aware of, and may want to configure in advance. Microsoft’s support requirement since version 4.2 of App-V has been to sequence and publish on “like” operating systems. This means that creating a sequenced package on Windows XP and then publishing that package to Vista, and vice versa is not supported. You should plan to have a sequencer workstation or server for every operating system you plan to publish applications to. For example, to publish to a Server 2003 operating system, you must create the package on a Server 2003 operating system, including service pack and hot fix level. Although you may be able to sequence on one operating system and publish to another, the practice is not supported.&lt;br /&gt;&lt;br /&gt;In addition to operating system, service pack, and hot fix level, you will also want to include any applications that are a part of your base image. For example, if Adobe Reader is a part of your base image, you should include it in the building of your sequencer workstation. This is especially important if you include the Microsoft Office suite on your base image. Some applications install differently if they see that Microsoft Office is&lt;br /&gt;already installed.&lt;br /&gt;&lt;br /&gt;If you plan to package applications that include ODBC DSN settings, you will want to create one on the sequencer workstation prior to sequencing a package. The registry key associated with the ODBC setting will become virtualized and prohibit the packaged application from seeing any ODBC DSN settings on the base client machine.&lt;br /&gt;&lt;br /&gt;The following locations can be checked to determine ODBC information was captured:&lt;br /&gt;&lt;br /&gt;» Search for odbc.ini: It will be located in the VFS\%CSIDL_WINDOWS% folder&lt;br /&gt;» HKLM\Software\ODBC\ODBC.INI\ODBC Data Sources&lt;br /&gt;» HKCU\%SFT_SID%\Software\ODBC\ODBC.INI&lt;br /&gt;&lt;br /&gt;You will want to include a printer as part of the Sequencer base image as well. Printer configurations are handled like ODBC settings. So it is necessary to include a printer device in the sequencer PC image.&lt;br /&gt;&lt;br /&gt;You will need to set up your sequencer machine with at least two primary partitions. The first partition, C:, should have the operating system installed; format it as NTFS. The second partition, Q:, is used as the destination path for the application installation. It should also be formatted as NTFS.&lt;br /&gt;&lt;br /&gt;The sequencer uses %TMP%, %TEMP%, and its own scratch directory for temporary files. These locations should be large enough to accommodate the full installation size of the application being packaged. The sequencer uses the scratch directory to temporarily store the files generated during the sequencing process. The location of the scratch directory can be seen by launching the sequencer and browsing to Options | Tools and then clicking the Paths tab. You can improve performance by configuring the temp directories and the scratch directory to reside on different physical hard drives.&lt;br /&gt;&lt;br /&gt;Before you begin to sequence an application, you will want to shutdown other programs that may be running. Ensure no scheduled tasks are running, or will begin running, during the sequencing process. Disable the following programs before starting a sequencing job:&lt;br /&gt;&lt;br /&gt;» Windows Defender&lt;br /&gt;» Antivirus Software&lt;br /&gt;» Disk defragmentation software&lt;br /&gt;» Windows Search&lt;br /&gt;» Microsoft update&lt;br /&gt;» Any open Windows Explorer session&lt;br /&gt;&lt;br /&gt;All components for the App-V Sequencer are available through the Microsoft Volume Licensing Site (https://licensing.Microsoft.com). The link is called “Application Virtualization Hosting for Desktops 4.5” and can be found under the Windows section. Once downloaded, extract the files or burn the ISO to a CD.&lt;br /&gt;&lt;br /&gt;1. Using the media you just downloaded in the previous step, browse to. . . | App-V | Installers | Sequencer and click Setup.exe.&lt;br /&gt;&lt;br /&gt;2. The setup wizard prompts you to install the Microsoft Cþþ Redistributable Package, Microsoft MSXML, and Microsoft Application Error Reporting if they are not already installed. Click Install.&lt;br /&gt;&lt;br /&gt;3. Once the prerequisites have been installed (or if they were already installed), you are taken to the Welcome page for the Application Virtualization Sequencer. On the Welcome page click Next.&lt;br /&gt;&lt;br /&gt;4. Read and accept the license agreement, and then click Next. Doing so takes you to the Setup Page. Leave the installation path at its default setting and click Next.&lt;br /&gt;&lt;br /&gt;5. Click Install to begin the installation of the App-V Sequencer.&lt;br /&gt;&lt;br /&gt;6. When the installation completes, click Finish. The Sequencer will now start.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;Source of Information :&amp;nbsp;Elsevier-Microsoft Virtualization Master Microsoft Server Desktop Application and Presentation&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-440155518707573619?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/440155518707573619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2012/01/installing-app-v-sequencer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/440155518707573619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/440155518707573619'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2012/01/installing-app-v-sequencer.html' title='INSTALLING THE APP-V SEQUENCER'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-612571503286290117</id><published>2012-01-06T15:00:00.000+08:00</published><updated>2012-01-06T15:00:02.008+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Virtualization'/><title type='text'>App-V SYSTEM REQUIREMENTS</title><content type='html'>You will notice the system requirements for the App-V Sequencer and Client are very similar to a typical end-user workstation.&lt;br /&gt;&lt;br /&gt;➤ App-V Sequencer Requirements&lt;br /&gt;o Processor—IntelW PentiumW III, 850 MHz or faster. The sequencing process is a single-threaded process; it does not take advantage of dual processors.&lt;br /&gt;&lt;br /&gt;o Memory—256 MB RAM or greater. A 500 MB page file is recommended.&lt;br /&gt;&lt;br /&gt;o Hard drive—Two physical drives, 20-GB minimum each. (Install the operating system and local applications on one drive, and use the second drive as the target for your virtual applications.) It is recommended your disk drives should be at least three times as large as the largest application you will sequence. If you have only one hard drive, you must use at least two NTFS volumes to partition it.&lt;br /&gt;&lt;br /&gt;o Operating system (this must be the same as the clients)—The Sequencer runs on the following operating systems:&lt;br /&gt;- Windows XP Professional (SP2 or SP3)&lt;br /&gt;- Windows Server 2003&lt;br /&gt;- Windows Vista&lt;br /&gt;- Windows Server 2008 with Terminal Services&lt;br /&gt;- Windows 7&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;App-V Client requirements&lt;br /&gt;Now we will discuss two App-V client requirements: App-V Desktop Client and App-V Terminal Services Client.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;App-V Desktop Client&lt;br /&gt;» Processor—See recommended system requirements for the operating system you are using.&lt;br /&gt;» RAM—See recommended system requirements for the operating system you are using.&lt;br /&gt;» Disk—30 MB for installation and 4096 MB for cache.&lt;br /&gt;» Windows XP Professional (SP2 or SP3) 32-bit&lt;br /&gt;» Windows Vista RTM/SP1 (Business, Enterprise, or Ultimate) 32-bit&lt;br /&gt;» Windows 7&lt;br /&gt;&lt;br /&gt;The following software prerequisites are installed automatically if the setup.exe method is used. For setup.msi install program, these must be installed first. Microsoft recommends using setup.exe.&lt;br /&gt;&lt;br /&gt;» Microsoft Visual Cþþ 2005 SP1 Redistributable Package (_86)—For more information about installing Microsoft Visual Cþþ 2005 SP1 Redistributable Package (_86), see http://go.microsoft.com/fwlink/?LinkId¼119961.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;» Microsoft Core XML Services (MSXML) 6.0 SP1 (_86)—For more information about installing Microsoft Core XML Services (MSXML) 6.0 SP1 (_86), see http://go.microsoft.com/fwlink/?LinkId¼63266.&lt;br /&gt;&lt;br /&gt;» Microsoft Application Error Reporting—The install program for this&lt;br /&gt;software is included in the Support\Watson folder in the self-extracting&lt;br /&gt;archive file.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;App-V Terminal Services Client&lt;br /&gt;» Processor—See recommended system requirements for the operating system you are using&lt;br /&gt;» RAM—See recommended system requirements for the operating system you are using (also depends on the number of users and applications)&lt;br /&gt;» Disk—30 MB for installation and 2 GB for cache&lt;br /&gt;» Windows Server 2003 (Standard, Enterprise, or Datacenter, SP1 or later) 32-bit&lt;br /&gt;» Windows Server 2008 (Standard, Enterprise, Datacenter) 32-bit&lt;br /&gt;» Windows 7&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;Source of Information :&amp;nbsp;Elsevier-Microsoft Virtualization Master Microsoft Server Desktop Application and Presentation&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-612571503286290117?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/612571503286290117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2012/01/app-v-system-requirements.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/612571503286290117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/612571503286290117'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2012/01/app-v-system-requirements.html' title='App-V SYSTEM REQUIREMENTS'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-6038167969035732548</id><published>2012-01-03T14:48:00.000+08:00</published><updated>2012-01-03T14:48:00.834+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Virtualization'/><title type='text'>WHAT IS AN APP-V PACKAGE?</title><content type='html'>An App-V package is the next generation of an application installation. Apart from some specialized scenarios, most applications prior to the introduction of App-V were simply “installed” on a user’s workstation and the state of the installation remains largely static unless the user or their network administrator choose to force the application to upgrade,&lt;br /&gt;update, etc. An App-V package is much more dynamic in that it can be&lt;br /&gt;custom designed to&lt;br /&gt;&lt;br /&gt;» Reside completely on a user’s workstation&lt;br /&gt;» Partially on a user’s workstation and partially on a server&lt;br /&gt;» Completely on a server only allowing access to the application from the user’s workstation&lt;br /&gt;» And many variances in-between.&lt;br /&gt;&lt;br /&gt;This approach allows you to efficiently maintain an App-V package. For example, an App-V package can be designed to install completely on a user’s workstation and still regularly “check-in” to the App-V infrastructure to look for updates, and then apply those updates in the background without impacting the user’s experience of the application.&lt;br /&gt;&lt;br /&gt;Isolating an application addresses application compatibilities that otherwise would make it impossible to run two applications on the same workstation. An example of this is two different applications, each requiring a different version of the Java runtime. Prior to App-V, installing both applications on the same desktop caused pain and frustration. App-V allows you to package an application together with its prerequisites, and then stream the collective package to a workstation without the need to actually “install” anything on the user’s workstation. You can do this for any or all applications, including two different versions of the same program.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Application Virtualization Sequencer&lt;br /&gt;The Sequencer is a wizard-based tool; App-V administrators will come to&lt;br /&gt;use and appreciate more than any other function in the App-V world. The&lt;br /&gt;Sequencer is used to create App-V sequenced applications and produce an&lt;br /&gt;application “package.” A package consists of several files, including&lt;br /&gt;&lt;br /&gt;» A sequenced application (.sft) file&lt;br /&gt;» Open Software Description (.osd) “link” files&lt;br /&gt;» Icon (.ico) files&lt;br /&gt;» A manifest xml file that can be used to distribute sequenced applications with electronic software delivery (ESD) systems&lt;br /&gt;» A project (.sprj) file&lt;br /&gt;&lt;br /&gt;The Sequencer can also be used to build Windows Installer files (.msi) for deployment to clients configured for stand-alone operation. The .sft, .osd, and .ico files are stored in a shared content folder on the Management Server and are used by the App-V client to access and run sequenced applications.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Application Virtualization Client&lt;br /&gt;The App-V Client is required on endpoint devices receiving applications from the App-V environment. It allows for management of package streaming on the client device; such as how much local cache is to be used by the application. It also manages how often the application checks in for any changes, and any user-specific configuration settings.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;Source of Information :&amp;nbsp;Elsevier-Microsoft Virtualization Master Microsoft Server Desktop Application and Presentation&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-6038167969035732548?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/6038167969035732548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2012/01/what-is-app-v-package.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/6038167969035732548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/6038167969035732548'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2012/01/what-is-app-v-package.html' title='WHAT IS AN APP-V PACKAGE?'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-90008190944273810</id><published>2011-12-31T23:40:00.000+08:00</published><updated>2011-12-31T23:40:00.092+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wireless Networks'/><title type='text'>Cell Phone Technologies</title><content type='html'>Cell phone technology seems an obvious approach to mobile computer communication, and indeed data services based on cellular standards are commercially available. One drawback is the cost to users, due in part to cellular’s use of licensed spectrum (which has historically been sold off to cellular phone operators for astronomical sums). The frequency bands that are used for cellular telephones (and now for cellular data) vary around the world. In Europe, e.g., the main bands for cellular phones are at 900 and 1800 MHz. In North America, 850-and 1900-MHz bands are used. This global variation in spectrum usage creates problems for users who want to travel from one part of the world to another, and has created a market for phones that can operate at multiple frequencies (e.g., a tri-band phone can operate at three of the four frequency bands mentioned above). That problem, however, pales in comparison to the proliferation of incompatible standards that have plagued the cellular communication business. Only recently have some signs of convergence on a small set of standards appeared. And finally, there is the problem that most cellular technology was designed for voice communication, and is only now starting to support moderately high-bandwidth data communication.&lt;br /&gt;&lt;br /&gt;Like 802.11 and WiMAX, cellular technology relies on the use of base stations that are part of a wired network. The geographic area served by a base station’s antenna is called a cell. A base station could serve a single cell or use multiple directional antennas to serve multiple cells. Cells do not have crisp boundaries, and they overlap. Where they overlap, a mobile phone could potentially communicate with multiple base stations. This is somewhat similar to the 802.11 picture. At any time, however, the phone is in communication with, and under the control of, just one base station. As the phone begins to leave a cell, it moves into an area of overlap with one or more other cells. The current base station senses the weakening signal from the phone, and gives control of the phone to whichever base station is receiving the strongest signal from it. If the phone is involved in a call at the time, the call must be transferred to the new base station in what is called a handoff .&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;As we noted above, there is not one unique standard for cellular, but rather a collection of competing technologies that support data traffi c in different ways and deliver different speeds. These technologies are loosely categorized by “ generation. ” The first generation (1G) was analog, and thus of limited interest from a data communications perspective. Most of the cell phone technology currently deployed is considered second generation (2G) or “ 2.5G ” (not quite worthy of being called 3G, but more advanced than 2G). The 2G and later technologies are digital. The most widely deployed 2G technology is referred to as GSM — the Global System for Mobile Communications — which is used in more than 200 countries. North America, however, is a late adopter of GSM, which helped prolong the proliferation of competing standards.&lt;br /&gt;&lt;br /&gt;Most 2G technologies use one of two approaches to sharing a limited amount of spectrum between simultaneous calls. One way is a combination of frequency-division multiplexing (FDM) and time-division multiplexing (TDM). The spectrum available is divided into disjoint frequency bands, and each band is subdivided into time slots. A given call is allocated every n th slot in one of the bands. The other approach is code division multiple access (CDMA). CDMA does not divide the channel in either time or frequency, but rather uses different chipping codes to distinguish the transmissions of different cell phone users.&lt;br /&gt;&lt;br /&gt;The 2G and later cell phone technologies use compression algorithms tailored to human speech to compress voice data to about 8 Kbps without losing quality. Since 2G technologies focus on voice communication, they provide connections with just enough bandwidth for that compressed speech — not enough for a decent data link. One of the first cellular data standards to gain widespread adoption is the General Packet Radio Service (GPRS), which is part of the GSM set of standards and is often referred to as a 2.5G technology.&lt;br /&gt;&lt;br /&gt;GSM networks make use of a multiplexing technique called time-division multiple access (TDMA). (Confusingly, there is also a particular cellular standard that is sometimes called TDMA, but is known formally as IS-136.) You can think of TDMA as being like TDM — traditionally used for telephone services — with the additional feature that the timeslots can be dynamically allocated to users or devices that need them (and deallocated from devices that no longer need them). The number of timeslots that are available for GPRS at a given frequency depends on how many cellular voice calls are currently in progress, since voice calls also consume timeslots. As a result, GPRS data rates tend to be lower in busy cells. In practice, users often get between 30 and 70 Kbps — coincidentally, just about the same as a user of a dial-up modem on a landline. Nevertheless, GPRS has proven quite useful and popular in some parts of the world as a way to communicate wirelessly when faster connection methods (such as 802.11) are not available. Other 2.5G data standards have also become available and some manage to be quite a bit higher in bandwidth than GPRS.&lt;br /&gt;&lt;br /&gt;The concept of a third generation (3G) was established before there was any implementation of 3G technologies, with the aim of shaping a single international standard that would provide much higher data bandwidth. Unfortunately, at the time of writing, several mutually incompatible 3G standards are emerging. Thus, the possibility that cellular standards will continue to diverge seems quite realistic. Interestingly, all the 3G standards are based on variants of CDMA. For example, the Universal Mobile Telecommunications System (UMTS) is based on wideband CDMA (W-CDMA). UMTS appears poised to be the successor to GSM, and in fact is sometimes referred to as 3GSM (i.e., the third-generation version of GSM). UMTS is intended to support data transfer rates of up to 1.92 Mbps, although real network conditions will probably result in lower rates in practice. Nevertheless, it should represent a significant performance improvement over GPRS. And like GSM, it should have quite widespread (if not actually universal) adoption around the world.&lt;br /&gt;&lt;br /&gt;There are a number of commercial UMTS networks in operation at the time of writing with many more announced or planned. And to make it quite clear that work in this field is far from complete, we note that 3.5G and 4G standards are also in the works.&lt;br /&gt;&lt;br /&gt;Finally , it should be noted that there is a class of mobile phones that are not cellular phones but satellite phones, or satphones . Satphones use communication satellites as base stations, communicating on frequency bands that have been reserved internationally for satellite use. Consequently, service is available even where there are no cellular base stations. Satphones are rarely used where cellular is available, since service is typically much more expensive. Satphones are also larger and heavier than modern cell phones because of the need to transmit and receive over much longer distances, to reach satellites rather than cellphone towers. Satellite communication is more extensively used in television and radio broadcasting, taking advantage of the fact that the signal is broadcast, not point-to-point. High-bandwidth data communication via satellite are commercially available, but its relatively high price (for both equipment and service) limits its use to regions where no alternative is available.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;Source of Information :&amp;nbsp;Elsevier Wireless Networking Complete 2010&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-90008190944273810?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/90008190944273810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2011/12/cell-phone-technologies.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/90008190944273810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/90008190944273810'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2011/12/cell-phone-technologies.html' title='Cell Phone Technologies'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-3662130856809866562</id><published>2011-12-26T23:34:00.000+08:00</published><updated>2011-12-26T23:34:00.532+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wireless Networks'/><title type='text'>Wireless Networks - WiMAX (802.16)</title><content type='html'>WiMAX , which stands for Worldwide Interoperability for Microwave Access, was designed by the WiMAX Forum and standardized as IEEE 802.16. It was originally conceived as a last-mile technology. In WiMAX’s case that “ mile ” is typically 1 – 6 miles, with a maximum of about 30 miles, leading to WiMAX being classifi ed as a metropolitan area network (MAN). In keeping with a last-mile role, WiMAX does not incorporate mobility at the time of this writing, although efforts to add mobility are nearing completion as IEEE 802.16e. Also in keeping with the last-mile niche, WiMAX’s client systems, called subscriber stations , are assumed to be not end-user computing devices, but rather systems that multiplex all the communication of the computing devices being used in a particular building. WiMAX provides up to 70 Mbps to a single subscriber station.&lt;br /&gt;&lt;br /&gt;In order to adapt to different frequency bands and different conditions, WiMAX defi nes several physical layer protocols. The original WiMAX physical layer protocol is designed to use frequencies in the 10- to 66-GHz range. In this range waves travel in straight lines, so communication is limited to line-of-sight (LOS). A WiMAX base station uses multiple antennas pointed in different directions; the area covered by one antenna’s signal is a sector . To extend WiMAX to near-LOS and non-LOS situations, several physical layer protocols were added that use the frequencies below 11 GHz (in the 10- to 11-GHz range, WiMAX can use either the original physical layer or one of the newer ones). Since this range includes both licensed and license-exempt frequencies, each of these physical layer protocols defines a variant better adapted to the additional interference and the regulatory constraints of the license-exempt frequencies.&lt;br /&gt;&lt;br /&gt;The physical layer protocols provide two ways to divide the bandwidth between upstream&lt;br /&gt;(i.e., from subscribers to base station) and downstream traffic: time-division duplexing (TDD) and frequency-division duplexing (FDD). TDD is simply STDM of the two streams; they take turns using the same frequency, and the proportion of upstream to downstream time can be varied dynamically, adaptively , by the base station. FDD is simply FDM of the two streams: one frequency is used for upstream and another for downstream. In license-exempt bands, the protocols use only TDD.&lt;br /&gt;&lt;br /&gt;Both channels, upstream and downstream, must be shared not just among the many subscriber stations in a given sector, but also among the many WiMAX connections that each subscriber can have with the base station. WiMAX — unlike 802.11 and Ethernet — is connection oriented. One reason for this is to be able to offer a variety of QoS guarantees regarding properties such as latency and jitter, with the aim of supporting high-quality telephony and high-volume multimedia in addition to bursty data traffic. This is conceptually similar to some of the wired last mile technologies (such as DSL) with which WiMAX is intended to compete.&lt;br /&gt;&lt;br /&gt;Sharing of the upstream and downstream channels is based on dividing them into equal-sized time slots. A WiMAX frame generally takes up multiple slots, with different frames taking different numbers of slots. The downstream channel (from base to subscribers) is relatively easy to subdivide into connections since only the base station sends on that channel. The base station simply sends addressed frames, one after the other. Each subscriber station in the sector receives all the frames, but ignores those not addressed to one of its connections.&lt;br /&gt;&lt;br /&gt;In the upstream direction, how a connection gets handled depends on its QoS parameters.&lt;br /&gt;Some connections get slots at a fixed rate, some get polled to determine how many slots they need currently, and some must request slots whenever they need them. Connections in this last category must contend to place their requests in a limited number of upstream slots set aside for contention. They use an exponential back off algorithm to minimize the chance of a collision, even on the first attempt.&lt;br /&gt;&lt;br /&gt;A European alternative to WiMAX is HIPERMAN, which stands for high-performance radio metropolitan area network and uses the 2- to 11-GHz range. South Korea’s WiBro (for wireless broadband) technology operates at 2.3 GHz, and is being brought into line with the emerging IEEE 802.16e standard for mobile WiMAX.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;Source of Information :&amp;nbsp;Elsevier Wireless Networking Complete 2010&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-3662130856809866562?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/3662130856809866562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2011/12/wireless-networks-wimax-80216.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/3662130856809866562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/3662130856809866562'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2011/12/wireless-networks-wimax-80216.html' title='Wireless Networks - WiMAX (802.16)'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-7417122506591835269</id><published>2011-12-23T23:06:00.000+08:00</published><updated>2011-12-23T23:06:00.747+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wireless Networks'/><title type='text'>Wireless Networks - Wi-Fi (802.11)</title><content type='html'>This section takes a closer look at a specific technology centered around the emerging IEEE 802.11 standard, also known as Wi-Fi . Wi-Fi is technically a trademark, owned by a trade group called the Wi-Fi alliance, that certifies product compliance with 802.11. Like its Ethernet and token ring siblings, 802.11 is designed for use in a limited geographical area (homes, office buildings, campuses), and its primary challenge is to mediate access to a shared communication medium — in this case, signals propagating through space. 802.11 supports additional features (e.g., time-bounded services, power management, and security mechanisms), but we focus our discussion on its base functionality.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Physical Properties&lt;/b&gt;&lt;br /&gt;802 .11 runs over six different physical layer protocols (so far). Five are based on spread spectrum radio and one on diffused infrared (and is of historical interest only at this point). The fastest runs at a maximum of 54 Mbps.&lt;br /&gt;&lt;br /&gt;The original 802.11 standard defined two radio-based physical layer standards, one using frequency hopping (over 79 1-MHz-wide frequency bandwidths) and the other using direct sequence (with an 11-bit chipping sequence). Both provide up to 2 Mbps. Then physical layer standard 802.11b was added. Using a variant of direct sequence, 802.11b provides up to 11 Mbps. These three standards run in the license-exempt 2.4 GHz frequency band of the electromagnetic spectrum. Then came 802.11a, which delivers up to 54 Mbps using a variant of frequency-division multiplexing (FDM) called orthogonal frequency-division multiplexing (OFDM) . 802.11a runs in the license-exempt 5-GHz band. On one hand, this band is less used, so there is less interference. On the other hand, there is more absorption of the signal and it is limited to almost the line of sight. The most recent standard is 802.11g, which is backward compatible with 802.11b (and returns to the 2.4-GHz band). 802.11g uses OFDM and delivers up to 54 Mbps. It is common for commercial products to support all three of 802.11a, 802.11b, and 802.11g, which not only ensures compatibility with any device that supports any one of the standards, but also makes it possible for two such products to choose the highest bandwidth option for a particular environment.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Collision Avoidance&lt;/b&gt;&lt;br /&gt;At first glance, it might seem that a wireless protocol would follow the same algorithm as the Ethernet — wait until the link becomes idle before transmitting and back off should a collision occur — and to a first approximation, this is what 802.11 does. The additional complication for wireless is that, while a node on an Ethernet receives every other node’s transmissions, a node on an 802.11 network may be too far from certain other nodes to receive their transmissions (and vice versa).&lt;br /&gt;&lt;br /&gt;A related problem, called the exposed node problem, occurs under the circumstances, where each of the four nodes is able to send and receive signals that reach just the nodes to its immediate left and right. For example, B can exchange frames with A and C but it cannot reach D, while C can reach B and D but not A. Suppose B is sending signal to A. Node C is aware of this communication because it hears B’s transmission. It would be a mistake, however, for C to conclude that it cannot transmit to anyone just because it can hear B’s transmission. For example, suppose C wants to transmit to node D. This is not a problem since C’s transmission to D will not interfere with A’s ability to receive from B. (It would interfere with A sending to B, but B is transmitting in our example.) 802.11 addresses these two problems with an algorithm called multiple access with collision avoidance (MACA).&lt;br /&gt;&lt;br /&gt;The idea is for the sender and receiver to exchange control frames with each other before the sender actually transmits any data. This exchange informs all nearby nodes that a transmission is about to begin. Specifically, the sender transmits a request-to-send (RTS) frame to the receiver; the RTS frame includes a field that indicates how long the sender wants to hold the medium (i.e., it specifies the length of the data frame to be transmitted). The receiver then replies with a clear-to-send (CTS) frame; this frame echoes this length field back to the sender. Any node that sees the CTS frame knows that it is close to the receiver, and therefore cannot transmit for the period of time it takes to send a frame of the specified length. Any node that sees the RTS frame but not the CTS frame is not close enough to the receiver to interfere with it, and so is free to transmit.&lt;br /&gt;&lt;br /&gt;There are two more details to complete the picture. Firstly, the receiver sends an acknowledgment (ACK) to the sender after successfully receiving a frame. All nodes must wait for this ACK before trying to transmit. Secondly, should two or more nodes detect an idle link and try to transmit an RTS frame at the same time, their RTS frames will collide with each other. 802.11 does not support collision detection, but instead the senders realize the collision has happened when they do not receive the CTS frame after a period of time, in which case they each wait a random amount of time before trying again. The amount of time a given node delays is defined by the same exponential back off algorithm used on the Ethernet.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;Source of Information :&amp;nbsp;Elsevier Wireless Networking Complete 2010&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-7417122506591835269?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/7417122506591835269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2011/12/wireless-networks-wi-fi-80211.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/7417122506591835269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/7417122506591835269'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2011/12/wireless-networks-wi-fi-80211.html' title='Wireless Networks - Wi-Fi (802.11)'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-2084309086938207847</id><published>2011-12-21T22:39:00.000+08:00</published><updated>2011-12-21T22:39:00.322+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wireless Networks'/><title type='text'>Wireless Networks - Bluetooth (802.15.1)</title><content type='html'>Bluetooth fills the niche of very short-range communication between mobile phones, PDAs, notebook computers, and other personal or peripheral devices. For example, Bluetooth can be used to connect a mobile phone to a headset or a notebook computer to a printer. Roughly speaking, Bluetooth is a more convenient alternative to connecting two devices with a wire. In such applications, it is not necessary to provide much range or bandwidth. This is fortunate for some of the target battery-powered devices, since it is important that they not consume much power.&lt;br /&gt;&lt;br /&gt;Bluetooth operates in the license-exempt band at 2.45 GHz. It has a range of only about 10 m. For this reason, and because the communicating devices typically belong to one individual or group, Bluetooth is sometimes categorized as a personal area network (PAN). Version 2.0 provides speeds up to 2.1 Mbps. Power consumption is low.&lt;br /&gt;&lt;br /&gt;Bluetooth is specified by an industry consortium called the Bluetooth Special Interest Group. It specifies an entire suite of protocols, going beyond the link layer to define application protocols, which it calls profiles, for a range of applications. For example, there is a profile for synchronizing a PDA with a personal computer. Another profile gives a mobile computer access to a wired LAN in the manner of 802.11, although this was not Bluetooth’s original goal. The IEEE 802.15.1 standard is based on Bluetooth but excludes the application protocols.&lt;br /&gt;&lt;br /&gt;The basic Bluetooth network configuration, called a piconet , consists of a master device and up to seven slave devices, as shown in Figure 2.3 . Any communication is between the master and a slave; the slaves do not communicate directly with each other. Because slaves have a simpler role, their Bluetooth hardware and software can be simpler and cheaper.&lt;br /&gt;&lt;br /&gt;Since Bluetooth operates in a license-exempt band, it is required to use a spread spectrum technique to deal with possible interference in the band. It uses frequency hopping with 79 channels (frequencies), using each for 625 μm at a time. This provides a natural time slot for Bluetooth to use for synchronous time-division multiplexing. A frame takes up 1, 3, or 5 consecutive time slots. Only the master can start to transmit in odd-numbered slots. A slave can start to transmit in an even-numbered slot, but only in response to a request from the master during the previous slot, thereby preventing any contention between the slave devices.&lt;br /&gt;&lt;br /&gt;A slave device can be parked: set to an inactive, low-power state. A parked device cannot communicate on the piconet; it can only be reactivated by the master. A piconet can have up to 255 parked devices in addition to its active slave devices. ZigBee is a newer technology that competes with Bluetooth to some extent. Devised by the ZigBee alliance and standardized as IEEE 802.15.4, it is designed for situations where the bandwidth requirements are low and power consumption must be very low to give very long&lt;br /&gt;battery life. It is also intended to be simpler and cheaper than Bluetooth, making it financially feasible to incorporate in cheaper devices such as a wall switch that wirelessly communicates with a ceiling-mounted fan.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;Source of Information :&amp;nbsp;Elsevier Wireless Networking Complete 2010&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-2084309086938207847?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/2084309086938207847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2011/12/wireless-networks-bluetooth-802151.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/2084309086938207847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/2084309086938207847'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2011/12/wireless-networks-bluetooth-802151.html' title='Wireless Networks - Bluetooth (802.15.1)'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-4424539887794216683</id><published>2011-12-14T00:45:00.000+08:00</published><updated>2011-12-14T00:45:00.978+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NoSQL'/><title type='text'>Introducing column-oriented database storage scheme</title><content type='html'>Column-oriented databases are among the most popular types of non-relational databases.&lt;br /&gt;Made famous by the venerable Google engineering efforts and popularized by the growth of social networking giants like Facebook, LinkedIn, and Twitter, they could very rightly be called the flag bearers of the NoSQL revolution. Although column databases have existed in many forms in academia for the past few years, they were introduced to the developer community with the publication of the following Google research papers:&lt;br /&gt;&lt;br /&gt;» The Google File System — http://labs.google.com/papers/gfs.html (October 2003)&lt;br /&gt;&lt;br /&gt;» MapReduce: Simplifi ed Data Processing on Large Clusters — http://labs.google.com/papers/mapreduce.html (December 2004)&lt;br /&gt;&lt;br /&gt;» Bigtable: A Distributed Storage System for Structured Data — http://labs.google.com/papers/bigtable.html (November 2006)&lt;br /&gt;&lt;br /&gt;These publications provided a view into the world of Google’s search engine success and shed light on the mechanics of large-scale and big data efforts like Google Earth, Google Analytics, and Google Maps. It was established beyond a doubt that a cluster of inexpensive hardware can be leveraged to hold huge amounts data, way more than a single machine can hold, and be processed effectively and efficiently within a reasonable timeframe. Three key themes emerged:&lt;br /&gt;&lt;br /&gt;» Data needs to be stored in a networked filesystem that can expand to multiple machines. Files themselves can be very large and be stored in multiple nodes, each running on a separate machine.&lt;br /&gt;&lt;br /&gt;» Data needs to be stored in a structure that provides more flexibility than the traditional normalized relational database structures. The storage scheme needs to allow for effective storage of huge amounts of sparse data sets. It needs to accommodate for changing schemas without the necessity of altering the underlying tables.&lt;br /&gt;&lt;br /&gt;» Data needs to be processed in a way that computations on it can be performed in isolated subsets of the data and then combined to generate the desired output. This would imply computational efficiency if algorithms run on the same locations where the data resides. It would also avoid large amounts of data transfer across the network for carrying out the computations on the humungous data set.&lt;br /&gt;&lt;br /&gt;Building on these themes and the wisdom that Google shared, a number of open-source implementations spun off, creating a few compelling column-oriented database products. The most famous of these products that mirrors all the pieces of the Google infrastructure is Apache Hadoop. Between 2004 and 2006, Doug Cutting, creator of Lucene and Nutch, the open-source search engine software, initiated Hadoop in an attempt to solve his own scaling problems while building Nutch. Afterwards, Hadoop was bolstered with the help of Yahoo! engineers, a number of open-source contributors, and its early users, into becoming a serious production-ready platform. At the same time, the NoSQL movement was gathering momentum and a number of alternatives to Hadoop, including those that improved on the original model, emerged. Many of these alternatives did not reinvent the wheel as far as the networked fi lesystem or the processing methodology was concerned, but instead added features to the column data store. In the following section, I focus exclusively on the underpinning of these column-oriented databases.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color: #999999;"&gt;Source of Information : NoSQL&lt;/span&gt;&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-4424539887794216683?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/4424539887794216683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2011/12/introducing-column-oriented-database.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/4424539887794216683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/4424539887794216683'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2011/12/introducing-column-oriented-database.html' title='Introducing column-oriented database storage scheme'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-4936368497007095431</id><published>2011-12-09T00:31:00.000+08:00</published><updated>2011-12-09T00:31:00.460+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NoSQL'/><title type='text'>GRAPH DATABASES</title><content type='html'>So far I have listed most of the mainstream open-source NoSQL products. A few other products like Graph databases and XML data stores could also qualify as NoSQL databases. However, I list the two Graph databases that may be of interest and something you may want to explore beyond this book: Neo4j and FlockDB: Neo4J is an ACID-compliant graph database. It facilitates rapid traversal of graphs.&lt;br /&gt;&lt;strong&gt;Neo4j&lt;/strong&gt;&lt;br /&gt;» Offi cial Online Resources — http://neo4j.org.&lt;br /&gt;» History — Created at Neo Technologies in 2003. (Yes, this database has been around before the term NoSQL was known popularly.)&lt;br /&gt;» Technologies and Language — Implemented in Java.&lt;br /&gt;» Access Methods — A command-line access to the store is provided. REST interface also available. Client libraries for Java, Python, Ruby, Clojure, Scala, and PHP exist.&lt;br /&gt;» Query Language — Supports SPARQL protocol and RDF Query Language.&lt;br /&gt;» Open-Source License — AGPL. Who Uses It — Box.net.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;FlockDB&lt;/strong&gt;&lt;br /&gt;» Offi cial Online Resources — https://github.com/twitter/flockdb&lt;br /&gt;» History — Created at Twitter and open sourced in 2010. Designed to store the adjacency lists for followers on Twitter.&lt;br /&gt;» Technologies and Language — Implemented in Scala.&lt;br /&gt;» Access Methods — A Thrift and Ruby client.&lt;br /&gt;» Open-Source License — Apache License version 2.&lt;br /&gt;» Who Uses It — Twitter.&lt;br /&gt;&lt;br /&gt;A number of NoSQL products have been covered so far. Hopefully, it has warmed you up to learn&lt;br /&gt;more about these products and to get ready to understand how you can leverage and use them&lt;br /&gt;effectively in your stack.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color: #999999;"&gt;Source of Information : NoSQL&lt;/span&gt;&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-4936368497007095431?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/4936368497007095431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2011/12/graph-databases.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/4936368497007095431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/4936368497007095431'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2011/12/graph-databases.html' title='GRAPH DATABASES'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-4438417883619862480</id><published>2011-12-06T22:52:00.000+08:00</published><updated>2011-12-06T22:52:00.415+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NoSQL'/><title type='text'>DISK STORAGE AND DATA READ AND WRITE SPEED</title><content type='html'>While the data size is growing and so are the storage capacities, the disk access speeds to write data to disk and read data from it is not keeping pace. Typical above-average current-generation 1 TB disks claim to access data at the rate of 300 Mbps, rotating at the speed of 7200 RPM. At these peak speeds, it takes about an hour (at best 55 minutes) to access 1 TB of data. With increased size, the time taken only increases. Besides, the claim of 300 Mbps at 7200 RPM speed is itself misleading. Traditional rotational media involves circular storage disks to optimize surface area. In a circle, 7200 RPM implies different amounts of data access depending on the circumference of the concentric circle being accessed. As the disk is filled, the circumference becomes smaller, leading to less area of the media sector being covered in each rotation. This means a peak speed of 300 Mbps degrades substantially by the time the disk is over 65 percent full. Solid-state drives (SSDs) are an alternative to rotational media. An SSD uses microchips, in contrast to electromechanical spinning disks. It retains data in volatile random-access memory. SSDs promise faster speeds and improved “input/output operations per second (IOPS)” performance as compared to rotational media. By late 2009 and early 2010, companies like Micron announced SSDs that could provide access speeds of over a Gbps (www.dailytech.com/UPDATED+Micron+Announces+Worlds+First+&lt;br /&gt;&lt;br /&gt;Native+6Gbps+SATA+Solid+State+Drive/article17007.htm). However, SSDs are fraught with bugs and issues as things stand and come at a much higher cost than their rotational media counterparts. Given that the disk access speeds cap the rate at which you can read and write data, it only make sense to spread the data out across multiple storage units rather than store them in a single large store.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color: #666666;"&gt;Source of Information : NoSQL&lt;/span&gt;&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-4438417883619862480?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/4438417883619862480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2011/12/disk-storage-and-data-read-and-write.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/4438417883619862480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/4438417883619862480'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2011/12/disk-storage-and-data-read-and-write.html' title='DISK STORAGE AND DATA READ AND WRITE SPEED'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-8554764175336624095</id><published>2011-12-03T00:00:00.000+08:00</published><updated>2011-12-03T00:00:06.944+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NoSQL'/><title type='text'>NoSQL Databases - ZooKeeper</title><content type='html'>When you’re running a service distributed across a large cluster of machines, even tasks like reading configuration information, which are simple on single-machine systems, can be hard to implement reliably. The ZooKeeper framework was originally built at Yahoo! to make it easy for the company’s applications to access configuration information in a robust and easy-to-understand way, but it has since grown to offer a lot of features that help coordinate work across distributed clusters. One way to think of it is as a very specialized key/value store, with an interface that looks a lot like a filesystem and supports operations like watching callbacks, write consensus, and transaction IDs that are often needed for coordinating distributed algorithms.&lt;br /&gt;&lt;br /&gt;This has allowed it to act as a foundation layer for services like LinkedIn’s Norbert, a flexible framework for managing clusters of machines. ZooKeeper itself is built to run in a distributed way across a number of machines, and it’s designed to offer very fast reads, at the expense of writes that get slower the more servers are used to host the service.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;Source of Information :&amp;nbsp;Big data Glossary&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-8554764175336624095?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/8554764175336624095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2011/12/nosql-databases-zookeeper.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/8554764175336624095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/8554764175336624095'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2011/12/nosql-databases-zookeeper.html' title='NoSQL Databases - ZooKeeper'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-1538187933435888483</id><published>2011-12-01T00:00:00.000+08:00</published><updated>2011-12-01T00:00:00.713+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NoSQL'/><title type='text'>NoSQL Databases - Riak</title><content type='html'>Like Voldemort, Riak was inspired by Amazon’s Dynamo database, and it offers a key/ value interface and is designed to run on large distributed clusters. It also uses consistent hashing and a gossip protocol to avoid the need for the kind of centralized index server that BigTable requires, along with versioning to handle update conflicts. Querying is handled using MapReduce functions written in either Erlang or JavaScript. It’s open source under an Apache license, but there’s also a closed source commercial version with some special features designed for enterprise customers.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;Source of Information :&amp;nbsp;Big data Glossary&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-1538187933435888483?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/1538187933435888483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2011/12/nosql-databases-riak.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/1538187933435888483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/1538187933435888483'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2011/12/nosql-databases-riak.html' title='NoSQL Databases - Riak'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-1790784313819229720</id><published>2011-11-29T23:59:00.000+08:00</published><updated>2011-11-29T23:59:00.506+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NoSQL'/><title type='text'>NoSQL Databases - Voldemort</title><content type='html'>An open source clone of Amazon’s Dynamo database created by LinkedIn, Voldemort has a classic three-operation key/value interface, but with a sophisticated backend architecture to handle running on large distributed clusters. It uses consistent hashing to allow fast lookups of the storage locations for particular keys, and it has versioning control to handle inconsistent values. A read operation may actually return multiple values for a given key if they were written by different clients at nearly the same time. This then puts the burden on the application to take some sensible recovery actions when it gets multiple values, based on its knowledge of the meaning of the data being written. The example that Amazon uses is a shopping cart, where the set of items could be unioned together, losing any deliberate deletions but retaining any added items, which obviously makes sense—from a revenue perspective, at least!&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;Source of Information :&amp;nbsp;Big data Glossary&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-1790784313819229720?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/1790784313819229720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2011/11/nosql-databases-voldemort.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/1790784313819229720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/1790784313819229720'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2011/11/nosql-databases-voldemort.html' title='NoSQL Databases - Voldemort'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-3418781944101869225</id><published>2011-11-27T23:58:00.000+08:00</published><updated>2011-11-27T23:58:00.190+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NoSQL'/><title type='text'>NoSQL Databases - Hypertable</title><content type='html'>Hypertable is another open source clone of BigTable. It’s written in C++, rather than Java like HBase, and has focused its energies on high performance. Otherwise, its interface follows in BigTable’s footsteps, with the same column family and timestamping concepts.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;Source of Information :&amp;nbsp;Big data Glossary&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-3418781944101869225?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/3418781944101869225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2011/11/nosql-databases-hypertable.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/3418781944101869225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/3418781944101869225'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2011/11/nosql-databases-hypertable.html' title='NoSQL Databases - Hypertable'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-4269660059686298412</id><published>2011-11-25T23:55:00.000+08:00</published><updated>2011-11-25T23:55:00.269+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NoSQL'/><title type='text'>NoSQL Databases - HBase</title><content type='html'>HBase was designed as an open source clone of Google’s BigTable, so unsurprisingly it has a very similar interface, and it relies on a clone of the Google File System called HDFS. It supports the same data structure of tables, row keys, column families, column names, timestamps, and cell values, though it is recommended that each table have no more than two or three families for performance reasons.&lt;br /&gt;&lt;br /&gt;HBase is well integrated with the main Hadoop project, so it’s easy to write and read to the database from a MapReduce job running on the system. One thing to watch out for is that the latency on individual reads and writes can be comparatively slow, since it’s a distributed system and the operations will involve some network traffic. HBase is at its best when it’s accessed in a distributed fashion by many clients. If you’re doing serialized reads and writes you may need to think about a caching strategy.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;Source of Information :&amp;nbsp;Big data Glossary&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-4269660059686298412?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/4269660059686298412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2011/11/nosql-databases-hbase.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/4269660059686298412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/4269660059686298412'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2011/11/nosql-databases-hbase.html' title='NoSQL Databases - HBase'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-7827398282598128217</id><published>2011-11-23T23:53:00.000+08:00</published><updated>2011-11-23T23:53:00.118+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NoSQL'/><title type='text'>NoSQL Databases - BigTable</title><content type='html'>BigTable is only available to developers outside Google as the foundation of the App Engine datastore. Despite that, as one of the pioneering alternative databases, it’s worth looking at.&lt;br /&gt;&lt;br /&gt;It has a more complex structure and interface than many NoSQL datastores, with a hierarchy and multidimensional access. The first level, much like traditional relational databases, is a table holding data. Each table is split into multiple rows, with each row addressed with a unique key string. The values inside the row are arranged into cells, with each cell identified by a column family identifier, a column name, and a timestamp, each of which I’ll explain below.&lt;br /&gt;&lt;br /&gt;The row keys are stored in ascending order within file chunks called shards. This ensures that operations accessing continuous ranges of keys are efficient, though it does mean you have to think about the likely order you’ll be reading your keys in. In one example, Google reversed the domain names of URLs they were using as keys so that all links from similar domains were nearby; for example, com.google.maps/index.html was near com.google.www/index.html.&lt;br /&gt;&lt;br /&gt;You can think of a column family as something like a type or a class in a programming language. Each represents a set of data values that all have some common properties; for example, one might hold the HTML content of web pages, while another might be designed to contain a language identifier string. There’s only expected to be a small number of these families per table, and they should be altered infrequently, so in practice they’re often chosen when the table is created. They can have properties, constraints, and behaviors associated with them.&lt;br /&gt;&lt;br /&gt;Column names are confusingly not much like column names in a relational database. They are defined dynamically, rather than specified ahead of time, and they often hold actual data themselves. If a column family represented inbound links to a page, the column name might be the URL of the page that the link is from, with the cell contents holding the link’s text. The timestamp allows a given cell to have multiple versions over time, as well as making it possible to expire or garbage collect old data.&lt;br /&gt;&lt;br /&gt;A given piece of data can be uniquely addressed by looking in a table for the full identifier that conceptually looks like row key, then column family, then column name, and finally timestamp. You can easily read all the values for a given row key in a particular column family, so you could actually think of the column family as being the closest comparison to a column in a relational database.&lt;br /&gt;&lt;br /&gt;As you might expect from Google, BigTable is designed to handle very large data loads by running on big clusters of commodity hardware. It has per-row transaction guarantees, but it doesn’t offer any way to atomically alter larger numbers of rows. It uses the Google File System as its underlying storage, which keeps redundant copies of all the persistent files so that failures can be recovered from.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;Source of Information :&amp;nbsp;Big data Glossary&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-7827398282598128217?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/7827398282598128217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2011/11/nosql-databases-bigtable.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/7827398282598128217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/7827398282598128217'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2011/11/nosql-databases-bigtable.html' title='NoSQL Databases - BigTable'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-4537388130139747142</id><published>2011-11-21T23:50:00.000+08:00</published><updated>2011-11-21T23:50:00.498+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NoSQL'/><title type='text'>NoSQL Databases - Redis</title><content type='html'>Two features make Redis stand out: it keeps the entire database in RAM, and its values can be complex data structures. Though the entire dataset is kept in memory, it’s also backed up on disk periodically, so you can use it as a persistent database. This approach does offer fast and predictable performance, but speed falls off a cliff if the size of your data expands beyond available memory and the operating system starts paging virtual memory to handle accesses. This won’t be a problem if you have small or predictably sized storage needs, but it does require a bit of forward planning as you’re developing applications. You can deal with larger data sets by clustering multiple machines together, but the sharding is currently handled at the client level. There is an experimental branch of the code under active development that supports clustering at the server level.&lt;br /&gt;&lt;br /&gt;The support for complex data structures is impressive, with a large number of list and set operations handled quickly on the server side. It makes it easy to do things like appending to the end of a value that’s a list, and then trim the list so that it only holds the most recent 100 items. These capabilities do make it easier to limit the growth of your data than it would be in most systems, as well as making life easier for application developers.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;Source of Information :&amp;nbsp;Big data Glossary&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-4537388130139747142?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/4537388130139747142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2011/11/nosql-databases-redis.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/4537388130139747142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/4537388130139747142'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2011/11/nosql-databases-redis.html' title='NoSQL Databases - Redis'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-7064501384943341756</id><published>2011-11-19T23:33:00.000+08:00</published><updated>2011-11-19T23:33:00.309+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NoSQL'/><title type='text'>NoSQL Databases - Cassandra</title><content type='html'>Originally an internal Facebook project, Cassandra was open sourced a few years ago and has become the standard distributed database for situations where it’s worth investing the time to learn a complex system in return for a lot of power and flexibility. Traditionally, it was a long struggle just to set up a working cluster, but as the project matures, that has become a lot easier. It’s a distributed key/value system, with highly structured values that are held in a hierarchy similar to the classic database/table levels, with the equivalents being keyspaces and column families. It’s very close to the data model used by Google’s BigTable. By default, the data is sharded and balanced automatically using consistent hashing on key ranges, though other schemes can be configured. The data structures are optimized for consistent write performance, at the cost of occasionally slow read operations. One very useful feature is the ability to specify how many nodes must agree before a read or write operation completes. Setting the consistency level allows you to tune the CAP tradeoffs for your particular application, to prioritize speed over consistency or vice versa.&lt;br /&gt;&lt;br /&gt;The lowest-level interface to Cassandra is through Thrift, but there are friendlier clients available for most major languages. The recommended option for running queries is through Hadoop. You can install Hadoop directly on the same cluster to ensure locality of access, and there’s also a distribution of Hadoop integrated with Cassandra available from DataStax.&lt;br /&gt;&lt;br /&gt;There is a command-line interface that lets you perform basic administration tasks, but it’s quite bare bones. It is recommended that you choose initial tokens when you first set up your cluster, but otherwise the decentralized architecture is fairly low-maintenance, barring major problems.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;Source of Information :&amp;nbsp;Big data Glossary&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-7064501384943341756?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/7064501384943341756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2011/11/nosql-databases-cassandra.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/7064501384943341756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/7064501384943341756'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2011/11/nosql-databases-cassandra.html' title='NoSQL Databases - Cassandra'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-5621469962871918801</id><published>2011-11-17T23:31:00.000+08:00</published><updated>2011-11-17T23:31:00.213+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NoSQL'/><title type='text'>NoSQL Databases - CouchDB</title><content type='html'>CouchDB is similar in many ways to MongoDB, as a document-oriented database with a JavaScript interface, but it differs in how it supports querying, scaling, and versioning. It uses a multiversion concurrency control approach, which helps with problems that require access to the state of data at various times, but it does involve more work on the client side to handle clashes on writes, and periodic garbage collection cycles have to be run to remove old data. It doesn’t have a good built-in method for horizontal scalability, but there are various external solutions like BigCouch, Lounge, and Pillow to handle splitting data and processing across a cluster of machines. You query the data by writing JavaScript MapReduce functions called views, an approach that makes it easy for the system to do the processing in a distributed way. Views offer a lot of power and flexibility, but they can be a bit overwhelming for simple queries.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;Source of Information :&amp;nbsp;Big data Glossary&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-5621469962871918801?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/5621469962871918801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2011/11/nosql-databases-couchdb.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/5621469962871918801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/5621469962871918801'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2011/11/nosql-databases-couchdb.html' title='NoSQL Databases - CouchDB'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-1080751784270696063</id><published>2011-11-15T23:29:00.000+08:00</published><updated>2011-11-15T23:29:00.294+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NoSQL'/><title type='text'>NoSQL Databases - MongoDB</title><content type='html'>Mongo, whose name comes from "humongous”, is a database aimed at developers with fairly large data sets, but who want something that’s low maintenance and easy to work with. It’s a document-oriented system, with records that look similar to JSON objects with the ability to store and query on nested attributes. From my own experience, a big advantage is the proactive support from the developers employed by 10gen, the commercial company that originated and supports the open source project. I’ve always had quick and helpful responses both on the IRC channel and mailing list, something that’s crucial when you’re dealing with comparatively young technologies like these. It supports automatic sharding and MapReduce operations. Queries are written in JavaScript, with an interactive shell available, and bindings for all of the other popular languages.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;Source of Information :&amp;nbsp;Big data Glossary&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-1080751784270696063?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/1080751784270696063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2011/11/nosql-databases-mongodb.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/1080751784270696063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/1080751784270696063'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2011/11/nosql-databases-mongodb.html' title='NoSQL Databases - MongoDB'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-6510683779613685651</id><published>2011-11-13T23:22:00.001+08:00</published><updated>2011-11-13T23:23:29.175+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NoSQL'/><title type='text'>NoSQL Databases</title><content type='html'>A few years ago, web programmers started to use the memcached system to temporarily store data in RAM, so frequently used values could be retrieved very quickly, rather than relying on a slower path accessing the full database from disk. This coding pattern required all of the data accesses to be written using only key/value primitives, initially in addition to the traditional SQL queries on the main database. As developers got more comfortable with the approach, they started to experiment with databases that used a key/value interface for the persistent storage as well as the cache, since they already had to express most of their queries in that form anyway. This is a rare example of the removal of an abstraction layer, since the key/value interface is less expressive and lower-level than a query language like SQL. These systems do require more work from an application developer, but they also offer a lot more flexibility and control over the work the database is performing. The cut-down interface also makes it easier for database developers to create new and experimental systems to try out new solutions to tough requirements like very large-scale, widely distributed data sets or high throughput applications.&lt;br /&gt;&lt;br /&gt;This widespread demand for solutions, and the comparative ease of developing new systems, has led to a flowering of new databases. The main thing they have in common is that none of them support the traditional SQL interface, which has led to the movement being dubbed NoSQL. It’s a bit misleading, though, since almost every production environment that they’re used in also has an SQL-based database for anything that requires flexible queries and reliable transactions, and as the products mature, it’s likely that some of them will start supporting the language as an option. If “NoSQL” seems too combative, think of it as “NotOnlySQL.” These are all tools designed to trade the reliability and ease-of-use of traditional databases for the flexibility and performance required by new problems developers are encountering.&lt;br /&gt;&lt;br /&gt;With so many different systems appearing, such a variety of design tradeoffs, and such a short track record for most, this list is inevitably incomplete and somewhat subjective. I’ll be providing a summary of my own experiences with and impressions of each database, but I encourage you to check out their official web pages to get the most up-todate and complete view.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;Source of Information :&amp;nbsp;Big data Glossary&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-6510683779613685651?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/6510683779613685651/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2011/11/nosql-databases.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/6510683779613685651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/6510683779613685651'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2011/11/nosql-databases.html' title='NoSQL Databases'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-2946540815765776062</id><published>2010-12-25T00:59:00.000+08:00</published><updated>2010-12-25T00:59:39.719+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hardware review'/><title type='text'>2010 Power Supplies You Care The Most About</title><content type='html'>PSU vendors focused more on efficiency in 2010, and if a power supply offers an energy efficiency of greater than 80%, you can bet that it’ll be listed prominently on the box. Other popular additions include thermally regulated fans, sleeved cables, and quiet fan bearings. Most newer power supplies now include split PCI-E connectors to support a variety of graphics cards.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Winner: Enermax EMG800EWT MODU87+ 800W&lt;/strong&gt;&lt;br /&gt;$249.99; www.enermax.com&lt;br /&gt;The Enermax EMG800EWT MODU87+ was one of our favorites in the June issue because of its Dynamic Hybrid Transformer topology, which improves the power supply’s ability to deliver consistent output with dynamic loads. The keys to the Dynamic Hybrid Transformer include a resonant transformer array that combines a resonant choke, the main transformer, a driver transformer, and a standby transformer; dynamic voltage transforming to provide power saving when idle; and dynamic frequency transforming for energy efficiency under load.&lt;br /&gt;&lt;br /&gt;Overall, Enermax indicates the EMG800EWT MODU87+ 800W can deliver at least 87% efficiency at 20% and 100% load. Enermax also installs a 13.9cm Twister-bearing fan to reduce noise and improve the lifespan (100,000 hours MTBF) of the power supply. It offers ATX12V v2.3 support, so you can power the latest Intel and AMD processors, and the EMG800EWT MODU87+ 800W is also CrossFireXand SLI-ready. The 24-pin ATX, +12V auxiliary, and two 6+2 pin PCI-E connectors are built into the power supply; the rest of the power cables are modular. Enermax includes four 6+2 PCI-E plugs, 12 SATA connectors, and eight 4-pin Molex plugs.&lt;br /&gt;&lt;br /&gt;We also like that Enermax includes its HeatGuard, SafeGuard, and CordGuard technology to protect the power supply’s circuitry and prolong use. For instance, the HeatGuard technology keeps the EMG800EWT MODU87+ running for 30 to 60 seconds after shutdown to remove the heat remaining in the power supply. Because of the unit’s 80 Plus Gold certification, it’s ideal for enthusiasts with a high-performance processor and one high-end or two midrange graphics cards.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;First Runner-Up: Corsair Professional Series Gold AX1200&lt;/strong&gt;&lt;br /&gt;$277.99; www.corsair.com&lt;br /&gt;We checked out the Corsair Professional Series Gold AX1200 in the August issue (see page 25) and found that it was ideal for power users. Some of the features of the AX1200 include a 100A (1,204.8W) single +12V rail, a fully modular cable system, and a lownoise design based around a thermallycontrolled 140mm fan. For power efficiency, the AX1200 offers individual DC-DC regulation for the +3.3V, +5V, and +12V rails. On the secondary side of the AX1200’s circuitry, Corsair employs low-loss MOSFETs in the synchronous rectification circuitry and in a four-layer modular connector board. Overall, the Professional Series Gold AX1200 meets the 80 Plus Gold efficiency standard.&lt;br /&gt;&lt;br /&gt;Another benefit of the Professional Series Gold AX1200 is Corair’s Zero Voltage Switching and Zero Current Switching technology, which minimizes switching losses to improve efficiency and reduce waste heat. The 1,200 watts of power means that this Corsair power supply can handle pretty much any system you throw at it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Second Runner-Up: PC Power &amp;amp; Cooling Silencer Mk II 750W&lt;/strong&gt;&lt;br /&gt;$159.99; www.pcpower.com&lt;br /&gt;PC Power &amp;amp; Cooling rates the Silencer Mk II 750W as 88% efficient and indicates that the +3.3V, +5V, and +12V DC outputs run within 2% of regulation. We checked out the unit in the September issue and found that Silencer lived up to its name, because it was nearly noiseless during the testing process. To accomplish the quiet design, PC Power &amp;amp; Cooling installed a 135mm, ball-bearing, thermallycontrolled fan. The Silencer MkII 750 offers four PCI-E (two 6-pin, two 6+2 pin) connectors, eight SATA connectors, and support for both ATX12V and EPS12V motherboards. PC Power &amp;amp; Cooling offers a seven-year warranty on the Silencer MkII 750W.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://itechcloud.blogspot.com/2010/12/2010-processors-you-care-most-about.html"&gt;2010 Processors You Care The Most About&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color: #999999;"&gt;Source of Information : Computer Power User (CPU) January 2011&lt;/span&gt;&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-2946540815765776062?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/2946540815765776062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/12/2010-power-supplies-you-care-most-about.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/2946540815765776062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/2946540815765776062'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/12/2010-power-supplies-you-care-most-about.html' title='2010 Power Supplies You Care The Most About'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-8433037175773519571</id><published>2010-12-25T00:55:00.000+08:00</published><updated>2010-12-25T00:55:27.902+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hardware review'/><title type='text'>2010 Memory You Care The Most About</title><content type='html'>Other than the typical jumps in frequency speeds, RAM didn’t change too much in 2010. Intel’s X58 chipset is still the only one that works with triplechannel memory, while every other Intel and AMD chipset features a dualchannel configuration. The increase in RAM frequencies has led to greater heat, so there’s a greater need for cooling, including tall finned heat spreaders and fans for many memory modules faster than 1,800MHz.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Winner: 8GB Patriot Viper Xtreme Series DDR3-2000MHz (PX538G2000ELK)&lt;/strong&gt;&lt;br /&gt;$249.99; www.patriotmemory.com&lt;br /&gt;Patriot’s Viper Xtreme series features an extruded aluminum shield that’s built around 6 grams of copper to efficiently cool the modules. Stock timings are 9-10- 9-27 at 1.65V. Patriot indicates that the 8GB DDR3-2000 kit has been optimized for performance on P55 chipsets. The modules are Intel XMP-ready, so you can easily overclock the memory using recommended settings and voltages.&lt;br /&gt;&lt;br /&gt;We also like that this kit is comparatively affordable for an enthusiastlevel 8GB set that consists of two 4GB modules. And because the 8GB only takes up space in two slots, you have space to add more memory in the future. In CPU’s test of the 6GB triple-channel version, we experienced above average results in 3DMark Vantage, MainConcept, and WinRAR benchmark tests. The Viper Xtreme Series timings also give you flexibility when overclocking.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;First Runner-Up: 12GB Corsair Dominator GT DDR3-2000 (CMT12GX3M3A2000C9)&lt;/strong&gt;&lt;br /&gt;$403.99; www.corsair.com&lt;br /&gt;This 12GB kit consists of three 4GB modules and was one of the most popular choices for memory in our Dream PC issue. The Corsair Dominator GT triple-channel DDR3 memory runs at 2000MHz and includes Corsair’s Airflow fan to cool the modules, so you won’t need to invest in any third-party memory cooling. The red and black modules feature Corsair’s DHX (Dual-path Heat Xchange) design with tall finned heat spreaders to cool the fast memory.&lt;br /&gt;&lt;br /&gt;The 12GB Corsair Dominator GT DDR3-2000 kit features timings of 9-10-9-27, and you can use one of the Intel XMP settings to overclock the memory or configure your own settings. We also like that the Corsair Dominator GT module’s fins are removable, so you can add extended fins, or connect a liquidcooler such as Corsair’s Hydro Series H30 memory cooler, to customize the modules to meet your overclocking needs. Corsair offers a limited lifetime warranty on the 12GB Corsair Dominator GT DDR3-2000 kit.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Second Runner-Up: 6GB Kingston HyperX T1 DDR3-1866 (KHX1866C9D3T1K3/6GX)&lt;/strong&gt;&lt;br /&gt;$142.99; www.kingston.com&lt;br /&gt;The HyperX T1 series is the top of the line for Kingston, and this 6GB kit includes three 2GB DDR3 modules that can run at up to 1,866MHz. The affordable kit features impressive latency timings of 9-9-9-27, and you can program a CAS latency of 5, 6, 7, 8, 9, or 10. The extra-tall HyperX T1 heat spreaders (the modules measure 2.4 inches high) give Kingston the ability to push memory frequencies and timings. Each module of the 6GB HyperX T1 DDR3-1866 kit features a PCB made of 16 128MB 8-bit chips. The kit is Intel XMP-ready and comes with a limited lifetime warranty from Kingston.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://developertechno.blogspot.com/2010/12/2010-storage-devices-you-care-most.html"&gt;2010 Storage Devices You Care The Most About&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color: #999999;"&gt;Source of Information : Computer Power User (CPU) January 2011&lt;/span&gt;&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-8433037175773519571?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/8433037175773519571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/12/2010-memory-you-care-most-about.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/8433037175773519571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/8433037175773519571'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/12/2010-memory-you-care-most-about.html' title='2010 Memory You Care The Most About'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-2770972611047393184</id><published>2010-09-11T01:50:00.000+08:00</published><updated>2010-09-11T01:50:00.395+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HTML5'/><title type='text'>IE9 and HTML5: Deep Romance or Strange Bedfellows?</title><content type='html'>Microsoft knows HTML5 is coming, and Internet Explorer 9 (IE9) needs to implement it or face irrelevance. With each successive platform preview release of IE9, Redmond has opened its arms wider to the technology. With the major revision to the Web’s markup language expected in HTML5, Microsoft seems to be staking out a large comfort zone. Will there be a no-go zone as well?&lt;br /&gt;&lt;br /&gt;HTML5 includes a number of new capabilities and many of them pose an existential threat to Microsoft and desktop software in general. With Scalable Vector Graphics (SVG) and the new &amp;lt;canvas&amp;gt; tag, developers can render graphics and animation in the browser from JavaScript that IE8 can only display using Flash or Silverlight. With the new &amp;lt;audio&amp;gt; and &amp;lt;video&amp;gt; tags, media can be similarly embedded and played without the use of rich Internet application (RIA) plug-ins. And with the Web Open Font Format (WOFF), refined typography can be rendered in a Web page as true text, rather than as images. Taken together, these features allow HTML5 to compete vigorously with the media and presentation capabilities of Silverlight (and Flash).&lt;br /&gt;&lt;br /&gt;Of these technologies, IE9 Platform Preview (PP) 2 implemented only SVG. While Microsoft said &amp;lt;audio&amp;gt; and &amp;lt;video&amp;gt; tag support was coming, many were unsure about &amp;lt;canvas&amp;gt; and WOFF. But PP3, released in late June, implemented all these features and moved Internet Explorer’s HTML5 fl irtation to serious courtship. Taking the relationship to the next level will be much more challenging.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;There’s an App for That?&lt;br /&gt;The Web has, for much of its history, functioned in two capacities. At first, it handled the sharing of documents, mostly among academics. Later, HTML was extended (some would say hacked) to accommodate simple, form-based applications as well. But Web applications haven’t provided for offline operation, nor offered any amenity for local database requirements. They have not been particularly well-suited to intensive data entry, either: things like required fields, input masks and pick lists have required client script, sometimes in great quantity. Given how crucial these capabilities are to line-of-business applications, the Web has not been an acceptable substitute to desktop and RIA development in the enterprise.&lt;br /&gt;&lt;br /&gt;Components of the HTML5 draft specifi cation address these shortcomings too. Numerous enhancements to the &amp;lt;form&amp;gt; and &amp;lt;input&amp;gt; tags largely address the data entry issues, allowing declarative markup to be used in place of imperative script to get the UI and data validation working. Offl ine operation is made possible through the &amp;lt;html&amp;gt; tag’s manifest attribute and the cache manifest fi le. Local SQL database access is provided through JavaScript methods like openDatabase and executeSql. Many of these capabilities are implemented in the current versions of Chrome, Safari and Opera; some are implemented in Firefox as well, but none of these features is implemented in IE8, or even IE9 PP3. Will any of them make it into the fi nal IE9 product?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Microsoft, Choose Your Poison&lt;br /&gt;If Microsoft doesn’t implement at least some of these capabilities, it risks further erosion of the IE market share. If it does implement them, Microsoft may risk something bigger: eventual erosion of Windows supremacy. It’s one thing if the consumer world moves to HTML for rich media, print content and games, but if the enterprise world moves to HTML5 as the application platform of choice, that could make the client OS a commodity.&lt;br /&gt;&lt;br /&gt;On the consumer side, this also threatens Apple, but on the iPhone, iPod Touch and iPad, apps and the App Store are, culturally, the outlets for the premium experience. Apple’s comfortable with HTML5 because the Web is a second-class citizen on its hottest, newest platform. Could Microsoft pull a rabbit out of its hat with Windows Phone 7, and leverage it as Apple has leveraged iOS? Maybe. But the Microsoft culture, and its financial security, is oriented around Windows and Office, and HTML5 introduces enormous risk to that franchise.&lt;br /&gt;&lt;br /&gt;IE9 needs to walk the line between making Windows the best platform in which to experience the modern Web, while at the same time thwarting the allure of that Web as the dominant host of enterprise applications. IE9 and HTML5 will continue this Tango until the browser ships. Tango is hard; Microsoft must take lessons and practice obsessively. The dance will shed much light on Microsoft’s market position for the next decade. Meanwhile, the Microsoft ecosystem needs to watch this performance very carefully. It will shed light on the ecosystem’s position too.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : Visual Studio Magazine August 2010&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-2770972611047393184?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/2770972611047393184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/09/ie9-and-html5-deep-romance-or-strange.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/2770972611047393184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/2770972611047393184'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/09/ie9-and-html5-deep-romance-or-strange.html' title='IE9 and HTML5: Deep Romance or Strange Bedfellows?'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-403967185711528933</id><published>2010-09-10T01:22:00.000+08:00</published><updated>2010-09-10T01:22:00.286+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><title type='text'>Visual Studio 2010 Upgrade Tips</title><content type='html'>Now for the caveats: If you move existing projects to Visual Studio 2010 from Visual Studio 2008 or 2005, your platform target is not updated. Visual Studio 2010 supports development targeting older framework libraries to aid in application deployment, but the project itself is altered to become a Visual Studio 2010 project and you won’t be able to open it in Visual Studio 2008. On the surface the changes are just version number changes in the project and solution files. Beneath the surface, there’s no guarantee that the structure of supporting files remains unchanged, so consider the move to Visual Studio 2010 a permanent one for your project, and keep backups in case you have a reason to revert. Changes to the workflow of data projects managed from Visual Studio (such as how you load scripts) are significant and may be confusing if you manage databases from Visual Studio.&lt;br /&gt;&lt;br /&gt;Visual Studio 2010 is a full rewrite. While it’s effectively a 1.0 product, overall performance and stability are adequate. But you’re much more likely to experience quirky behavior (such as the Clipboard ring sometimes not working as expected) and occasional crashes than in Visual Studio 2008.&lt;br /&gt;&lt;br /&gt;Pick up two or three tips a week from rereading this article, tip of the day sites, by having tips of the month at your local user group, or by exploring the menus and commands in the keyboard-mapping dialog. Consider buying Sara Ford’s “Microsoft Visual Studio Tips” (Microsoft Press, 2008). Ford’s book covers Visual Studio 2008, but almost all the tips also apply to Visual Studio 2010—and Ford’s donating her author proceeds to the Save Waveland Scholarship Fund, for Hurricane Katrina survivors in Waveland, Miss. Wherever you get your tips, the ones that make your life easier will stick and you’ll forget the ones that don’t. Visual Studio is a tremendously powerful tool that you can’t learn all at one time.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : Visual Studio Magazine August 2010&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-403967185711528933?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/403967185711528933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/09/visual-studio-2010-upgrade-tips.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/403967185711528933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/403967185711528933'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/09/visual-studio-2010-upgrade-tips.html' title='Visual Studio 2010 Upgrade Tips'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-4118343281059829220</id><published>2010-09-09T01:20:00.000+08:00</published><updated>2010-09-09T01:20:00.124+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><title type='text'>Visual Studio 2010 Other Enhancements</title><content type='html'>Visual Studio 2010 also has many miscellaneous improvements and support for libraries. The WPF designer is improved, and there’s a visual editor for the new Windows Workflow. XSLT gets a profiler and XSD gets a new designer. WPF and Silverlight get drag-and-drop data binding. ASP.NET gets many new features to support the vast improvements in development brought by jQuery and Model-View-Controller (MVC). The T4 code generator becomes a first-class citizen and a new style of T4 execution called preprocessed templates lets you generate code from apps outside Visual Studio, either with a standalone generator or your runtime application. Visual Studio 2010 embraces SharePoint development.&lt;br /&gt;&lt;br /&gt;Windows Azure Tools for Visual Studio 2010 support cloud development. There’s better support for other languages, including F# in the box, and snippet support for HTML and JavaScript. Whew! There are an amazing number of improvements, and I’m skipping the plethora of features resulting from the efforts in architecture, testing, database management and other areas that are reserved for the Ultimate version. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : Visual Studio Magazine August 2010&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-4118343281059829220?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/4118343281059829220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/09/visual-studio-2010-other-enhancements.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/4118343281059829220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/4118343281059829220'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/09/visual-studio-2010-other-enhancements.html' title='Visual Studio 2010 Other Enhancements'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-6653543115247115372</id><published>2010-09-08T01:18:00.000+08:00</published><updated>2010-09-08T01:18:00.234+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><title type='text'>Visual Studio 2010 Improved IntelliSense</title><content type='html'>IntelliSense received improvements in Visual Studio 2010. Visual Studio evaluates what you type against the Pascal interpretation of appropriate symbols, similar to the Pascal interpretation in the Navigate To dialog, narrowing IntelliSense options. This allows you to find things quickly where you remember only part of the symbol, generally the relevant portion, ignoring any preceding words like “Is” or “Allow.” The abbreviations let you quickly enter the symbols you frequently use. IntelliSense is now filtered for the current target platform—Microsoft .NET Framework 4 features won’t appear in IntelliSense of a project targeting Microsoft .NET Framework 3.5.&lt;br /&gt;&lt;br /&gt;Previous versions of IntelliSense were awkward in a test-driven development (TDD) environment where the symbols do not yet exist. IntelliSense could be quite pushy, requiring frequent presses on the Esc key. Visual Studio 2010 offers a second mode for IntelliSense mode called suggestion mode. This mode assumes you may or may not be entering an existing symbol. The top of the suggestion mode IntelliSense box displays what will be entered if you close IntelliSense. You can use arrow keys or the mouse to select an existing item, or enter your text as written without IntelliSense interference:&lt;br /&gt;&lt;br /&gt;Visual Studio 2010 also provides TDD support through the Generate from Usage features. If you call to code that has not been created, you’ll get a compiler error because the symbol is not found. The error correction dialog now includes Generate from Usage options. The specific options available are based on the context. If it looks like a method, property or field, appropriate options are displayed. If it looks like a type, available options are creating a new class or a new type. Creating a new class will create a new file in your current project with an empty class using the symbol name. Creating a new type displays a dialog with many options for how the new type is created, including the project where it’s located. There are numerous improvements to debugging across all versions, but I think debugging deserves a future column to itself.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : Visual Studio Magazine August 2010&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-6653543115247115372?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/6653543115247115372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/09/visual-studio-2010-improved.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/6653543115247115372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/6653543115247115372'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/09/visual-studio-2010-improved.html' title='Visual Studio 2010 Improved IntelliSense'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-6087442945463307663</id><published>2010-09-07T00:18:00.000+08:00</published><updated>2010-09-07T00:18:00.445+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><title type='text'>Search Shortcuts in Visual Studio 2010</title><content type='html'>Beyond Navigate To and Call Hierarchy, Visual Studio 2010 doesn’t include new search features, but existing features are wildly underutilized. Beyond a simple search, you can Find in Files, Find Symbols, use F3 and Ctl-F3 for the next and previous, and use the quick find box in the toolbar. Find in Files lets you specify the directory to search and the file types. Find Symbols lets you limit your search by platform and create custom component sets for searching as well as supporting both prefix and substring searches. And you can use RegEx in many search dialogs. There are two additional keyboard search tricks. If you select a set of characters in your code and hit Ctl-F3 or Ctl-Shift-F3, you’ll navigate forward and back through any matches. If you press Ctl-I or Alt-I—depending on your keyboard layout—you’ll enter incremental search mode and the cursor will change to an arrow and binoculars. In this mode, Visual Studio will refine your search as you type, moving to the next matching value. You can also hit F3 or Shift-F3 to navigate to the next or previous matches. Hitting these keys also ends incremental search mode and places your search text into the quick search box for easy reference or reuse.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : Visual Studio Magazine August 2010&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-6087442945463307663?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/6087442945463307663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/09/search-shortcuts-in-visual-studio-2010.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/6087442945463307663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/6087442945463307663'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/09/search-shortcuts-in-visual-studio-2010.html' title='Search Shortcuts in Visual Studio 2010'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-8099426941127690256</id><published>2010-09-06T00:11:00.000+08:00</published><updated>2010-09-06T00:11:00.201+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><title type='text'>Tweaks to the Editor with Visual Studio 2010</title><content type='html'>With previous versions of Visual Studio you could highlight a block by holding the Alt-Left mouse button and dragging. Now you have something useful to do with the block besides deleting it. Anything you type will simultaneously appear on all lines in the block. Outlining is improved in Visual Studio 2010. If you position over the vertical line representing the outline, the associated outline block appears shaded. If you click the line, this block collapses. You can also hide code within a method by selecting it, right-clicking and selecting Outline/Hide Selection. This can make it easier to understand complex methods—although breaking up complex methods remains a better strategy. Refactoring tools remain available in C# and through free third-party products for Visual Basic. The splitter in the upper-right corner of the edit window works a little differently in Visual Studio 2010. The cursor no longer changes when you pass over it, but you can still pull it down to see multiple locations in a single file within the same window. The left margin shows what files are changed. Yellow indicates changes that are not yet saved. Green marks lines that are saved, but don’t match the originally opened file—generally lines you can undo. A new orange color indicates lines that are the same as the original, but not yet saved. This generally happens when you undo back to the original, but an intermediate save means what’s saved doesn’t match what’s displayed.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : Visual Studio Magazine August 2010&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-8099426941127690256?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/8099426941127690256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/09/tweaks-to-editor-with-visual-studio.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/8099426941127690256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/8099426941127690256'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/09/tweaks-to-editor-with-visual-studio.html' title='Tweaks to the Editor with Visual Studio 2010'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-7357406546199422532</id><published>2010-09-05T01:00:00.000+08:00</published><updated>2010-09-05T01:00:00.923+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><title type='text'>Better Navigation with Visual Studio 2010</title><content type='html'>Navigating between your open windows continues to improve with each version of Visual Studio. Ctl-Tab displays a navigable list of available windows and Ctl-F6/Ctl-Shift-F6 navigates through tabs. Ctl-Minus and Ctl-Shift-Minus now offer a slightly different behavior, which navigates only through text editor (code) tabs, skipping designers. You can access the drop-down list of open tabs with Ctl-Alt-Down, or if this fails, key map searching on “EzMdi.”&lt;br /&gt;&lt;br /&gt;Once dropped down, you can navigate to a specific tab either with the mouse or by typing the initial characters of the name. A subtle aspect of the drop-down is that the drop-down arrow changes when there are tabs out of view. The trick of navigating by typing the name also works when navigating in Solution Explorer. Windows themselves become more flexible in Visual Studio 2010. All windows can separate from Visual Studio, which is particularly useful when you drag them to a second monitor. Tool windows remain in a dockable state at all times, making rearrangement easier. The float option remains, but its purpose is to float a single item of a set of tabbed and docked windows. Dragging the title bar moves the set. In both cases, simply dragging to a dock location redocks, and dropping on a title bar adds to that tabbed set. Tool windows can now become tabs in the main window.&lt;br /&gt;&lt;br /&gt;Within a code window you can navigate backward and forward using the back and forward buttons or keyboard shortcuts (which differ by keyboard layout). The Navigate To dialog box is new to Visual Studio 2010 and can be accessed via the Edit menu or a shortcut key. This feature has sometimes been called “Quick Search.” It allows navigation to any symbol (such as a type or method) in your project and is cached for very fast performance.&lt;br /&gt;&lt;br /&gt;The search is based on a Pascal-style search, which assumes every capital letter or underscore in your symbol name delimits a word you might search on. A special trick is to include a space in your search string to find two different word parts based on a partial search. For example, “bi att” finds BizServiceAttribute and BizObjectAttribute. If you type capital letters, Visual Studio 2010 will evaluate them as an abbreviation, so BSA will also retrieve BizServiceAttribute as one of the matching options. This new dialog is especially useful when you’re not quite sure of the name. It enhances the benefits of good, semantic, multipart naming.&lt;br /&gt;&lt;br /&gt;The Visual Studio 2010 editor has a feature that at first glance may seem a little odd. Hovering the cursor over a symbol highlights all matching symbols. This illustrates how symbols are used, particularly if you temporarily zoom out. What’s cool is you can navigate between the highlighted words using Ctl-Shift up and down arrows. If you don’t like this feature, you can turn it off in the Tool/Options page for each language.&lt;br /&gt;&lt;br /&gt;C# and C++ have a special navigation feature called Call Hierarchy. Call Hierarchy allows exploration and navigation based on the ways methods are used, jumping to call sites and to called members. While this has some similarities to the runtime callstack, it’s available at design time and shows all potential paths, not just the single, currently executing path. Call Hierarchy is an extremely valuable tool. Hopefully, Visual Basic will support Call Hierarchy in the next version.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : Visual Studio Magazine August 2010&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-7357406546199422532?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/7357406546199422532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/09/better-navigation-with-visual-studio.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/7357406546199422532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/7357406546199422532'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/09/better-navigation-with-visual-studio.html' title='Better Navigation with Visual Studio 2010'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-7712371247487909281</id><published>2010-09-04T00:56:00.000+08:00</published><updated>2010-09-04T00:56:00.457+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><title type='text'>Updated Project Dialog in Visual Studio 2010</title><content type='html'>Once you’re ready to start a project, you’ll find an updated New Project dialog, where I’ve delineated the most easily overlooked features. You can finally search and sort items in this dialog! The search evaluates all available projects so you’ll see C# and Visual Basic projects both displayed. If you’d like to narrow it down to a particular project type, add C# or Visual Basic as a separate word at the end of your search string. The previous word doesn’t need to be complete; for example, “cl c#” finds the C# Class Library, C# Silverlight Class Library and several other project types.&lt;br /&gt;&lt;br /&gt;You can select the target platform in the New Project dialog. If you develop Windows Presentation Foundation (WPF) or Windows Forms applications, you might be surprised to find the default target platform for Visual Studio 2010 is the Client Profile. This is a subset of the full Microsoft .NET Framework platform designed for faster and smaller installation. In most cases, this is a good choice for your application, but be prepared to change it if you’re missing aspects of the framework that you need. If you’ve seen a demo of Visual Studio 2010, you’ve probably seen zoom via the scroll wheel or control-shift-comma and period. It’s a flashy and easily misunderstood feature. Similar to Excel zoom, only the current tab zooms. The zoom doesn’t “stick.” The intention is not to change your font size overall, such as for a presentation, but to allow different views of different windows and at different times. You can zoom out to get the big picture or zoom in to see the details of your code.&lt;br /&gt;&lt;br /&gt;I frequently want to change the font size for all of my text editor windows when I move from my external monitor to laptop screen, hook up to a projector, pair with someone, or when my eyes are just having a bad day. You can map a key to increase or decrease your font size for all of your code windows using an accessibility macro. Search keyboard mappings for “fontsize,” and you should find Macros.Samples.Accessibility.DecreaseTextEditorFontSize and its parallel InCreaseTextEditorFontSize. I map these to Alt-Minus and Alt-Equals, which are easy for me to remember. You can do this in Visual Studio 2008 and Visual Studio 2010.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : Visual Studio Magazine August 2010&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-7712371247487909281?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/7712371247487909281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/09/updated-project-dialog-in-visual-studio.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/7712371247487909281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/7712371247487909281'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/09/updated-project-dialog-in-visual-studio.html' title='Updated Project Dialog in Visual Studio 2010'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-6217320125674206612</id><published>2010-09-03T00:52:00.000+08:00</published><updated>2010-09-03T00:52:00.042+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><title type='text'>Personalize Your Layout in Visual Studio 2010</title><content type='html'>Stop by the Fonts and Colors dialog, particularly if you do presentations. The default for selected text is difficult for some people to read, especially on some projectors. You can change this in any version of Visual Studio by selecting Text Editor/Selected Text and choosing black on a pale background such as yellow or a custom color. My eyes appreciate increasing the size of the small fonts used by default in tool windows and IntelliSense.&lt;br /&gt;&lt;br /&gt;The Keyboard tab allows powerful personalization of your experience. You can set keystrokes for your favorite features, remap the keystrokes that you have trouble remembering, or map keystrokes to macros for truly custom behavior. You can also use the search feature of the keyboard dialog to see if a particular command is already mapped to a standard key in your keyboard layout. The keyboard-mapping page even allows exploration of what commands are available inside Visual Studio. A major improvement in Visual Studio 2010 is that right-click context menus now display mapped keystrokes.&lt;br /&gt;&lt;br /&gt;If you’re a Visual Basic developer, consider how you want Ctl-Y to behave. The Visual Basic keyboard mapping retains the historic Cut Line behavior. However, programs from Office to Finale Notepad use Ctl-Y as the shortcut for Redo. With such a drastic difference in meaning, you might want to remap this key.&lt;br /&gt;&lt;br /&gt;Other helpful settings in Visual Studio 2010 and Visual Studio 2008 include line numbers, save a new project when it’s created, open .XAML files in XAML View to avoid the designer delay, redirect debugger output to the Immediate window, or quiet the warning when files are modified outside the IDE by Expression Blend or external generation. Visual Basic programmers may want to select Option Strict for new projects to create a strongly typed experience by default.&lt;br /&gt;&lt;br /&gt;In Visual Studio 2010 you can insert new tabs to the right of existing tabs for more consistency with programs like Internet Explorer. If you don’t like something that’s new in 2010, you can probably turn it off. Look for a “Show All Settings” checkbox at the bottom of the Options dialog if you chose Visual Basic as your development style. You can adjust your settings with confidence because if you mess things up entirely, you can reset it all in the Import/Export settings tab. You can also export settings for specific environments like pairing.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : Visual Studio Magazine August 2010&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-6217320125674206612?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/6217320125674206612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/09/personalize-your-layout-in-visual.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/6217320125674206612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/6217320125674206612'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/09/personalize-your-layout-in-visual.html' title='Personalize Your Layout in Visual Studio 2010'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-3689572556224522574</id><published>2010-09-02T01:31:00.000+08:00</published><updated>2010-09-02T01:31:00.240+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><title type='text'>IntelliTrace Debugging in a Nutshell</title><content type='html'>IntelliTrace is a new debugging technology introduced in Visual Studio 2010 Ultimate. It’s based around low-overhead collection of debugger state at specific event points, exceptions, debugger stopping events and method enters and exits. From F5 debugging a user can move back in time to previous data collection points to examine collected data. In addition, the collected IntelliTrace file can be shared and the debugging session replayed on different machines.&lt;br /&gt;&lt;br /&gt;When applications act up, you can break debugging and view the IntelliTrace events window. You’ll often see exceptions being thrown and caught that point to a possible issue or internal Microsoft .NET Framework calls that help convey what various frameworks are doing below the covers.&lt;br /&gt;&lt;br /&gt;In the IntelliTrace options menu, a wide variety of IntelliTrace events can be configured for collection. These events were selected to cover a broad range of application types such as Windows Forms, ASP.NET and ADO.NET. A set of useful parameters has been selected for data collection at each event. With its ability to integrate with Microsoft Test Manager and save and debug from iTrace files, IntelliTrace can help close the “no repro” gap between developers and testers. A bug with an iTrace file attached is far more actionable for a developer. By integrating IntelliTrace into your testing workflows, you’ll improve life for both developers and testers.&lt;br /&gt;&lt;br /&gt;By turning on the IntelliTrace calls information mode, data on method parameters and return values will be collected at all function enters and exits. This mode also provides several navigation features, such as searching for IntelliTrace results from source files and backward stepping to move between data collection points.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : Visual Studio Magazine August 2010&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-3689572556224522574?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/3689572556224522574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/09/intellitrace-debugging-in-nutshell.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/3689572556224522574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/3689572556224522574'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/09/intellitrace-debugging-in-nutshell.html' title='IntelliTrace Debugging in a Nutshell'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-2987911945238148748</id><published>2010-09-01T01:28:00.000+08:00</published><updated>2010-09-01T01:28:00.529+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB .Net sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework 4.0'/><title type='text'>Controlling Parallelization</title><content type='html'>This article assumes that Parallel LINQ (PLINQ) will always do the right thing: choosing whether or not to run in parallel, for instance, and deciding how to distribute the components of a query over multiple threads. However, you can take control of PLINQ to force it to bend to your will by using the With* extensions.&lt;br /&gt;&lt;br /&gt;If, when using the debugging tools described in this article, you notice that PLINQ is not processing a query in parallel, you can force it to do so by passing the ParallelExecutionMode. ForceParallelism value to the WithExecutionMode method:&lt;br /&gt;&lt;pre class="brush:vbnet"&gt;&lt;br /&gt;ords = From o In le.Orders.AsParallel.&lt;br /&gt; WithExecutionMode(ParallelExecutionMode.ForceParallelism)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If you want to specify the number of threads to use (for instance, to try to ensure that one or more cores are left free) you can use the WithDegreeOfParallelism method. This example limits, or forces, the number of threads to three:&lt;br /&gt;&lt;pre class="brush:vbnet"&gt;&lt;br /&gt;ords = From o In le.Orders.AsParallel.&lt;br /&gt; WithDegreeOfParallelism(3)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;You can also terminate processing by using cancellation. You first create a CancellationTokenSource object and pass it to the WithCancellation extension:&lt;br /&gt;&lt;pre class="brush:vbnet"&gt;&lt;br /&gt;Dim ctx As New System.Threading.CancellationTokenSource&lt;br /&gt;ords = From o In le.Orders.AsParallel.&lt;br /&gt; WithCancellation(ctx.Token)&lt;br /&gt; Where o.RequiredDate &gt; Now&lt;br /&gt; Select o&lt;br /&gt;&lt;br /&gt;For Each ord As Order In ords&lt;br /&gt; totFreight += ord.Freight&lt;br /&gt; If totFreight &gt; FreightChargeLimit Then&lt;br /&gt;  ctx.Cancel()&lt;br /&gt; End If&lt;br /&gt;Next&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If you’re processing the results of a PLINQ query in a For...Each loop, exiting the loop automatically invokes cancellation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-2987911945238148748?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/2987911945238148748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/09/controlling-parallelization.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/2987911945238148748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/2987911945238148748'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/09/controlling-parallelization.html' title='Controlling Parallelization'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-5107885760291971706</id><published>2010-08-31T01:43:00.000+08:00</published><updated>2010-08-31T01:43:00.888+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DevExpress'/><category scheme='http://www.blogger.com/atom/ns#' term='XtraVerticalGrid'/><title type='text'>XtraVerticalGrid Main Features</title><content type='html'>With the release of the XtraVerticalGrid Suite, Developer Express introduces an entirely new way to develop elegant and highly functional user interfaces for your Windows Forms applications. Fully optimized for the utmost flexibility, the XtraVerticalGrid Suite will help you build stunning data entry forms with complete control over the information displayed on-screen.&lt;br /&gt;&lt;br /&gt;The Suite comes with two controls that generally can be referred to as vertical grids, though their goals are different. The fist - the VerticalGridControl is a data-aware control, which provides an elegant solution to represent data source records as columns. The second control - PropertyGridControl - provides advanced capabilities to display settings of any object at runtime. The solutions implemented in the Suite will help you radically improve the UI of your applications. The control's layout, appearance and behavior settings can be flexibly customized depending upon your needs.&lt;br /&gt;&lt;br /&gt;The feature list below offers you a glimpse into the XtraVerticalGrid Suite. The vertical grid controls included in the Suite have many features in common. Any features that are specific to a control are listed in the separate subsections below.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;VerticalGridControl Features&lt;br /&gt;• Full ADO+ Support - The VerticalGridControl takes full advantage of all the capabilities built into ADO.NET. With this data access architecture and the separation of internal data modules from data presentation, the control does not use any extra buffers in any of its data loading modes.&lt;br /&gt;&lt;br /&gt;• Support for Data Lists - The VerticalGridControl can work with any source which supports the IList, ITypedList or IBindingList interface plus all the inherited interfaces.&lt;br /&gt;&lt;br /&gt;• Multiple Layout Styles - These allow you to specify how bound data is represented within the control. You can choose between displaying a single record at a time, multiple records at a time, or a single record using multi-column format.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PropertyGridControl Features&lt;br /&gt;• Binding to Any Object - After the object has been bound, the PropertyGridControl automatically retrieves its public properties and creates rows for all of them. You can then remove particular rows to hide specific fields.&lt;br /&gt;&lt;br /&gt;• Support for Categories - Bound object properties can be grouped into categories. Nested categories are also supported.&lt;br /&gt;&lt;br /&gt;• Specifying Default Editors to Edit Fields of Particular Types - The control enables you to specify in-place editors to represent and edit values of particular types. For instance, you can specify that the Boolean values will be represented using the CheckEdit control, instead of the standard ComboBox control with the traditional True and False items.&lt;br /&gt;&lt;br /&gt;• Assigning Editors to Individual Rows - For any row you can override the default editor by assigning a specific in-place editor from the XtraEditors library.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Common Layout and Customization Features&lt;br /&gt;• Runtime Layout Customization - End-users can customize the vertical grids at runtime in any way they want. They can hide/restore rows and create new data categories using the Customization Form, rearrange rows using drag-and-drop and resize rows&lt;br /&gt;&lt;br /&gt;• Save And Load Layouts - This feature allows you to save the control's current layout between application runs, hence save the changes in the layout made by end-users.&lt;br /&gt;&lt;br /&gt;• MultipleEditor Rows - A row of this type permits you to display multiple editors in a line.&lt;br /&gt;&lt;br /&gt;• Nested Rows - The vertical grids support nested rows. Each row can have child rows, which can also have children, etc.&lt;br /&gt;&lt;br /&gt;• Full Drag and Drop Support - The vertical grids support automatic internal drag-and-drop of rows and let you control drag-and-drop via events. You can also implement OLE drag-and-drop to send data from a grid to other controls and vice versa.&lt;br /&gt;&lt;br /&gt;• Localization of Interface Elements - Like other Developer Express Windows Forms, the vertical grids use the Localization mechanism which allows you to localize interface elements into your language.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Common In-place Editing Features&lt;br /&gt;• Over 20 Data Editors, which can be used standalone or in-place within the vertical grids.&lt;br /&gt;&lt;br /&gt;• Editor Repository - You can setup a single in-place editor, for instance a pick image edit as an editor for a payment type field, and use it for as many vertical grids as you wish. When you use the repository and want to add a different type of credit card payment, you only need to change one in-place editor. See the EditorContainer.ExternalRepository property.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Common Appearance Features&lt;br /&gt;• Various Paint Styles (Office2003, Flat, WindowsXP, Style3D, etc).&lt;br /&gt;&lt;br /&gt;• Appearances - A powerful mechanism to control the entire look and feel of the Developer Express Windows Forms controls. You can specify the appearance of almost any visual element and even apply it conditionally via an event.&lt;br /&gt;&lt;br /&gt;• Skins Support - Skins will bring a striking look and feel to your applications, far beyond the normal painting standards.&lt;br /&gt;&lt;br /&gt;• Extended Gradient and AlphaBlending Support - You can apply gradient and alpha blending to any grid element at design time or runtime. The XtraVerticalGridBlending component help you customize alpha channels for various visual elements of the controls.&lt;br /&gt;&lt;br /&gt;• Full Custom Draw Support - allows you to manually paint almost any element of the vertical grids.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Common Design-Time Features&lt;br /&gt;• Advanced Design-Time Support - The XtraVerticalGrid Suite ships with an easy-to-use design time editor that allows you to control virtually every aspect of a vertical grid without having to write a single line of code. Instead of writing code to manage the appearance, you can concentrate on writing code to handle the really "interesting" tasks.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : 2000-2010 Developer Express Inc. All rights reserved Documentation&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-5107885760291971706?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/5107885760291971706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/xtraverticalgrid-main-features.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/5107885760291971706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/5107885760291971706'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/xtraverticalgrid-main-features.html' title='XtraVerticalGrid Main Features'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-2120011545674124211</id><published>2010-08-30T01:40:00.000+08:00</published><updated>2010-08-30T01:40:00.356+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DevExpress'/><category scheme='http://www.blogger.com/atom/ns#' term='XtraTreeList'/><title type='text'>XtraTreeList Main Features</title><content type='html'>The XtraTreeList Suite is the first comprehensive TreeList control for Visual Studio.NET. It was built from the ground up using C# and is optimized to take full advantage of the .NET Framework. The XtraTreeList is a multi-purpose data visualization system that can display information as a TREE, a GRID, or a combination of both - in either data-bound or unbound mode. This unique synergy between a traditional grid and a traditional treeview allows you to create cutting-edge and visually appealing application interfaces for your end-users. The XtraTreeList places you in control of the development process and ensures that you can create function rich applications without having to write a single line of code.&lt;br /&gt;&lt;br /&gt;The XtraTreeList fully exploits ADO.NET technologies. Its data source can use any class that implements an IList interface, and just like the XtraGrid, the XtraTreeList does NOT cache any data and as result has a small memory footprint and performs data operations as fast as your data can be obtained. In addition, the XtraTreeList fully supports our XtraEditors Library to provide you with a huge collection of individual editors - from drop down calendars to combo boxes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Below is a list of the main features and benefits available to you when using the XtraTreeList control.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Data Specifics&lt;br /&gt;• Support for Hierarchical Data Relationships - With the XtraTreeList, you can represent any self referenced data structure without hassle... In bound or un-bound mode. Please refer to the Tree Generation Algorithm in the XtraTreeList topic for details.&lt;br /&gt;&lt;br /&gt;• Full ADO+ Support - The XtraTreeList takes full advantage of ADO+. By using this data access architecture and separation of internal data modules from data presentation, the XtraTreeList does not use any extra buffers, thus greatly improving performance and reducing memory use.&lt;br /&gt;&lt;br /&gt;• Advanced Unbound Mode Support - The XtraTreeList works with any source which supports an IList or ITypedList interface, along with all inherited interfaces. Please see the Unbound Mode topic for more information.&lt;br /&gt;&lt;br /&gt;• Export Data to and Import from XML - See the Export and Import Data methods.&lt;br /&gt;&lt;br /&gt;• Dynamic Loading - Allows you to load only root nodes (rows) on start-up. Child nodes are loaded when their parents are expanded. Please see the Dynamic Loading in Unbound Mode topic for details on how this can be implemented.&lt;br /&gt;&lt;br /&gt;• Binding to a Business Object - With this feature, you are able to bind the TreeList control to any object that represents a tree structure. You can do this by implementing the DevExpress.XtraTreeList.IVirtualTreeListData interface for the business object or via the TreeList's TreeList.VirtualTreeGetChildNodes and TreeList.VirtualTreeGetCellValue events. Please see the Binding to a Business Object topic for details.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Data Representation Specifics&lt;br /&gt;• Automatic Sorting against Multiple Columns - With the XtraTreeList, you can sort against an unlimited number of columns, without writing a single line of code. Please refer to the Sorting topic for more information regarding the sorting algorithm implemented in the control.&lt;br /&gt;&lt;br /&gt;• Filtering Nodes - This feature allows you to flexibly control the visibility of nodes. You can filter nodes based upon the contents of a column. It's also possible to handle the TreeList.FilterNode event to dynamically specify which nodes need to be currently displayed or hidden. Or you can change a node's visibility directly via the node's TreeListNode.Visible property.&lt;br /&gt;&lt;br /&gt;• Custom Sorting - Allows you to implement a custom sorting algorithm by handling the TreeList.CompareNodeValues event.&lt;br /&gt;&lt;br /&gt;• Custom Node Height and Runtime Node Resizing - You can implement a custom algorithm that sets different heights for different nodes or you can allow end-users to freely change the heights of nodes at runtime. See the TreeList.CalcNodeHeight and TreeListOptionsBehavior.ResizeNodes topics.&lt;br /&gt;&lt;br /&gt;• Incremental Searching - This allows end-users to quickly locate the required information within the XtraTreeList by typing a search string within a non-editable column. See the TreeListOptionsBehavior.AllowIncrementalSearch and TreeListColumn.AllowIncrementalSearch properties.&lt;br /&gt;&lt;br /&gt;• Auto Preview Pane - Permits you to display long text fields within the TreeList. Jump to the Preview Sections topic to get more information on this feature.&lt;br /&gt;&lt;br /&gt;• Runtime Column Customization - The XtraTreeList provides a quick method of customizing the control's layout at runtime. End-users can hide specific columns and then restore them using drag and drop.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In-place Editing&lt;br /&gt;• XtraEditors Library Integration - No more hassle or limits when it comes to using editors within a treeview. The XtraTreeList works in concert with our XtraEditors Library allowing you to use all our field editors (from date controls to combo boxes) directly within your TreeList. Please see the Inplace Editors topic for more details.&lt;br /&gt;&lt;br /&gt;• Editor Repository - You can setup a single in-place editor, for instance a pick image edit as an editor for a payment type field, and use it for as many TreeLists or other Developer Express controls as you wish. When you use the repository and have to add a different credit card payment type, you only need to change it in one in-place editor.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Painting Specifics&lt;br /&gt;• Support for Multiple Painting Schemes - WindowsXP, Flat, Style3D, Office2003, etc.&lt;br /&gt;&lt;br /&gt;• Skins Support - Skins will bring a striking look and feel to your applications, far beyond the normal painting standards.&lt;br /&gt;&lt;br /&gt;• Appearances - A powerful mechanism to control the entire look and feel of the TreeList, allowing you to customize appearance settings of almost any visual element. See the Appearances topic for more information.&lt;br /&gt;&lt;br /&gt;• Style Conditions - You can apply appearances to cells conditionally to reflect certain states such as errors.&lt;br /&gt;&lt;br /&gt;• Alpha Blending and Background Images - You can greatly improve the look &amp;amp; feel of your TreeList control by assigning a background image to it and using transparent element colors. Please see the Alpha Blending topic for details.&lt;br /&gt;&lt;br /&gt;• Custom Painting - The XtraTreeList provides a set of events that enable you to perform custom painting of control elements. Using this feature, you have no limits in adjusting the control's look &amp;amp; feel. Please refer to the Custom Draw topic to see the ways in which this feature can be implemented.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Design-Time&lt;br /&gt;• Advanced XtraTreeList Designer - The XtraTreeList control's designer provides access to the control's settings by categorizing them into separate pages. Thus you can quickly find appropriate options that control different aspects of the XtraTreeList. Jump to The XtraTreeList Designer topic to review the designer pages.&lt;br /&gt;&lt;br /&gt;• Nodes Editor - This is an easy-to-use editor that allows you to add nodes at design time (used in unbound mode).&lt;br /&gt;&lt;br /&gt;• Design-time column selection - Not only can you select columns in the Properties grid but also select them directly in the XtraTreeList at design time.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Miscellaneous&lt;br /&gt;• Context Menus - Context menus provide end-users with quick access to the most common customization tasks: apply footer and row summaries, invoke column customization, apply best fit to columns and more. It's also possible to extend the built-in menus by implementing custom features via an event. Refer to the Context Menus topic for details.&lt;br /&gt;&lt;br /&gt;• Column Header and Cell Hint Support.&lt;br /&gt;&lt;br /&gt;• ErrorInfo Support - The XtraTreeList permits you to mark specific cells or entire nodes with error icons and so indicate the cells that contain invalid data. See the TreeList.SetColumnError topic for more information.&lt;br /&gt;&lt;br /&gt;• Save and Load Layouts - By default, the XtraTreeList control enables end-users to customize the control's layout at runtime. To save the changes made into the layout by end-users between application runs you can use the TreeList's SaveLayoutTo... and RestoreLayoutFrom... methods. See the Saving and Restoring Layouts topic for more information.&lt;br /&gt;&lt;br /&gt;• Printing (via the XtraPrinting Library).&lt;br /&gt;&lt;br /&gt;• Localization of Every Interface Element. See the Localization topic.&lt;br /&gt;&lt;br /&gt;• Export to XML, HTML, PDF, RTF, TXT and XLS - See the ExportTo... methods (for instance, TreeList.ExportToHtml).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : 2000-2010 Developer Express Inc. All rights reserved Documentation&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-2120011545674124211?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/2120011545674124211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/xtratreelist-main-features.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/2120011545674124211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/2120011545674124211'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/xtratreelist-main-features.html' title='XtraTreeList Main Features'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-857034056815686074</id><published>2010-08-29T01:08:00.000+08:00</published><updated>2010-08-29T01:08:00.989+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework 4.0'/><title type='text'>Parallel Processing Won’t Make Your Apps Faster</title><content type='html'>One of the common misconceptions around multithreaded applications is that adding more threads to your application makes it run faster. Launching another thread doesn’t cause Windows to give your application more processing cycles—it just divides those cycles over more threads. In fact, on a single-processor computer, multithreading makes your application run slower by adding additional thread management tasks to your application’s overhead.&lt;br /&gt;&lt;br /&gt;What multithreading does do is make your application more responsive. Where your application might otherwise have had to wait while some blocking task completes, with multithreading you can go and do something useful on another thread while waiting for the blocking task to complete. As a result, that second thread can let your application return a result earlier than it would have if the application had to wait for the blocking task to complete. On a single-core machine, it only made sense to use multithreading if a thread that was running for a blocked task didn’t need any processing cycles. If the thread wasn’t blocked, the two threads just ended up fighting for the limited number of processing cycles allocated to your application by Windows—and throwing away some of those cycles on activities like switching threads on and off the processor.&lt;br /&gt;&lt;br /&gt;Multi-core processors change that paradigm. In a multi-core environment you can get Windows to give your application more processing cycles by transferring a thread to one of the other cores on the computer. And you don’t need to have a blocked thread to take advantage of multithreading—all threads can execute on their own core.&lt;br /&gt;&lt;br /&gt;Parallel Extensions provides the programming constructs that allow you to tell the Microsoft .NET Framework which parts of your application can be run in parallel to get those benefits. In fact, Microsoft goes one step further: It claims that Parallel Extensions even changes the paradigm on single-core machines by reducing the overhead of managing multiple threads to the point where overhead simply doesn’t matter.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : Visual Studio Magazine August 2010&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-857034056815686074?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/857034056815686074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/parallel-processing-wont-make-your-apps.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/857034056815686074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/857034056815686074'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/parallel-processing-wont-make-your-apps.html' title='Parallel Processing Won’t Make Your Apps Faster'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-8875923298737567049</id><published>2010-08-28T01:05:00.000+08:00</published><updated>2010-08-28T01:05:00.137+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB .Net sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework 4.0'/><title type='text'>Introducing PLINQ</title><content type='html'>For business applications, PLINQ will shine anytime you have a LINQ query that involves multiple subqueries. If you’re joining rows from a table on a local database with rows from a table in another remote database, PLINQ can be very useful. In those situations, LINQ must run subqueries on each data source separately and then reconcile the results. PLINQ will distribute those subqueries over multiple processors-if any are available-so that they run simultaneously.&lt;br /&gt;&lt;br /&gt;You won’t use fewer processor cycles to get your result-in fact, you’ll use more-but you’ll get your result earlier.&lt;br /&gt;&lt;br /&gt;Even on a multi-core machine, PLINQ won’t always "parallelize" a query, for two reasons. One is that your application won’t always run faster when parallelized. The second reason is that, even with another layer of abstraction managing your threads, it’s still possible to shoot yourself in the foot-or someplace higher-with parallel processing. PLINQ checks for some unsafe conditions and won’t parallelize a query if it detects those conditions.&lt;br /&gt;&lt;br /&gt;I’ll be pointing out some of the problems and conditions that PLINQ won’t detect but, in the end, it’s your responsibility to only use PLINQ where it won’t generate those untraceable bugs.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Processing PLINQ&lt;br /&gt;Invoking PLINQ is easy: just add the AsParallel extension to your data source. This is an example from an application that joins a local version of the Northwind database to the remote version to get Orders based on customer information:&lt;br /&gt;&lt;pre class="brush:vbnet"&gt;&lt;br /&gt;Dim ords As System.Linq.ParallelQuery(Of ParallelExtensions.Order)&lt;br /&gt;&lt;br /&gt;ords = From c In le.Customers.AsParallel Join o In re.Orders.AsParallel&lt;br /&gt; On c.CustomerID Equals o.CustomerID&lt;br /&gt;Where c.CustomerID = "ALFKI"&lt;br /&gt;&lt;br /&gt;Select o&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Because both data sources are marked AsParallel (and, in Join, if one data source is AsParallel, both must be) PLINQ will be used.&lt;br /&gt;&lt;br /&gt;As with ordinary LINQ queries, PLINQ queries use deferred processing: Data isn’t retrieved until you actually handle it. That means while the LINQ query has been declared as parallel, parallel processing doesn’t occur until you process the results. So parallel execution doesn’t actually occur until the following block of code, which processes the due date on each of the retrieved Order objects:&lt;br /&gt;&lt;pre class="brush:vbnet"&gt;&lt;br /&gt;For Each ord As Order In ords&lt;br /&gt; ord.RequiredDate.Value.AddDays(2)&lt;br /&gt;Next&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Under the hood, PLINQ will use one thread to execute the code in the For...Each loop, while other threads may be used to run the components of the query on as many processors as are available, up to a maximum of 64.&lt;br /&gt;&lt;br /&gt;If the processing that I want to perform on each Order doesn’t share a state with the processing on other Orders, I can further improve responsiveness by using a ForAll loop. The ForAll is a method available from collections produced by a PLINQ query that accepts a lambda expression. Unlike a For...Each loop that executes on the application’s main thread, the operation passed to the ForAll method executes on the individual query threads generated by the PLINQ query:&lt;br /&gt;&lt;pre class="brush:vbnet"&gt;&lt;br /&gt;ords.ForAll(Sub(ord)&lt;br /&gt; ord.RequiredDate.Value.AddDays(2)&lt;br /&gt;End Sub)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Unlike my For...Each loop, which executes sequentially on a thread of its own, the code in my ForAll processing executes in parallel on the threads that are retrieving the Orders.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Managing Order&lt;br /&gt;As with SQL-though everyone forgets it-order is not guaranteed in PLINQ. The order that results are returned in by PLINQ subqueries will depend on the unpredictable response time of the various threads. This query, for instance, is intended to retrieve the next five Orders to be shipped:&lt;br /&gt;&lt;pre class="brush:vbnet"&gt;&lt;br /&gt;ords = From o In re.Orders.AsParallel&lt;br /&gt; Where o.RequiredDate &gt; Now&lt;br /&gt; Select o&lt;br /&gt; Take (5)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If I don’t guarantee order, I’m going to get a random collection of Orders with required dates later than the current time-I may or may not get the first five Orders. To ensure that I’ll get the first five for both SQL and PLINQ, I need to add an Order By clause to the query that sorts the dates in ascending order. And, yes, that will throw away some of the benefits of PLINQ. Because results returned from multiple threads will turn up unexpectedly, PLINQ doesn’t really understand the concept of "previous item" and " next item." If, in your loop, you use the values of one item to process the next item in the loop, you may be introducing an error into your processing. To have items processed in the order that they appeared in the original data source, you’ll need to add the AsOrdered extension to the query.&lt;br /&gt;&lt;br /&gt;For instance, if I wanted to "batch" my Orders into groups that were below a certain freight charge, I might write a loop like this:&lt;br /&gt;&lt;pre class="brush:vbnet"&gt;&lt;br /&gt;For Each ord As Order In ords&lt;br /&gt; totFreight += ord.Freight&lt;br /&gt; If totFreight &gt; FreightChargeLimit Then&lt;br /&gt; Exit For&lt;br /&gt; End If&lt;br /&gt; shipOrders.Add(ord)&lt;br /&gt;Next&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Because of the unpredictable order that items will be returned from parallel processes, I can’t guarantee that I’m putting anything but random Orders in each batch. To guarantee that items are processed in the order they appeared in my original data source, I have to add the AsOrdered extension to my data source:&lt;br /&gt;&lt;pre class="brush:vbnet"&gt;&lt;br /&gt;ords = From o In re.Orders.AsParallel.AsOrdered&lt;br /&gt; Where o.RequiredDate &gt; Now&lt;br /&gt; Select o&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : Visual Studio Magazine August 2010&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-8875923298737567049?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/8875923298737567049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/introducing-plinq.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/8875923298737567049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/8875923298737567049'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/introducing-plinq.html' title='Introducing PLINQ'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-4713530781557361425</id><published>2010-08-27T01:49:00.000+08:00</published><updated>2010-08-27T01:49:00.853+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework 4.0'/><title type='text'>Multi-Core Processors with .NET 4 and Visual Studio 2010</title><content type='html'>If you want to take advantage of the power of multi-core machines, you need to start creating applications with parallel processing using PLINQ, the Task Parallel Library and the new features of Visual Studio 2010.&lt;br /&gt;&lt;br /&gt;The old rule was, if you wanted to create a program with bugs that you could never hope to track down, you wrote it as a multithreaded application. All that has changed, thanks to the introduction of Microsoft Parallel Extensions for .NET, which provides a layer of abstraction on top of the Microsoft .NET Framework threading model.&lt;br /&gt;&lt;br /&gt;Parallel Extensions follows the model Microsoft established with the transaction manager in COM applications and with the Entity Framework and LINQ in the area of data access. Parallel Extensions attempts to bring a sophisticated technology to the masses by building high-level support for a complex process into the .NET Framework. With multi-core processors becoming the norm, developers crave the ability to distribute their applications over all the cores on a computer.&lt;br /&gt;&lt;br /&gt;You can access the power of Parallel Extensions either through Parallel LINQ (PLINQ) or through the Task Parallel Library (TPL). Both allow you to write one set of code for single- and multi-core computers and count on the .NET Framework to take maximum advantage of whatever platform your code eventually executes on, while protecting you from the usual pitfalls of creating multithreaded applications.&lt;br /&gt;&lt;br /&gt;PLINQ extends LINQ queries to decompose a single query into multiple subqueries that are run in parallel rather than sequentially. TPL allows you to create loops with iterations running in parallel rather than one after another. While the declarative syntax of PLINQ makes it easier to create parallel processes, TPL-oriented operations will be, in general, more lightweight than PLINQ queries. In many ways, though, choosing between TPL and PLINQ is a lifestyle choice. If you think in terms of parallel loops rather than parallel queries, it can be easier for you to design a TPL solution than a PLINQ solution.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : Visual Studio Magazine August 2010&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-4713530781557361425?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/4713530781557361425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/multi-core-processors-with-net-4-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/4713530781557361425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/4713530781557361425'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/multi-core-processors-with-net-4-and.html' title='Multi-Core Processors with .NET 4 and Visual Studio 2010'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-4149563487911131946</id><published>2010-08-26T01:43:00.000+08:00</published><updated>2010-08-26T01:43:00.314+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Expression Studio 4'/><title type='text'>Evolving User Experience with Microsoft Expression Studio 4</title><content type='html'>People demand the best user experience with the technology they use every day—from PCs and TVs to mobile devices. The need for great applications and experiences has changed dramatically during the past few years. The bar of what constitutes a “great user experience” has been raised across a variety of devices, including mobile phones, Web browsers, gaming consoles and even kiosks. Regardless of the way content is being interacted with, one thing remains constant: The user experience needs to be relevant and engaging to meet customer expectations. Having a functional application simply isn’t enough anymore.&lt;br /&gt;&lt;br /&gt;In June, Microsoft released Microsoft Expression Studio 4 with a list of new features to help developers and designers tackle this problem head on and eliminate ugly and unfriendly applications. Developers have often assumed that Expression is for designers only. That’s not the case. The truth is, Expression—and in particular Expression Blend—is a great tool for designers and developers who want to deliver great applications and user experiences.&lt;br /&gt;&lt;br /&gt;This is particularly important today when considering how the traditional roles of designer and developer are quickly breaking down and becoming increasingly blurred. Expression Blend provides a toolset that effectively blends the design and development disciplines into one seamless workflow. It distinguishes itself by helping designers and developers collaborate and create great applications using their existing skills and current design tools.&lt;br /&gt;&lt;br /&gt;One might ask, “How does Expression Blend work with a developer’s existing Microsoft Visual Studio toolset?” It does so by providing the tools that enable developers to evolve ideas from initial vision into a perfect solution through features such as SketchFlow (available in Expression Studio Ultimate), which conveys ideas through rapid prototyping, enabling better customer engagement, greater design flexibility and faster time to market. This is what makes Expression Blend and Visual Studio so powerful when used together: the flexibility between the two.&lt;br /&gt;&lt;br /&gt;The Visual Studio center of gravity is code, which is the lens through which developers view a project, answer questions and solve problems. Expression Blend complements Visual Studio by providing a reverse perspective. The center of gravity around the application’s user experience determines how users interact with the application versus how it’s created. The behavior feature within Expression Blend allows developers to add interactivity without code. Additional features such as the Visual State Manager, sample data, easing functions, template editing and control styling enable developers and designers to think through problems in a different way, which gives them the opportunity to rapidly explore alternate ideas and solutions for their design dilemmas.&lt;br /&gt;&lt;br /&gt;Expression Blend and Visual Studio share the same project format and do not require conversion of files; they’re like two sides of the same coin. One enables developers and designers to build robust, well-architected applications; the other delivers high-impact and effective user experiences. Developers and designers can switch environments quickly to explore and look for the best solution to a problem.&lt;br /&gt;&lt;br /&gt;Creating great applications that meet the demands and expectations of end users takes passion, skill and inspiration. It also takes tools such as Expression and Visual Studio. MSDN subscribers are eligible to download Expression Studio 4. Those who are new to Expression Blend should check out the Microsoft OnRamp training program, which simplifies the Expression Blend training process by teaching basic fundamentals. Also, check out the trial version of Expression Studio 4 at Microsoft.com/expression and get started today!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : Visual Studio Magazine August 2010&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-4149563487911131946?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/4149563487911131946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/evolving-user-experience-with-microsoft.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/4149563487911131946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/4149563487911131946'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/evolving-user-experience-with-microsoft.html' title='Evolving User Experience with Microsoft Expression Studio 4'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-3099470919440795583</id><published>2010-08-25T01:29:00.000+08:00</published><updated>2010-08-25T01:29:00.350+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010 Tools'/><title type='text'>Two Productivity Tools for Visual Studio 2010</title><content type='html'>The latest versions of CodeRush and ReSharper take advantage of the new features in Visual Studio 2010. Both tools continue to provide valuable— even essential—support for developers at a very reasonable price.&lt;br /&gt;&lt;br /&gt;Both Developer Express CodeRush and JetBrains ReSharper are add-ins that extend Visual Studio by providing a plethora of tools that allow developers to create better code faster. I reviewed the Visual Studio 2008 versions of both products in the September 2009 (“Write Better Code, Faster, with ReSharper 4.5”) and October 2009 (“Turbo Charge Visual Studio with DevExpress CodeRush”) issues. While CodeRush is intended to support both C# and Visual Basic even-handedly, ReSharper targets the C# developer, though it also provides extensive support if you’re programming in Visual Basic. Perversely, for someone who still considers himself a Visual Basic programmer—though my client base is split 50/50 between C# and Visual Basic—I preferred ReSharper in those reviews because it didn’t require me to memorize as many keystroke combinations as CodeRush to access its functionality. With the release of Visual Studio 2010, both Developer Express and JetBrains have released new versions of their products. (You can read interviews with JetBrains developers [VisualStudioMagazine.com/tooltracker0810a] and DevExpress developers [VisualStudioMagazine.com/tooltracker0810b] on the complexities of developing for Visual Studio.)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Capitalize on CodeRush&lt;br /&gt;The most obvious change in CodeRush is its use of Windows Presentation Foundation (WPF), or “WPF-ization.” The product’s developers have made a big effort to take advantage of the new Visual Studio screen display. One example: At the end of each method or property name, a small number appears that represents some measure of the method—you can choose between complexity and maintainability measures. If you haven’t upgraded to Visual Studio 2010, you can still access most of the new features of CodeRush: DevExpress developed an abstraction of the presentation layer for CodeRush that has both a Graphics Device Interface (GDI) and a WPF driver.&lt;br /&gt;&lt;br /&gt;While the code generation and refactoring often get the most attention, I think it’s the interactive code analysis that’s most useful. Here again, the CodeRush exploitation of the Visual Studio WPF interface shines. For instance, the latest version of CodeRush marks every flow break (such as exit, return and end statements) with a small arrow. Hovering your mouse over the arrow flashes the line where control will be transferred to when the statement executes. If control transfers out of the method, a small animation flies to the method’s end. These kinds of tools help the developer understand what the code will actually do without having to step through it. When making changes to code, you need to find where the code is called from. New navigation features in CodeRush enable you to skip through your code to all the calls to any method just by selecting an option from a context menu. Tab and Shift-Tab allow you to work through all the overloads for a method. When you invoke any of these navigation options, CodeRush pops up a tab showing all of the navigation options available to you, reducing the need to remember keystrokes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Reach Higher with ReSharper&lt;br /&gt;If CodeRush is expanding its feature set within its existing support, ReSharper is expanding its range. As an ASP.NET developer, I especially like the new ReSharper File Structure window, which goes beyond the Visual Studio Document outline to support navigating through pages of complex HTML. The “Navigate to related files” menu choice lets me get to all the files related to a Web page (graphics, stylesheets, user controls, JavaScript files and so on) without scrolling up and down through the Solution Explorer window. ReSharper has also added support specifically for ASP.NET Model-View-Controller (MVC) developers.&lt;br /&gt;&lt;br /&gt;That’s not to diminish the code generation and refactoring abilities that come with ReSharper. If you’ve been putting off becoming an expert in LINQ, for instance, the ReSharper capacity to automatically refactor C# foreach loops into LINQ queries is a good way to get started. ReSharper, like CodeRush, has always offered a wealth of recommendations about ways you can improve your code. The latest version lets you define your own rules to recognize—and even implement— project-specific best practices. In addition to getting this advice as you type, you can also run inspections of whole projects.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Get Better Code&lt;br /&gt;Both packages offer separate Options dialogs to allow you to enable, disable and customize features. When you install CodeRush, you get an option to work in a “newbie” mode, which provides more prompting, or in an “expert” mode. ReSharper offers, on installation, three options for your keyboard: one for experienced Visual Studio developers, one for Java developers and one that does no mapping to your keyboard. Both DevExpress and JetBrains have tuned their add-ins to reduce the demands on your computer, but all of this additional functionality comes at a price: You may find yourself having to turn off features that you don’t need to improve responsiveness.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CodeRush for Visual Studio 2010 10.1 and Refactor! Pro for Visual Studio 2010 10.1&lt;br /&gt;Developer Express Inc.&lt;br /&gt;Web: Devexpress.com&lt;br /&gt;Phone: 818-844-3383&lt;br /&gt;Price: $249.99&lt;br /&gt;Quick Facts: Productivity feature add-ins for Visual Studio with extensive refactoring support&lt;br /&gt;Pros: Extends powerful refactoring tools with additional support for developers working with complex applications and on-the-fly code analysis&lt;br /&gt;Cons: Taking advantage of all the features requires a powerful CPU; many developers will need to pick the options they want and turn off others&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ReSharper 5.0&lt;br /&gt;JetBrains&lt;br /&gt;Web: Jetbrains.com&lt;br /&gt;Phone: 888-672-1076&lt;br /&gt;Price: $199 Personal license for Full Edition; Organization and academic licenses available Quick Facts: A productivity feature add-in for Visual Studio targeted at C# developers&lt;br /&gt;Pros: Extends the power of the original tool into new environments (especially ASP.NET) and up the value chain into project maintenance&lt;br /&gt;Cons: Taking advantage of all the features requires a powerful CPU; many developers will need to pick the options they want and turn off others&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : Visual Studio Magazine August 2010&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-3099470919440795583?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/3099470919440795583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/two-productivity-tools-for-visual.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/3099470919440795583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/3099470919440795583'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/two-productivity-tools-for-visual.html' title='Two Productivity Tools for Visual Studio 2010'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-4463667410134999294</id><published>2010-08-24T01:09:00.000+08:00</published><updated>2010-08-24T01:09:00.205+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework 4.0'/><title type='text'>.NET 4.0 New Types</title><content type='html'>Now that the lowdown changes are out of the way, lets look at some of the new types in .NET 4.0 and modifications to existing classes and methods.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;BigInteger&lt;br /&gt;Working with really big numbers in .NET can get a bit strange. For example, try the following example (without advanced options such as overflow checking) and you might be surprised at the result you get:&lt;br /&gt;&amp;lt;pre class="brush:csharp"&amp;gt;&lt;br /&gt;int a = 2000000000;&lt;br /&gt;Console.WriteLine(a * 2);&lt;br /&gt;Console.ReadKey();&lt;br /&gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;Surely the result is 4000000000? Running this code will give you the following answer:&lt;br /&gt;-294967296&lt;br /&gt;&lt;br /&gt;This issue occurs due to how this type of integer is represented in binary and the overflow that occurs. After the multiplication, the number gets bigger than this type can handle, so it actually becomes negative.&lt;br /&gt;&lt;br /&gt;OK, so not many applications will need to hold values of this magnitude. But for those that do, .NET 4.0 introduces the BigInteger class (in the System.Numerics namespace) that can hold really big numbers.&lt;br /&gt;&lt;br /&gt;BigInteger is an immutable type with a default value of 0 with no upper or lower bounds. This upper value is subject to available memory, of course, and if exceeded, an out-of-memory exception will be thrown. But seriously, what are you holding? Even the U.S. national debit isn’t that big.&lt;br /&gt;&lt;br /&gt;BigIntegers can be initialized in two main ways:&lt;br /&gt;&amp;lt;pre class="brush:csharp"&amp;gt;&lt;br /&gt;BigInteger bigIntFromDouble = new BigInteger(4564564564542332);&lt;br /&gt;BigInteger assignedFromDouble = (BigInteger) 4564564564542332;&lt;br /&gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;BigInteger has a number of useful (and self-explanatory) methods not found in other numeric types:&lt;br /&gt;• IsEven()&lt;br /&gt;• IsOne()&lt;br /&gt;• IsPowerOfTwo()&lt;br /&gt;• IsZero()&lt;br /&gt;• IsSign()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Lazy&amp;lt;T&amp;gt;&lt;br /&gt;Lazy&amp;lt;T&amp;gt; allows you to easily add lazy initialization functionality to your variables. Lazy initialization saves allocating memory until the object is actually used. So if you never end up accessing your object, you have avoided using the resources to allocate it. Additionally, you have spread out resource allocation through your application’s life cycle, which is important for the responsiveness of UI-based applications. Lazy&amp;lt;T&amp;gt; couldn’t be easier to use:&lt;br /&gt;&amp;lt;pre class="brush:csharp"&amp;gt;&lt;br /&gt;Lazy&amp;lt;BigExpensiveObject&amp;gt; instance;&lt;br /&gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;&lt;br /&gt;Lazy has implications for multithreaded scenarios. Some of the constructors for the Lazy type have an isThreadSafe parameter (see MSDN for more details of this: http://msdn.microsoft.com/en-us/library/dd997286%28VS.100%29.aspx).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Memory Mapping Files&lt;br /&gt;A memory mapped file maps the contents of a file into memory, allowing you to work with it in a very efficient manner. Memory mapped files can also be used for interprocess communication, allowing you to share information between two applications:&lt;br /&gt;&lt;br /&gt;Let’s see how to use memory mapped files inter process communication:&lt;br /&gt;&lt;br /&gt;1. Create a new console application called Chapter4.MemoryMappedCreate.&lt;br /&gt;&lt;br /&gt;2. Add the following using statements:&lt;br /&gt;&amp;lt;pre class="brush:csharp"&amp;gt;&lt;br /&gt;using System.IO;&lt;br /&gt;using System.IO.MemoryMappedFiles;&lt;br /&gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;3. Enter the following code in the Main() method:&lt;br /&gt;&amp;lt;pre class="brush:csharp"&amp;gt;&lt;br /&gt;//Create a memory mapped file&lt;br /&gt;using (MemoryMappedFile MemoryMappedFile = MemoryMappedFile.CreateNew("test", 100))&lt;br /&gt;{&lt;br /&gt; MemoryMappedViewStream stream = MemoryMappedFile.CreateViewStream();&lt;br /&gt; using (BinaryWriter writer = new BinaryWriter(stream))&lt;br /&gt; {&lt;br /&gt;  er.Write("hello memory mapped file!");&lt;br /&gt; }&lt;br /&gt; Console.WriteLine("Press any key to close mapped file");&lt;br /&gt; Console.ReadKey();&lt;br /&gt;}&lt;br /&gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;4. Add another Console application called Chapter4.MemoryMappedRead to the solution.&lt;br /&gt;&lt;br /&gt;5. Add the following using statements:&lt;br /&gt;&amp;lt;pre class="brush:csharp"&amp;gt;&lt;br /&gt;using System.IO;&lt;br /&gt;using System.IO.MemoryMappedFiles;&lt;br /&gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;6. Enter the following code in the Main() method:&lt;br /&gt;&amp;lt;pre class="brush:csharp"&amp;gt;&lt;br /&gt;//Read a memory mapped file&lt;br /&gt;using (MemoryMappedFile MemoryMappedFile = MemoryMappedFile.OpenExisting("test"))&lt;br /&gt;{&lt;br /&gt; using (MemoryMappedViewStream Stream = MemoryMappedFile.CreateViewStream())&lt;br /&gt; {&lt;br /&gt;  BinaryReader reader = new BinaryReader(Stream);&lt;br /&gt;  Console.WriteLine(reader.ReadString());&lt;br /&gt; }&lt;br /&gt; Console.ReadKey();&lt;br /&gt;}&lt;br /&gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;7. You have to run both projects to demonstrate memory mapped files. First, right-click the project.MemoryMappedCreate and select Debug -&amp;gt; Start new instance. A new memory mapped file will be created and a string written to it.&lt;br /&gt;&lt;br /&gt;8. Right-click the project Chapter4.MemoryMappedRead and select Debug -&amp;gt; Start new instance. You should see the string hello memory mapped file! read and printed from the other project.&lt;br /&gt;&lt;br /&gt;The other main use of memory mapped files is for working with very large files. For an example, please refer to this MSDN article: http://msdn.microsoft.com/enus/library/system.io.memorymappedfiles.memorymappedfile(VS.100).aspx.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SortedSet&amp;lt;T&amp;gt;&lt;br /&gt;Sorted set is a new type of collection in the System.Collections.Generic namespace that maintains the order of items as they are added. If a duplicate item is added to a sorted set, it will be ignored, and a value of false is returned from the SortedSet’s Add() method. The following example demonstrates creating a sorted list of integers with a couple of duplicates in:&lt;br /&gt;&amp;lt;pre class="brush:csharp"&amp;gt;&lt;br /&gt;SortedSet&amp;lt;int&amp;gt; MySortedSet = new SortedSet&amp;lt;int&amp;gt; { 8, 2, 1, 5, 10, 5, 10, 8 };&lt;br /&gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;&lt;br /&gt;ISet&amp;lt;T&amp;gt; Interface&lt;br /&gt;.NET 4.0 introduces ISet&amp;lt;T&amp;gt;, a new interface utilized by SortedSet and HashSet and surprisingly enough for implementing set classes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tuple&lt;br /&gt;A tuple is a typed collection of fixed size. Tuples were introduced for interoperability with F# and IronPython, but can also make your code more concise.&lt;br /&gt;&lt;br /&gt;Tuples are very easy to create:&lt;br /&gt;&amp;lt;pre class="brush:csharp"&amp;gt;&lt;br /&gt;Tuple&amp;lt;int, int, int, int, int&amp;gt; MultiplesOfTwo = Tuple.Create(2, 4, 6, 8, 10);&lt;br /&gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;Individual items in the tuple can then be queried with the Item property:&lt;br /&gt;&amp;lt;pre class="brush:csharp"&amp;gt;&lt;br /&gt;Console.WriteLine(MultiplesOfTwo.Item2);&lt;br /&gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;Tuples might contain up to seven elements; if you want to add more items, you have to pass in another tuple to the Rest parameter:&lt;br /&gt;&amp;lt;pre class="brush:csharp"&amp;gt;&lt;br /&gt;var multiples = new Tuple&amp;lt;int, int, int, int, int, int, int,Tuple&amp;lt;int,int,int&amp;gt;&amp;gt;(2, 4, 6, 8,&lt;br /&gt;10, 12, 14, new Tuple&amp;lt;int,int,int&amp;gt;(3,6,9));&lt;br /&gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;Items in the second tuple can be accessed by querying the Rest property:&lt;br /&gt;&amp;lt;pre class="brush:csharp"&amp;gt;&lt;br /&gt;Console.WriteLine(multiples.Rest.Item1);&lt;br /&gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;System.Numerics.Complex&lt;br /&gt;Mathematicians will be glad of the addition of the new Complex type: a structure for representing and manipulating complex numbers, meaning that they will no longer have to utilize open source libraries or projects. Complex represents both a real and imaginary number, and contains support for both rectangular and polar coordinates:&lt;br /&gt;&amp;lt;pre class="brush:csharp"&amp;gt;&lt;br /&gt;Complex c1 = new Complex(8, 2);&lt;br /&gt;Complex c2 = new Complex(8, 2);&lt;br /&gt;Complex c3 = c1 + c2;&lt;br /&gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;And I am afraid my math skills aren’t up to saying much more about this type, so let’s move on.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;System.IntPtr and System.UIntPtr&lt;br /&gt;Addition and subtraction operators are now supported for System.IntPtr and System.UIntPtr. Add()() and Subtract() methods have also been added to these types.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tail Recursion&lt;br /&gt;The CLR contains support for tail recursion, although this is only currently accessible through F#.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : Apress Introducing dot NET 4.0 with Visual Studio 2010&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-4463667410134999294?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/4463667410134999294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/net-40-new-types.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/4463667410134999294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/4463667410134999294'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/net-40-new-types.html' title='.NET 4.0 New Types'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-5771323047533990646</id><published>2010-08-23T00:50:00.000+08:00</published><updated>2010-08-23T00:50:01.025+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework 4.0'/><title type='text'>Exception Handling</title><content type='html'>Exception handling has been improved in .NET 4.0 with the introduction of the System.Runtime. ExceptionServices namespace, which contains classes for advanced exception handling.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CorruptedStateExceptions&lt;br /&gt;Many developers (OK, I might have done this, too) have written code such as the following:&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;// do something that may fail&lt;br /&gt;}&lt;br /&gt;catch(System.exception e)&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This is almost always a very naughty way to write code because all exceptions will be hidden. Hiding exceptions you don’t know about is rarely a good thing, and if you do know about them, you should inevitably be handling them in a better way. Additionally, there are some exceptions that should never be caught (even by lazy developers) such as lowdown beardy stuff such as access violations and calls to illegal instructions. These exceptions are potentially so dangerous that it’s best to just shut down the application as quick as possible before it can do any further damage.&lt;br /&gt;&lt;br /&gt;So in .NET 4.0, corrupted state exceptions will never be caught even if you specify a try a catch block. However, if you do want to enable catching of corrupted state exceptions application-wide (e.g., to route them to an error-logging class), you can add the following setting in your applications configuration file:&lt;br /&gt;&lt;br /&gt;LegacyCorruptedStateExceptionsPolicy=true&lt;br /&gt;&lt;br /&gt;This behavior can also be enabled on individual methods with the following attribute:&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;[HandleProcessCorruptedStateExceptions]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : Apress Introducing dot NET 4.0 with Visual Studio 2010&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-5771323047533990646?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/5771323047533990646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/exception-handling.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/5771323047533990646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/5771323047533990646'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/exception-handling.html' title='Exception Handling'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-7696926359948785475</id><published>2010-08-22T01:36:00.000+08:00</published><updated>2010-08-22T01:36:00.691+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework 4.0'/><title type='text'>Native Code Enhancements</title><content type='html'>I will not be covering changes to native code, so I have summarized some of the important changes here:&lt;br /&gt;&lt;br /&gt;• Support for real-time heap analysis.&lt;br /&gt;&lt;br /&gt;• New integrated dump analysis and debugging tools.&lt;br /&gt;&lt;br /&gt;• Tlbimp shared source is available from codeplex (http://clrinterop.codeplex.com/).&lt;br /&gt;&lt;br /&gt;• Support for 64-bit mode dump debugging has also been added.&lt;br /&gt;&lt;br /&gt;• Mixed mode 64-bit debugging is now supported, allowing you to transition from managed to native code.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : Apress Introducing dot NET 4.0 with Visual Studio 2010&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-7696926359948785475?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/7696926359948785475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/native-code-enhancements.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/7696926359948785475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/7696926359948785475'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/native-code-enhancements.html' title='Native Code Enhancements'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-1139858343218205255</id><published>2010-08-21T00:34:00.000+08:00</published><updated>2010-08-21T00:34:00.229+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework 4.0'/><title type='text'>Native Image Generator (NGen)</title><content type='html'>NGen is an application that can improve the startup performance of managed applications by carrying out the JIT work normally done when the application is accessed. NGen creates processor optimized machine code (images) of your application that are cached. This can reduce application startup time considerably. Prior to .NET 4.0, if you updated the framework or installed certain patches, it was necessary to NGen your application all over again. But no longer; through a process known as "targeted" patching, regenerating images is no longer required.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : Apress Introducing dot NET 4.0 with Visual Studio 2010&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-1139858343218205255?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/1139858343218205255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/native-image-generator-ngen.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/1139858343218205255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/1139858343218205255'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/native-image-generator-ngen.html' title='Native Image Generator (NGen)'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-5682340056643915617</id><published>2010-08-20T01:30:00.000+08:00</published><updated>2010-08-20T01:30:00.607+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework 4.0'/><title type='text'>Monitoring and Profiling</title><content type='html'>.NET 4.0 introduces a number of enhancements that enable you to monitor, debug, and handle exceptions:&lt;br /&gt;&lt;br /&gt;• .NET 4.0 allows you to obtain CPU and memory usage per application domain, which is particularly useful for ASP.NET applications (see Chapter 10).&lt;br /&gt;&lt;br /&gt;• It is now possible to access ETW logs (no information available at time of writing) from .NET.&lt;br /&gt;&lt;br /&gt;• A number of APIs have been exposed for profiling and debugging purposes.&lt;br /&gt;&lt;br /&gt;• No longer must profilers be attached at application startup; they can be added at any point. These profilers have no impact and can be detached at any time.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : Apress Introducing dot NET 4.0 with Visual Studio 2010&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-5682340056643915617?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/5682340056643915617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/monitoring-and-profiling.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/5682340056643915617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/5682340056643915617'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/monitoring-and-profiling.html' title='Monitoring and Profiling'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-1049884281739353976</id><published>2010-08-19T01:27:00.000+08:00</published><updated>2010-08-19T01:27:00.105+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework 4.0'/><title type='text'>Security</title><content type='html'>In previous releases of .NET, the actions code could perform could be controlled using Code Access Security (CAS) policies. Although CAS undoubtedly offered much flexibility, it could be confusing to use and didn’t apply to unmanaged code. In .NET 4.0, security is much simpler.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Transparency Model&lt;br /&gt;The transparency model divides code into safe, unsafe, and maybe safe code (depending on settings in the host the application is running in). .NET has a number of different types of hosts in which applications can live, such as ASP.NET, ClickOnce, SQL, Silverlight, and so on.&lt;br /&gt;Prior to .NET 4.0, the transparency model was used mainly for auditing purposes (Microsoft refers to this as transparency level 1) and in conjunction with code checking tools such as FxCop. The transparency model divides code into three types:&lt;br /&gt;• Transparent&lt;br /&gt;• Safe critical&lt;br /&gt;• Critical&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Transparent Code&lt;br /&gt;Transparent code is safe and verifiable code such as string and math functions that will not do anything bad to users’ systems. Transparent code has the rights to call other transparent code and safe critical code. It might not call critical code.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Safe Critical Code&lt;br /&gt;Safe critical code is code that might be allowed to run depending on the current host settings. Safe critical code acts as a middle man/gatekeeper between transparent and critical code verifying each request. An example of safe critical code is FileIO functions that might be allowed in some scenarios (such as ASP.NET) but not in others (such as Silverlight).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Critical Code&lt;br /&gt;Critical code can do anything and calls such as Marshal come under this umbrella.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Safe Critical Gatekeeper&lt;br /&gt;Transparent code never gets to call critical code directly, but has to go via the watchful eye of safe critical code.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Why Does It Matter?&lt;br /&gt;If your .NET 4.0 application is running in partial trust, .NET 4.0 will ensure that transparent code can call only other transparent and safe critical code (the same as the Silverlight security model). When there is a call to safe critical code, a permission demand is made that results in a check of permissions allowed by the current host. If your application does not have permissions, a security exception will occur.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Security Changes&lt;br /&gt;There are a number of security changes:&lt;br /&gt;• Applications that are run from Windows Explorer or network shares run in full trust. This avoids some tediousness because prior to .NET 4.0 local and network applications would run with different permission sets.&lt;br /&gt;&lt;br /&gt;• Applications that run in a host (for example, ASP.NET, ClickOnce, Silverlight, and SQL CLR) run with the permissions the host grants. You thus need worry only that the host grants the necessary permissions for your application. Partial trust applications running within a host are considered transparent applications (see following) and have various restrictions on them.&lt;br /&gt;&lt;br /&gt;• Runtime support has been removed for enforcing Deny, RequestMinimum, RequestOptional, and RequestRefuse permission requests. Note that when you upgrade your applications to use .NET 4.0, you might receive warnings and errors if your application utilizes these methods. As a last resort, you can force the runtime to use legacy CAS policy with the new NetFx40_LegacySecurityPolicy attribute. For migration options, see http://msdn.microsoft.com/en-us/library/ee191568(VS.100).aspx.&lt;br /&gt;&lt;br /&gt;• For un-hosted code, Microsoft now recommends that security policies are applied by using Software Restriction Policies (SRPs,), which apply to both managed and unmanaged code. Hosted code applications (e.g., ASP.NET and ClickOnce) are responsible for setting up their own policies.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SecAnnotate&lt;br /&gt;SecAnnotate is a new tool contained in the .NET 4.0 SDK that analyzes assemblies for transparency violations.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;APTCA and Evidence&lt;br /&gt;I want to highlight two other changes (that probably will not affect the majority of developers):&lt;br /&gt;&lt;br /&gt;• Allow Partially Trusted Callers Attribute (APTCA) allows code that is partially trusted (for example, web sites) to call a fully trusted assembly and has a new constructor that allows the specification of visibility with the PartialTrustVisibilityLevel enumeration.&lt;br /&gt;&lt;br /&gt;• A new base class called Evidence has been introduced for all objects to be used that all evidence will derive from. This class ensures that an evidence object is not null and is serializable. A new method has also been added to the evidence list, enabling querying of specific types of evidence rather than iterating through the collection.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : Apress Introducing dot NET 4.0 with Visual Studio 2010&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-1049884281739353976?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/1049884281739353976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/security.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/1049884281739353976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/1049884281739353976'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/security.html' title='Security'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-119890944033966069</id><published>2010-08-18T01:06:00.000+08:00</published><updated>2010-08-18T01:06:00.139+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework 4.0'/><title type='text'>Globalization</title><content type='html'>Globalization is becoming increasingly important in application development. The .NET 4.0 Framework now supports a minimum of 354 cultures (compared with 203 in previous releases??now with new support for Eskimos/Inuits??and a whole lot more).&lt;br /&gt;&lt;br /&gt;A huge amount of localization information is compiled into the .NET Framework. The main problem is that the .NET Framework doesn’t get updated that often, and native code doesn’t use the same localization info.&lt;br /&gt;&lt;br /&gt;This changes in .NET 4.0 for Windows 7 users because globalization information is read directly from the operating system rather than the framework. This is a good move because it presents a consistent approach across managed/unmanaged applications. For users not lucky enough to be using Windows 7 (it’s good; you should upgrade), globalization information will be read from the framework itself as per usual. Note that Windows Server 2008 will still use the localized .NET 4.0 store.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Globalization Changes in .NET 4.0&lt;br /&gt;There have been a huge number of globalization changes; many of them will affect only a minority of users. For a full list, please refer to http://msdn.microsoft.com/en-us/netframework/dd890508.aspx.&lt;br /&gt;&lt;br /&gt;I do want to draw your attention to some of the changes in .NET 4.0:&lt;br /&gt;&lt;br /&gt;• Neutral culture properties will return values from the specific culture that is most dominant for that neutral culture.&lt;br /&gt;&lt;br /&gt;• Neutral replacement cultures created by .NET 2.0 will not load in .NET 4.0.&lt;br /&gt;&lt;br /&gt;• Resource Manager will now refer to the user’s preferred UI language instead of that specified in the CurrentUICultures parent chain.&lt;br /&gt;&lt;br /&gt;• Ability to opt in to previous framework versions’ globalization-sorting capabilities.&lt;br /&gt;&lt;br /&gt;• zh-HK_stroke, ja-JP_unicod, and ko-KR_unicod alternate sort locales removed.&lt;br /&gt;&lt;br /&gt;• Compliance with Unicode standard 5.1 (addition of about 1400 characters).&lt;br /&gt;&lt;br /&gt;• Support added for following scripts: Sundanese, Lepcha, Ol Chiki, Vai, Saurashtra, Kayah Li, Rejang, and Cham.&lt;br /&gt;&lt;br /&gt;• Some cultures display names changed to follow naming convention guidelines: (Chinese, Tibetan (PRC), French (Monaco), Tamazight (Latin, Algeria), and Spanish (Spain, International Sort).&lt;br /&gt;&lt;br /&gt;• Parent chain of Chinese cultures now includes root Chinese culture.&lt;br /&gt;&lt;br /&gt;• Arabic locale calendar data updated.&lt;br /&gt;&lt;br /&gt;• Culture types WindowsOnlyCultures and FrameworkCultures now obsolete.&lt;br /&gt;&lt;br /&gt;• CompareInfo.ToString()() and TextInfo.ToString()() will not return locale IDs because Microsoft wants to reduce this usage.&lt;br /&gt;&lt;br /&gt;• Miscellaneous updates to globalization properties such as currency, date and time formats, and number formatting.&lt;br /&gt;&lt;br /&gt;• Miscellaneous updates to globalization properties such as currency, date and time formats, and number formatting.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;TimeSpan Globalized Formatting and Parsing&lt;br /&gt;TimeSpan now has new overloaded versions of ToString()(), Parse()(), TryParse()(), ParseExact()(), and TryParseExact()() to support cultural sensitive formatting. Previously, TimeSpan’s ToString() method would ignore cultural settings on an Arabic machine, for example.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : Apress Introducing dot NET 4.0 with Visual Studio 2010&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-119890944033966069?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/119890944033966069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/globalization.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/119890944033966069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/119890944033966069'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/globalization.html' title='Globalization'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-6379276799948330971</id><published>2010-08-17T01:57:00.000+08:00</published><updated>2010-08-17T01:57:00.465+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework 4.0'/><title type='text'>Threading</title><content type='html'>Threading has been tweaked in .NET 4.0, with the thread pool switching to a lock-free data structure (apparently the queue used for work items is very similar to ConcurrentQueue). This new structure is more GC-friendly, faster, and more efficient. Prior to .NET 4.0, the thread pool didn’t have any information about the context in which the threads were created, which made it difficult to optimize (for example, whether one thread depends on another). This situation changes in .NET 4.0 with a new class called Task that provide more information to the thread pool about the work to be performed thus allowing it to make better optimizations.  &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : Apress Introducing dot NET 4.0 with Visual Studio 2010&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-6379276799948330971?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/6379276799948330971/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/threading.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/6379276799948330971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/6379276799948330971'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/threading.html' title='Threading'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-7593964872626330820</id><published>2010-08-16T00:55:00.000+08:00</published><updated>2010-08-16T00:55:00.322+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework 4.0'/><title type='text'>Garbage Collection</title><content type='html'>Garbage collection is something you rarely have to worry about in our nice managed world, so before you look at what has changed in .NET 4.0, let’s quickly recap how GC currently works to put the new changes in context.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Garbage Collection Prior to .NET 4.0&lt;br /&gt;As you probably know, the CLR allocates memory for your applications as they require it and assumes an infinite amount of memory is available (you wish). This is a mad assumption, so a process called the garbage collector (GC) is needed in order to clean up unused resources. The GC keeps an eye on available memory resources and will perform a cleanup in three situations:&lt;br /&gt;- When a threshold is exceeded&lt;br /&gt;- When a user specifically calls the garbage collector&lt;br /&gt;- When a low system memory condition occurs&lt;br /&gt;&lt;br /&gt;To make this as efficient as possible, the GC divides items to be collected into "generations." When an item is first created, it is considered a generation 0 item (gen 0), and if it survives subsequent collections (it is still in use), it is promoted to a later generation: generation 1 and later generation 2.&lt;br /&gt;&lt;br /&gt;This division allows the garbage collector to be more efficient in the removal and reallocation of memory. For example, generation 0 items mainly consist of instance variables that can be quickly removed (freeing resources earlier) while the older generations contain objects such as global variables that will probably stick around for the lifetime of your application. On the whole, the GC works very well and saves you writing lots of tedious cleanup code to release memory.&lt;br /&gt;&lt;br /&gt;The GC operates in a number of modes: workstation, concurrent workstation (default for multicore machines), and server. These modes are optimized for different scenarios. For example, workstation is the default mode and is optimized for ensuring that your applications have a quick response time (important for UI-based applications) while server mode is optimized for throughput of work (generally more important for server type applications). Server mode does pause all other managed threads during a garbage collection, however. If server mode were used for a Windows Forms application, this&lt;br /&gt;collection could manifest itself as intermittent pauses, which would be very annoying.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Garbage Collection in .NET 4.0&lt;br /&gt;So what’s changed then? Prior to .NET 4.0, a concurrent workstation GC could do most but not all of a generation 0 and 1 collection at the same time as a generation 2 collection. The GC was also unable to start another collection when it was in the middle of a collection which meant that only memory in the current segment could be reallocated. In .NET 4.0, however, concurrent workstation GC collection is replaced by background garbage collection. The simple explanation (and GC gets very complex) is that background garbage collection allows another GC (gen 0 and 1) to start at the same time as an existing full GC (gen 0, 1, and 2) is running, reducing the time full garbage collections take. This means that resources are freed earlier and that a new memory segment could be created for allocation if the current segment is full up. Background collection is not something you have to worry about??it just happens and will make your applications perform more quickly and be more efficient, so it’s yet another good reason to&lt;br /&gt;upgrade your existing applications to .NET 4.0. Background collection is not available in server mode GC, although the CLR team has stated they are aiming to achieve this in the next version of the framework. The GC team has also done work to ensure that garbage collection works effectively on up to 128 core machines and improved the GC’s efficiency, reducing the time needed to suspend managed threads For more information and a detailed interview with the GC team, please refer to http://blogs.msdn.com/ukadc/archive/2009/10/13/background-and-foreground-gc-in-net-4.aspx and http://channel9.msdn.com/shows/Going+Deep/Maoni-Stephens-and-Andrew-Pardoe-CLR-4-Inside-Background-GC/.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;GC.RegisterForFullGCNotification()&lt;br /&gt;It is worth noting that from .NET 3.5SP1, the CLR has a method called GC.RegisterForFullGCNotification() that lets you know when a generation 2 or large heap object collection occurs in your applications. You might want to use this information to route users to a different server until the collection is complete, for example.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : Apress Introducing dot NET 4.0 with Visual Studio 2010&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-7593964872626330820?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/7593964872626330820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/garbage-collection.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/7593964872626330820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/7593964872626330820'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/garbage-collection.html' title='Garbage Collection'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-7540020832311255488</id><published>2010-08-15T01:08:00.001+08:00</published><updated>2010-07-31T23:13:45.407+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework 4.0'/><title type='text'>Dot Net Framework 4 New CLR</title><content type='html'>The last two releases of.NET (3.0 and 3.5) have been additive releases building on top of the functionality available in CLR version 2.0. NET 4.0 however has a new version of the CLR! So you can happily install .NET 4.0 without fear that it will affect your existing .NET applications running on previous versions of the framework.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ASP.NET&lt;br /&gt;When using IIS7, the CLR version is determined by the application pool settings. Thus you should be able to run .NET 4.0 ASP.NET applications side by side without fear of affecting existing ASP.NET sites.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What Version of the CLR Does My Application Use?&lt;br /&gt;It depends; applications compiled for earlier versions of the framework will as before use the same version they were built on if it's installed. If, however, the previous framework version is not available, the user will now be offered a choice about whether to download the version of the framework the application was built with or whether to run using the latest version. Prior to .NET 4.0, the user wouldn’t be given this choice with the application using the latest version available.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Specifying the Framework to Use&lt;br /&gt;Since almost the beginning of .NET (well, .NET Framework 1.1), you can specify the version your application needs to use in the App.config file (previously as requiredRuntime):&lt;br /&gt;&lt;pre class="brush : xml"&gt;&lt;br /&gt;&lt;configuration&gt;&lt;br /&gt; &lt;startup&gt;&lt;br /&gt;  &lt;supportedruntime version="v1.0.3705"&gt;&lt;br /&gt; &lt;/supportedruntime&gt;&lt;br /&gt;&lt;/startup&gt;&lt;br /&gt;&lt;/configuration&gt;&lt;/pre&gt;&lt;br /&gt;The version property supports the following settings:&lt;br /&gt;- v4.0 (framework version 4.0)&lt;br /&gt;- v2.0.50727 (framework version 3.5)&lt;br /&gt;- v2.0.50727 (framework version 2.0)&lt;br /&gt;- v1.1.4322 (framework version 1.1)&lt;br /&gt;- v1.0.3705 (framework version 1.0)&lt;br /&gt;&lt;br /&gt;If this setting is left out, the version of the framework used to build the application is used (if available). When the supportedRuntime property is set, if you try to run the application on a machine that doesn’t have the CLR version specified.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;VB.NET Command-Line Compiler&lt;br /&gt;The compiler has a new /langversion switch option that allows you to tell the compiler to use a particular framework version. It currently accepts parameters 9, 9.0, 10, and 10.0. vbc /langversion:9.0 skynet.vb&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Improved Client Profile&lt;br /&gt;Client profile is a lean, reduced-functionality version of the full .NET Framework that was first introduced in .NET 3.5SP1. Functionality that isn’t often needed is removed from the client profile. This results in a smaller download and reduced installation time for users. At the time of writing, Microsoft has reduced the size of the client profile to around 34 MB, although it intends to minimize it even further for the final release. The .NET 4.0 client profile is supported by all environments that support the full .NET Framework and is redistributable (rather than web download only) and contains improvements to add/remove program entries, unlike the version available in .NET 3.5SP1.&lt;br /&gt;&lt;br /&gt;To use the client profile in your application, open the project Properties page, select the Application tab, and on the Target framework drop-down menu select .NET Framework 4.0 Client Profile. Note that in VB.NET, this option is in the Compile??Advanced Compile Options tab. Client profile is the default target framework option in many VS2010 project types such as Windows Forms and Console. This is important to remember because sometimes you will need functionality not available in the client profile and be confused as to why various options are not available in the Add Reference menu.&lt;br /&gt;For more information about client profile, please consult http://blogs.msdn.com/jgoldb/archive/2009/05/27/net-framework-4-client-profile-introduction.aspx.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In-Process Side-by-Side Execution&lt;br /&gt;Prior to .NET 4.0, COM components would always run using the latest version of the .NET Framework installed by the user. This could cause some issues, for example at some of the PDC08 presentations Microsoft cites an Outlook add-in that contained a thread variable initialization bug. The add-in worked&lt;br /&gt;correctly in .NET 1.0, but after the clever guys in the CLR team made performance improvements to the threading pool in .NET 1.1, the add-in left many Microsoft executives unable to read their e-mail (some cynics argued that little productivity was lost).&lt;br /&gt;&lt;br /&gt;Obviously you want to fix this bug, but it is vital to know that your application will run in the same manner as when you tested it. In-process side-by-side execution ensures that COM components run using the version of the framework they were developed for.&lt;br /&gt;&lt;br /&gt;Prior to .NET 4.0, COM components would run using the latest version of the .NET Framework installed. You can now force COM components to use a specific framework version by adding the supportedRuntime section to App.config:&lt;br /&gt;&lt;pre class="brush : xml"&gt;&lt;br /&gt;&lt;configuration&gt;&lt;br /&gt; &lt;startup&gt;&lt;br /&gt;  &lt;supportedruntime version="v4.0.20506"&gt;&lt;br /&gt; &lt;/supportedruntime&gt;&lt;br /&gt;&lt;/startup&gt;&lt;br /&gt;&lt;/configuration&gt;&lt;/pre&gt;&lt;br /&gt;You can also force components to use the latest version of the .NET Framework with the following configuration:&lt;br /&gt;&lt;pre class="brush : xml"&gt;&lt;br /&gt;&lt;configuration&gt;&lt;br /&gt; &lt;startup&gt;&lt;br /&gt;  &lt;process&gt;&lt;br /&gt;   &lt;rollforward enabled="true"&gt;&lt;br /&gt;  &lt;/rollforward&gt;&lt;br /&gt; &lt;/process&gt;&lt;br /&gt;&lt;/startup&gt;&lt;br /&gt;&lt;/configuration&gt;&lt;/pre&gt;&lt;br /&gt;For more information, please refer to http://msdn.microsoft.com/en-gb/library/ee518876(VS.100).aspx. Developers creating .NET components should note that their libraries will always run using the same framework version of the app domain they are running in if loading through a reference or call to Assembly.Load(). For example, libraries built in a previous version of .NET used in an application upgraded to .NET 4.0 will run using .NET 4.0. This might not be the case for unmanaged code, however.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source of Information : Apress Introducing dot NET 4.0 with Visual Studio 2010&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-7540020832311255488?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/7540020832311255488/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/07/dot-net-framework-4-new-clr.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/7540020832311255488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/7540020832311255488'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/07/dot-net-framework-4-new-clr.html' title='Dot Net Framework 4 New CLR'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-3996919114492445114</id><published>2010-08-14T01:08:00.000+08:00</published><updated>2010-08-14T01:08:00.172+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='VB .Net sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Schedule'/><title type='text'>Changing the background color of the rows in the Schedule [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>This tutorial is intended to show how to change the background color of the rows in the Schedule control using the WorkingHourSchema object&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The following code shows how to format the rows based on the day of the week&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;'Create a new ScheduleHourRange object to specify the format style settings and the&lt;br /&gt;&lt;br /&gt;'time and days when the format style will be applied&lt;br /&gt;&lt;br /&gt;Dim hourRange As New ScheduleHourRange()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'Specify the start and end time that you want to format     &lt;br /&gt;&lt;br /&gt;hourRange.EndTime = New TimeSpan(10, 0, 0)&lt;br /&gt;&lt;br /&gt;hourRange.StartTime = New TimeSpan(8, 0, 0)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'Specify the days of the week that you want to format&lt;br /&gt;&lt;br /&gt;hourRange.DayOfWeek = ScheduleDayOfWeek.Monday Or ScheduleDayOfWeek.Tuesday Or _&lt;br /&gt;&lt;br /&gt;  ScheduleDayOfWeek.Wednesday Or ScheduleDayOfWeek.Thursday Or ScheduleDayOfWeek.Friday&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'Set the format style that you want to apply&lt;br /&gt;&lt;br /&gt;hourRange.FormatStyle.BackColor = Color.Red&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'Add the ScheduleHourRange to the WorkingHoursRange collection of the WorkingHourSchema&lt;br /&gt;&lt;br /&gt;Me.Schedule1.WorkingHourSchema.WorkingHoursRange.Add(hourRange)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C#&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;//Create a new ScheduleHourRange object to specify the format style settings and the&lt;br /&gt;&lt;br /&gt;//time and days when the format style will be applied&lt;br /&gt;&lt;br /&gt;ScheduleHourRange hourRange = new ScheduleHourRange();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//Specify the start and end time that you want to format     &lt;br /&gt;&lt;br /&gt;hourRange.EndTime = new TimeSpan(10, 0, 0);&lt;br /&gt;&lt;br /&gt;hourRange.StartTime = new TimeSpan(8, 0, 0);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//Specify the days of the week that you want to format&lt;br /&gt;&lt;br /&gt;hourRange.DayOfWeek = ScheduleDayOfWeek.Monday | ScheduleDayOfWeek.Thursday | ScheduleDayOfWeek.Wednesday | ScheduleDayOfWeek.Thursday | ScheduleDayOfWeek.Friday;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//Set the format style that you want to apply&lt;br /&gt;&lt;br /&gt;hourRange.FormatStyle.BackColor = Color.Red;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//Add the ScheduleHourRange to the WorkingHoursRange collection of the WorkingHourSchema&lt;br /&gt;&lt;br /&gt;this.Schedule1.WorkingHourSchema.WorkingHoursRange.Add(hourRange);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The following code shows how to use the Exceptions collection to format the rows for a specific Date&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;'Create a new WorkingHourException&lt;br /&gt;&lt;br /&gt;Dim exception As New WorkingHourException()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'Specify the date range where you want to give the format&lt;br /&gt;&lt;br /&gt;'Note: The date range must be of at least one day, and use the StartTime and EndTime 'properties of the HourRange to set the time of the day where the format will be applied&lt;br /&gt;&lt;br /&gt;exception.DateRange = New DateRange(New DateTime(2006, 1, 15), New DateTime(2006, 1, 16))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'Specify the start and end time that you want to format        exception.HourRange.EndTime = New TimeSpan(14, 0, 0)&lt;br /&gt;&lt;br /&gt;exception.HourRange.StartTime = New TimeSpan(10, 0, 0)&lt;br /&gt;&lt;br /&gt;'Set the format style that you want to apply&lt;br /&gt;&lt;br /&gt;exception.HourRange.FormatStyle.BackColor = Color.Red&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'Add the WorkingHourException to the Exceptions collection of the WorkingHourSchema&lt;br /&gt;&lt;br /&gt;Me.Schedule1.WorkingHourSchema.Exceptions.Add(exception)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C#&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;//Create a new WorkingHourException&lt;br /&gt;&lt;br /&gt;WorkingHourException exception = new WorkingHourException();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//Specify the date range where you want to give the format&lt;br /&gt;&lt;br /&gt;//Note: The date range must be of at least one day, and use the StartTime and EndTime //properties of the HourRange to set the time of the day where the format will be applied&lt;br /&gt;&lt;br /&gt;exception.DateRange = new DateRange(new DateTime(2006, 1, 16), new DateTime(2006, 1, 17));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//Specify the start and end time that you want to format     &lt;br /&gt;&lt;br /&gt;exception.HourRange.EndTime = new TimeSpan(14, 0, 0);&lt;br /&gt;&lt;br /&gt;exception.HourRange.StartTime = new TimeSpan(10, 0, 0);&lt;br /&gt;&lt;br /&gt;//Set the format style that you want to apply&lt;br /&gt;&lt;br /&gt;exception.HourRange.FormatStyle.BackColor = Color.Green;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//Add the WorkingHourException to the Exceptions collection of the WorkingHourSchema&lt;br /&gt;&lt;br /&gt;this.Schedule1.WorkingHourSchema.Exceptions.Add(exception);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The following code shows how to use the RecurrencePattern property of the ScheduleHourRange object to apply the format style for the rows based on a recurrence pattern&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;Dim recurrencePattern As New WorkingHourRecurrencePattern()&lt;br /&gt;&lt;br /&gt;'Call the BeginEdit before changing the properties of the RecurrencePattern&lt;br /&gt;&lt;br /&gt;recurrencePattern.BeginEdit()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'Specify the recurrence pattern. In this case the 10th of every month is the date that 'will be formatted&lt;br /&gt;&lt;br /&gt;recurrencePattern.SetDefaultValuesForDate(DateTime.Today)&lt;br /&gt;&lt;br /&gt;recurrencePattern.PatternStartDate = DateTime.Today&lt;br /&gt;&lt;br /&gt;recurrencePattern.RecurrenceEndMode = RecurrenceEndMode.NoEndDate&lt;br /&gt;&lt;br /&gt;recurrencePattern.RecurrenceType = RecurrenceType.Monthly&lt;br /&gt;&lt;br /&gt;recurrencePattern.StartTime = New TimeSpan(8, 0, 0)&lt;br /&gt;&lt;br /&gt;recurrencePattern.EndTime = New TimeSpan(10, 0, 0)&lt;br /&gt;&lt;br /&gt;recurrencePattern.DayOfMonth = 10&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;recurrencePattern.EndEdit()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'Create the new ScheduleHourRange that will be added to the WorkingHourSchema&lt;br /&gt;&lt;br /&gt;Dim hourRange As New ScheduleHourRange()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'Set the RecurrencePattern that will be used&lt;br /&gt;&lt;br /&gt;hourRange.RecurrencePattern = recurrencePattern&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'Set the format style that you want to apply&lt;br /&gt;&lt;br /&gt;hourRange.FormatStyle.BackColor = Color.Red&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'Add the ScheduleHourRange to the WorkingHourSchema of the Schedule&lt;br /&gt;&lt;br /&gt;Me.Schedule1.WorkingHourSchema.WorkingHoursRange.Add(hourRange)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C#&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;WorkingHourRecurrencePattern recurrencePattern = new WorkingHourRecurrencePattern();&lt;br /&gt;&lt;br /&gt;//Call the BeginEdit before changing the properties of the RecurrencePattern&lt;br /&gt;&lt;br /&gt;recurrencePattern.BeginEdit();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//Specify the recurrence pattern. In this case the 10th of every month is the date that //will be formatted&lt;br /&gt;&lt;br /&gt;recurrencePattern.SetDefaultValuesForDate(DateTime.Today);&lt;br /&gt;&lt;br /&gt;recurrencePattern.PatternStartDate = DateTime.Today;&lt;br /&gt;&lt;br /&gt;recurrencePattern.RecurrenceEndMode = RecurrenceEndMode.NoEndDate;&lt;br /&gt;&lt;br /&gt;recurrencePattern.RecurrenceType = RecurrenceType.Monthly;&lt;br /&gt;&lt;br /&gt;recurrencePattern.StartTime = new TimeSpan(8, 0, 0);&lt;br /&gt;&lt;br /&gt;recurrencePattern.EndTime = new TimeSpan(10, 0, 0);&lt;br /&gt;&lt;br /&gt;recurrencePattern.DayOfMonth = 10;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;recurrencePattern.EndEdit();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//Create the new ScheduleHourRange that will be added to the WorkingHourSchema&lt;br /&gt;&lt;br /&gt;ScheduleHourRange hourRange = new ScheduleHourRange();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//Set the RecurrencePattern that will be used&lt;br /&gt;&lt;br /&gt;hourRange.RecurrencePattern = recurrencePattern;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//Set the format style that you want to apply&lt;br /&gt;&lt;br /&gt;hourRange.FormatStyle.BackColor = Color.Red;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//Add the ScheduleHourRange to the WorkingHourSchema of the Schedule&lt;br /&gt;&lt;br /&gt;this.Schedule1.WorkingHourSchema.WorkingHoursRange.Add(hourRange);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you want to modify only the rows of a particular owner then use the WorkingHourSchema property of the ScheduleAppointment owner to add the ScheduleHourRange&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;Dim owner As ScheduleAppointmentOwner = Me.Schedule1.Owners(0)&lt;br /&gt;&lt;br /&gt;owner.WorkingHourSchema.WorkingHoursRange.Add(hourRange)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C#&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;ScheduleAppointmentOwner owner = this.Schedule1.Owners[0];&lt;br /&gt;&lt;br /&gt;owner.WorkingHourSchema.WorkingHoursRange.Add(hourRange);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source Of Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-3996919114492445114?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/3996919114492445114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/changing-background-color-of-rows-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/3996919114492445114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/3996919114492445114'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/changing-background-color-of-rows-in.html' title='Changing the background color of the rows in the Schedule [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-6462607248950535138</id><published>2010-08-13T01:02:00.000+08:00</published><updated>2010-08-13T01:02:00.514+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='VB .Net sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Schedule'/><title type='text'>Using a layout file to preserve user changes [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>This tutorial is intended to show you how to use a layout file to preserve Schedule control settings. Using a layout file you could be able to preserve even the changes to the layout made by the user.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Follow these steps to use a layout file at run time:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1) Define the layout at design time and then save it clicking in the "Save Layout File" button that is found in the "Layout Manager" tab of the Schedule control designer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2) In the Load event of the form, load the layout from a file using the LoadLayoutFile method of the Schedule.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;   Private Sub LoadLayout()&lt;br /&gt;&lt;br /&gt;       Dim layoutDir As String = "C:\ScheduleLayout.xml"&lt;br /&gt;&lt;br /&gt;       Dim layoutStream As FileStream = New FileStream(layoutDir, FileMode.Open)&lt;br /&gt;&lt;br /&gt;       Schedule1.LoadLayoutFile(layoutStream)&lt;br /&gt;&lt;br /&gt;       layoutStream.Close()&lt;br /&gt;&lt;br /&gt;   End Sub&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C#:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;   private void LoadLayout()&lt;br /&gt;&lt;br /&gt;   {&lt;br /&gt;&lt;br /&gt;      string layoutDir = @"C:\ScheduleLayout.xml";&lt;br /&gt;&lt;br /&gt;      FileStream layoutStream;&lt;br /&gt;&lt;br /&gt;      FileInfo fInfo = new FileInfo(layoutDir);&lt;br /&gt;&lt;br /&gt;      if (fInfo.Exists)&lt;br /&gt;&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;          layoutStream = new FileStream(layoutDir, FileMode.Open);&lt;br /&gt;&lt;br /&gt;          schedule1.LoadLayoutFile(layoutStream);&lt;br /&gt;&lt;br /&gt;          layoutStream.Close();&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3) (Optional) To preserve user changes to the layout, update the layout before it is changed in the CurrentLayoutChanging event of the Schedule.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;   Private Sub Schedule1_CurrentLayoutChanging(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles Schedule1.CurrentLayoutChanging&lt;br /&gt;&lt;br /&gt;       'To persist user changes in the current layout,&lt;br /&gt;&lt;br /&gt;       'call the Update method explicitly before changing the layout&lt;br /&gt;&lt;br /&gt;       If Not Schedule1.CurrentLayout Is Nothing Then&lt;br /&gt;&lt;br /&gt;           Schedule1.CurrentLayout.Update()&lt;br /&gt;&lt;br /&gt;       End If&lt;br /&gt;&lt;br /&gt;   End Sub&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C#:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;   private void schedule1_CurrentLayoutChanging(object sender, System.ComponentModel.CancelEventArgs e)&lt;br /&gt;&lt;br /&gt;   {&lt;br /&gt;&lt;br /&gt;       //To persist user changes in the current layout,&lt;br /&gt;&lt;br /&gt;       //call the Update method explicitly before changing the layout&lt;br /&gt;&lt;br /&gt;       if (schedule1.CurrentLayout != null)&lt;br /&gt;&lt;br /&gt;       {&lt;br /&gt;&lt;br /&gt;           schedule1.CurrentLayout.Update();&lt;br /&gt;&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4) In the Closing event of the form, save the layout file again to be able to preserve the changes the user did (like view, format settings, dates, etc).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing&lt;br /&gt;&lt;br /&gt;   Dim Result As DialogResult&lt;br /&gt;&lt;br /&gt;   Dim LayoutDir As String&lt;br /&gt;&lt;br /&gt;   Dim LayoutStream As FileStream&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   Result = MessageBox.Show("Do you want to preserve the changes in the Schedule control layout?", "Preserve changes", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)&lt;br /&gt;&lt;br /&gt;   If Result = Windows.Forms.DialogResult.Cancel Then&lt;br /&gt;&lt;br /&gt;       e.Cancel = True&lt;br /&gt;&lt;br /&gt;   ElseIf Result = Windows.Forms.DialogResult.Yes Then&lt;br /&gt;&lt;br /&gt;       LayoutDir = "C:\ScheduleLayout.xml"&lt;br /&gt;&lt;br /&gt;       LayoutStream = New FileStream(LayoutDir, FileMode.Open)&lt;br /&gt;&lt;br /&gt;       Schedule1.SaveLayoutFile(LayoutStream)&lt;br /&gt;&lt;br /&gt;       LayoutStream.Close()&lt;br /&gt;&lt;br /&gt;   End If&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C#:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;private void Form1_FormClosing(object sender, FormClosingEventArgs e)&lt;br /&gt;&lt;br /&gt;{   &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    DialogResult result;&lt;br /&gt;&lt;br /&gt;    string layoutDir;&lt;br /&gt;&lt;br /&gt;    FileStream layoutStream;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    result = MessageBox.Show("Do you want to preserve the changes in the Schedule control layout?", "Preserve changes", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;     if (result == DialogResult.Cancel)&lt;br /&gt;&lt;br /&gt;     {&lt;br /&gt;&lt;br /&gt;         e.Cancel = true;&lt;br /&gt;&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     else if (result == DialogResult.Yes)&lt;br /&gt;&lt;br /&gt;     {&lt;br /&gt;&lt;br /&gt;         layoutDir = + @"C:\ScheduleLayout.xml";&lt;br /&gt;&lt;br /&gt;         layoutStream = new FileStream(layoutDir, FileMode.Open);&lt;br /&gt;&lt;br /&gt;         schedule1.SaveLayoutFile(layoutStream);&lt;br /&gt;&lt;br /&gt;         layoutStream.Close();&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;5) Run the project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of            Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-6462607248950535138?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/6462607248950535138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/using-layout-file-to-preserve-user_13.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/6462607248950535138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/6462607248950535138'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/using-layout-file-to-preserve-user_13.html' title='Using a layout file to preserve user changes [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-9088616905405615056</id><published>2010-08-12T01:54:00.000+08:00</published><updated>2010-08-12T01:54:00.363+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='VB .Net sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Schedule'/><title type='text'>Using multiple layouts [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>This tutorial is intended to show you how to use multiple layouts in a Schedule control.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Follow these steps to create multiple layouts at design time:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1) Create a new Visual Basic or C# project using "Windows Application" Template&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2) Add a Schedule control to Form1.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3) In the Designer window of the Schedule control, modify the layout as you want, changing the view, dates, owner, etc.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4) Select the "Layout Manager" Tab. A List View will appear with a "Draft Layout" in it. The Draft Layout contains the changes you just made to the Schedule but it is not saved as a layout in the Layouts collection.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5) Click on "Save Current Layout" button and set the name "MonthView" to the draft layout.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6) Once the "MonthView" layout has been saved, add a new layout for products. To add a new layout click on the "New Layout" button and Layout1 will appear.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7) Change the name of Layout1 for "WeekView".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;8) Double click in the "WeekView" layout to select this empty layout. This action will set the "WeekView" layout you just created as the CurrentLayout in the Schedule control and all the changes you do will affect this layout only.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;9) Change any properties in the new layout like view or owners.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;10)  Select "Layout Manager" Tab again.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;11) Click in the "New Layout" button and Layout1 will appear.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;12) Change the name of Layout1 for "WorkWeek".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;13) Double click in the "WorkWeek" layout to select this empty layout. This action will set the "WorkWeek" layout you just created as the CurrentLayout in the Schedule control and all the changes you do will affect this layout only.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;14) Change any properties in the new layout like view or owners.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;15) You have finished adding layouts for the tutorial. To change a property in any of the layouts you have in the Layouts collection, select the layout from Layouts combo in the tool bar of the Schedule designer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;16) To select a layout at run time use the CurrentLayout property of the Schedule class. In the tutorial we are going to do that using buttons. So, add a button "Button1" and&lt;br /&gt;&lt;br /&gt;change its Text property to "Show MonthView". In the Click event for this button write the following code that set the "MonthView" layout as the current layout in the Schedule control:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;If Schedule1.CurrentLayout Is Nothing OrElse Schedule1.CurrentLayout.Key &lt;&gt; "MonthView" Then&lt;br /&gt;&lt;br /&gt;    Schedule1.CurrentLayout = Schedule1.Layouts("MonthView")&lt;br /&gt;&lt;br /&gt;End If&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C#&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;if (schedule1.CurrentLayout==null || schedule1.CurrentLayout.Key!="MonthView")&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;  schedule1.CurrentLayout = schedule1.Layouts["MonthView"];&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;17) Add a buttons to show "WeekView" and "WorkWeek" layouts with similar code in the Click event for those buttons.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;18) Run the project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of            Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-9088616905405615056?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/9088616905405615056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/using-multiple-layouts-janus-gridex.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/9088616905405615056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/9088616905405615056'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/using-multiple-layouts-janus-gridex.html' title='Using multiple layouts [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-6850644502546190081</id><published>2010-08-11T00:46:00.000+08:00</published><updated>2010-08-11T00:46:00.119+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='VB .Net sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Schedule'/><title type='text'>Saving and Loading Appointments from a stream [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>This tutorial is intended to show you how to save and load the Appointments, Fields and Owners collections from a stream.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The steps followed to create this project were:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1) Create a new Visual Basic or C# project using "Windows Application" Template&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2) Add a Schedule control to Form1.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3) Add a Calendar control and bind it to the Schedule control.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4) Add a button and change its Text property to "Save"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5) In the Click event of the save button use the SaveAppointments method to save the appointments to a file.&lt;br /&gt;&lt;br /&gt;         &lt;br /&gt;&lt;br /&gt;           In C#&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;     this.Cursor = Cursors.WaitCursor;&lt;br /&gt;&lt;br /&gt;     string appointmentsDir = @"C:\Appointments.xml";&lt;br /&gt;&lt;br /&gt;     System.IO.FileStream appointmentsStream;&lt;br /&gt;&lt;br /&gt;     appointmentsStream = new System.IO.FileStream(appointmentsDir, System.IO.FileMode.Create);&lt;br /&gt;&lt;br /&gt;     schedule1.SaveAppointments(appointmentsStream);&lt;br /&gt;&lt;br /&gt;     appointmentsStream.Close();&lt;br /&gt;&lt;br /&gt;     this.Cursor = Cursors.Default;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           In VB&lt;br /&gt;&lt;br /&gt;          &lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;     Me.Cursor = Cursors.WaitCursor&lt;br /&gt;&lt;br /&gt;     Dim appointmentsDir As String = "C:\Appointments.xml"&lt;br /&gt;&lt;br /&gt;     Dim appointmentsStream As System.IO.FileStream&lt;br /&gt;&lt;br /&gt;     appointmentsStream = New System.IO.FileStream(appointmentsDir, System.IO.FileMode.Create)&lt;br /&gt;&lt;br /&gt;     Schedule1.SaveAppointments(appointmentsStream)&lt;br /&gt;&lt;br /&gt;     appointmentsStream.Close()&lt;br /&gt;&lt;br /&gt;     Me.Cursor = Cursors.Default           &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6)    Add a button and change its Text property to "Load"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7) In the Click event of the load button, use the LoadAppointments method of the Schedule to load the appointment from a file&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           In VB&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;       Me.Cursor = Cursors.WaitCursor&lt;br /&gt;&lt;br /&gt;       Dim AppointmentsDir As String = "C:\Appointments.xml"&lt;br /&gt;&lt;br /&gt;       Dim AppointmentsStream As System.IO.FileStream&lt;br /&gt;&lt;br /&gt;       AppointmentsStream = New System.IO.FileStream(AppointmentsDir, System.IO.FileMode.Open)&lt;br /&gt;&lt;br /&gt;       Schedule1.LoadAppointments(AppointmentsStream)&lt;br /&gt;&lt;br /&gt;       AppointmentsStream.Close()&lt;br /&gt;&lt;br /&gt;       Me.Cursor = Cursors.Default&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;           In C#&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;           this.Cursor = Cursors.WaitCursor;&lt;br /&gt;&lt;br /&gt;           string appointmentsDir = @"C:\Appointments.xml";&lt;br /&gt;&lt;br /&gt;           System.IO.FileStream appointmentsStream;&lt;br /&gt;&lt;br /&gt;           appointmentsStream = new System.IO.FileStream(appointmentsDir, System.IO.FileMode.Open);&lt;br /&gt;&lt;br /&gt;           schedule1.LoadAppointments(appointmentsStream);&lt;br /&gt;&lt;br /&gt;           appointmentsStream.Close();&lt;br /&gt;&lt;br /&gt;           this.Cursor = Cursors.Default;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;8) Run the project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of            Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-6850644502546190081?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/6850644502546190081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/saving-and-loading-appointments-from.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/6850644502546190081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/6850644502546190081'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/saving-and-loading-appointments-from.html' title='Saving and Loading Appointments from a stream [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-7683077554985153904</id><published>2010-08-10T01:42:00.000+08:00</published><updated>2010-08-10T01:42:00.304+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='VB .Net sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Schedule'/><title type='text'>Working with Multiple Appointment Owners in a Schedule control [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>This tutorial is intended to show how to handle appointments for more than one person.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1)   Create a new "Windows Application" Project.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2)   Drag a Schedule control from the toolbox into the Form designer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3)   Select the Schedule control in the Form and set the MultiOwner property to true in the properties window.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4)    Right click in the Schedule control and select "Schedule Designer" menu. In the Schedule Designer dialog select Owners node.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5)    In the Owners panel, Click Add button to add a new owner. Select the new owner and set the following properties in the properties window.&lt;br /&gt;&lt;br /&gt;      Text = John Doe&lt;br /&gt;&lt;br /&gt;      Value = Doe&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6)    Add another owner with the following properties values.&lt;br /&gt;&lt;br /&gt;      Text = Peter Barker&lt;br /&gt;&lt;br /&gt;      Value = Barker&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;      Note: In design time the Value property of the ScheduleAppointmentOwner can only be a string. Set the Value in code if you want a different type.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7)    In code create two appointments and add them to the Schedule control.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C#&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;DateTime startDate = this.schedule1.Date.AddHours(8);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ScheduleAppointment app1 = new ScheduleAppointment(startDate, startDate.AddMinutes(30), "Phone Call");&lt;br /&gt;&lt;br /&gt;ScheduleAppointment app2 = new ScheduleAppointment(startDate, startDate.AddMinutes(30), "Go to the dentist");&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//The Owner property of the Appointment must be equal to the Value property of //one of the AppointmentOwners in the Schedule control.&lt;br /&gt;&lt;br /&gt;app1.Owner = "Doe";&lt;br /&gt;&lt;br /&gt;app2.Owner = "Barker";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;this .schedule1.Appointments.Add(app1);&lt;br /&gt;&lt;br /&gt;this .schedule1.Appointments.Add(app2);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;Dim startDate As DateTime = Me.Schedule1.Date.AddHours(8)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Dim app1 As ScheduleAppointment = New ScheduleAppointment(startDate, startDate.AddMinutes(30), "Phone Call")&lt;br /&gt;&lt;br /&gt;Dim app2 As ScheduleAppointment = New ScheduleAppointment(startDate, startDate.AddMinutes(30), "Go to the dentist")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'The Owner property of the Appointment must be equal to the Value property of&lt;br /&gt;&lt;br /&gt;'one of the AppointmentOwners in the Schedule control.&lt;br /&gt;&lt;br /&gt;app1.Owner = "Doe"&lt;br /&gt;&lt;br /&gt;app2.Owner = "Barker"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Me.Schedule1.Appointments.Add(app1)&lt;br /&gt;&lt;br /&gt;Me.Schedule1.Appointments.Add(app2)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;8)  Press F5 and run the project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of            Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-7683077554985153904?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/7683077554985153904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/working-with-multiple-appointment.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/7683077554985153904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/7683077554985153904'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/working-with-multiple-appointment.html' title='Working with Multiple Appointment Owners in a Schedule control [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-5888893087521087611</id><published>2010-08-09T01:40:00.000+08:00</published><updated>2010-08-09T01:40:00.767+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Schedule'/><title type='text'>Using SchedulePrintDocument to Print the Control [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>The SchedulePrintDocument component allows the developer to print the contents of a Schedule control. In this tutorial, we use a SchedulePrintDocument to provide the application with Print Preview capabilities.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The steps followed to create this project were:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1)       Open Form1 in Design mode&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2)       Drag a Schedule control from the Toolbox into the Form designer&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3)       Drag a SchedulePrintDocument component from the Toolbox and drop it over Form1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4)       Select SchedulePrintDocument1 component in the Components tray and set the Schedule property equal to schedule1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5)       Drag a PrintPreviewDialog component from the Toolbox and drop it over Form1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6)       Set the Document property of PrintPreviewDialog1 equal to SchedulePrintDocument1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7)       Add a button and change its Text property to "Print Preview..."&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;8)       In the Click event of the button, call The ShowDialog method of the PrintPreviewDialog1 component.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;9)       Run the project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of            Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-5888893087521087611?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/5888893087521087611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/using-scheduleprintdocument-to-print.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/5888893087521087611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/5888893087521087611'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/using-scheduleprintdocument-to-print.html' title='Using SchedulePrintDocument to Print the Control [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-6027255820644682306</id><published>2010-08-08T01:38:00.000+08:00</published><updated>2010-08-08T01:38:00.137+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Schedule'/><title type='text'>Schedule and Calendar controls working together [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>This tutorial is intended to show you how to use a Calendar control as the date navigator for a Schedule control bound to it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Follow these steps to reproduce this sample:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1)    Create a new Visual Basic or C# project using "Windows Application" Template&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2)    Add a Schedule Control to a tab in the Toolbox window by right clicking in the Toolbox window and choosing "Choose Items..." menu. When the dialog appears, select ".Net Framework Components" tab, check "Schedule" control in the list and click OK.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      Note: If the Schedule control doesn't appear as an option in the list, click the Browse button and open Janus.Windows.Schedule.dll.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3)    Drag a Schedule control from the toolbox into the Form designer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4)    Add a Calendar Control to a tab in the Toolbox window by right clicking in the Toolbox window and choosing "Choose Items..." menu. When the dialog appears, select ".Net Framework Components" tab, check "Calendar" control in the list and click OK.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      Note: If the Calendar control doesn't appear as an option in the list, click the Browse button and open Janus.Windows.Schedule.v3.dll.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5)    Drag a Calendar control from the toolbox into the Form designer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6)    Select the Calendar control and set the following properties in the properties window:&lt;br /&gt;&lt;br /&gt;         &lt;br /&gt;&lt;pre class="brush : text"&gt;&lt;br /&gt;      Schedule = schedule1&lt;br /&gt;&lt;br /&gt;      SelectionStyle = Schedule&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7)    Set the AllowDrop property of the Calendar control to true in order to allow the user to drop appointments from the Schedule to any date in the Calendar.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of            Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-6027255820644682306?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/6027255820644682306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/schedule-and-calendar-controls-working.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/6027255820644682306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/6027255820644682306'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/schedule-and-calendar-controls-working.html' title='Schedule and Calendar controls working together [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-2091131291257108996</id><published>2010-08-07T01:35:00.001+08:00</published><updated>2010-08-07T01:35:00.618+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='VB .Net sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Schedule'/><title type='text'>Binding the Schedule Control to a DataSource [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>This tutorial is intended to show you how to bind the Schedule control to a DataSource available at design time.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Follow these steps to create a simple form using a Schedule control to display records from a table in a database.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1) Create a new Visual Basic or C# project using "Windows Application" Template&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2) Add a new Data Source to the application:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Click in the "Add New Data Source..." menu under "Data" and follow the wizard to add "Appointments" table from Schedule.mdb database.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In the tutorial we used Provider = "Microsoft Access Database File (OLE DB)" and Database file name = "C:\Schedule.mdb".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3) Build the project to be able to see ScheduleDataSet and AppointmentsTableAdapter as components in the Toolbox.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4) Drag from the tool box ScheduleDataSet and AppointmentsTableAdapter components to the designer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now that the DataSet has been created, we can start using the TimeLine control in the project.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5) Add a Schedule Control to a tab in the Toolbox window by right clicking in the Toolbox window and choosing "Choose Items..." menu. When the dialog appears check "Schedule" control in the list and click OK.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Note: If Schedule control doesn't appear as an option in the list, click the Browse button and open Janus.Windows.Schedule.dll.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6) Drag a Schedule control from the toolbox into the Form designer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7) Select the Schedule control in the Form and set the following properties in the properties window:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : text"&gt;&lt;br /&gt;          DataSource = scheduleDataSet1&lt;br /&gt;&lt;br /&gt;          DataMember = Appointments&lt;br /&gt;&lt;br /&gt;          StartTimeMember = StartDate&lt;br /&gt;&lt;br /&gt;          EndTimeMember = EndDate&lt;br /&gt;&lt;br /&gt;          TextMember = Subject&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;8) (Optional) Right click on the Schedule control and select "Retrieve Fields" menu. This action will force the control to read the data source structure and create the fields for the items in the table.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;9) In the Load event of the Form fill the Appointments table in the dataset with the following code:&lt;br /&gt;&lt;br /&gt;          In VB.Net&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;                              Me.AppointmentsTableAdapter1.Fill(Me.ScheduleDataSet1.Appointments)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;          In C#.Net&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;                              this.appointmentsTableAdapter1.Fill(this.scheduleDataSet1.Appointments)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;10) Press F5 and run the project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Source Of Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-2091131291257108996?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/2091131291257108996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/binding-schedule-control-to-datasource.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/2091131291257108996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/2091131291257108996'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/binding-schedule-control-to-datasource.html' title='Binding the Schedule Control to a DataSource [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-7226078839244394595</id><published>2010-08-06T00:31:00.000+08:00</published><updated>2010-08-06T00:31:00.255+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='VB .Net sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus ExplorerBar'/><title type='text'>Using a layout file to preserve user changes [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>This tutorial is intended to show you how to save and load a layout file to preserve ExplorerBar&lt;br /&gt;control settings.&lt;br /&gt;&lt;br /&gt;Using a layout file you could be able to preserve even the changes to the layout&lt;br /&gt;made by the user.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The steps followed to create this project were:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1) Create a new Visual Basic or C# project using "Windows Application" Template.&lt;br /&gt;&lt;br /&gt;2) Add a ExplorerBar control to Form1.&lt;br /&gt;&lt;br /&gt;3) Add a button and change its Text property to "Load".&lt;br /&gt;&lt;br /&gt;4) In the Click event of the load button, load the layout from a file calling a procedure similar to&lt;br /&gt;the following:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;   Private Sub LoadLayout()&lt;br /&gt;       Dim LayoutDir As String = GetLayoutDirectory() + "\ExplorerBarLayout.ebl"&lt;br /&gt;       Dim LayoutStream As FileStream&lt;br /&gt;       LayoutStream = New FileStream(LayoutDir, FileMode.Open)&lt;br /&gt;       ExplorerBar1.LoadLayoutFile(LayoutStream)&lt;br /&gt;       LayoutStream.Close()&lt;br /&gt;   End Sub&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In C#:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;   private void LoadLayout()&lt;br /&gt;   {&lt;br /&gt;       string layoutDir = GetLayoutDirectory() + @"\ExplorerBarLayout.ebl";&lt;br /&gt;       FileStream layoutStream;&lt;br /&gt;       layoutStream = new FileStream(layoutDir, FileMode.Open);&lt;br /&gt;       explorerBar1.LoadLayoutFile(layoutStream);&lt;br /&gt;       layoutStream.Close();&lt;br /&gt;   }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;5) Add a button and change its Text property to "Save".&lt;br /&gt;&lt;br /&gt;6) In the Click event of the save button, save the layout from to file calling a procedure similar to&lt;br /&gt;the following:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;   Private Sub SaveLayout()&lt;br /&gt;       Dim LayoutDir As String = GetLayoutDirectory() + "\ExplorerBarLayout.ebl"&lt;br /&gt;       Dim LayoutStream As FileStream&lt;br /&gt;       LayoutStream = New FileStream(LayoutDir, FileMode.Create)&lt;br /&gt;       ExplorernBar1.SaveLayoutFile(LayoutStream)&lt;br /&gt;       LayoutStream.Close()&lt;br /&gt;   End Sub&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In C#:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;   private void SaveLayout()&lt;br /&gt;   {&lt;br /&gt;       string layoutDir = GetLayoutDirectory() + @"\ExplorerBarLayout.bbl";&lt;br /&gt;       FileStream layoutStream;&lt;br /&gt;       layoutStream = new FileStream(layoutDir, FileMode.Create);&lt;br /&gt;       explorerBar1.SaveLayoutFile(layoutStream);&lt;br /&gt;       layoutStream.Close();&lt;br /&gt;   }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Note: You can also save the current layout by calling the Update method of the Layout.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;       If Not ExplorerBar1.CurrentLayout Is Nothing Then&lt;br /&gt;           ExplorerBar1.CurrentLayout.Update()&lt;br /&gt;       End If&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In C#:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;       if(explorerBar1.CurrentLayout!=null)&lt;br /&gt;       {&lt;br /&gt;           explorerBar1.CurrentLayout.Update();&lt;br /&gt;       }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;7) Run the project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of            Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-7226078839244394595?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/7226078839244394595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/using-layout-file-to-preserve-user.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/7226078839244394595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/7226078839244394595'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/using-layout-file-to-preserve-user.html' title='Using a layout file to preserve user changes [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-8385274023503691485</id><published>2010-08-05T01:53:00.000+08:00</published><updated>2010-08-05T01:53:00.323+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='VB .Net sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus ExplorerBar'/><title type='text'>Using a ExplorerBarGroup as a Container Control [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>This tutorial is intended to show you how to set an ExplorerBarGroup as a container control.&lt;br /&gt;&lt;br /&gt;The steps followed to create this project are:&lt;br /&gt;&lt;br /&gt;1) Create a new Visual Basic or C# project using "Windows Application" Template.&lt;br /&gt;&lt;br /&gt;2) Drag an ExplorerBar control from the toolbox into the Form designer.&lt;br /&gt;&lt;br /&gt;3) Right click in the ExplorerBar control and select "ExplorerBar Designer" menu. In the&lt;br /&gt;ExplorerBar dialog add a new group and set its Container property to true in the property&lt;br /&gt;window.&lt;br /&gt;&lt;br /&gt;4) In the Load event of the form add the TreeView control as follows:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C#&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;private void Form1_Load(object sender, System.EventArgs e)&lt;br /&gt;{   &lt;br /&gt;       this.explorerBar1.Groups[0].ContainerControl.Controls.Add(this.treeView1);&lt;br /&gt;this.treeView1.Dock = DockStyle.Fill;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In VB&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _&lt;br /&gt;MyBase.Load&lt;br /&gt;       Me.ExplorerBar1.Groups(0).ContainerControl.Controls.Add(Me.TreeView1)&lt;br /&gt;       Me.TreeView1.Dock = DockStyle.Fill&lt;br /&gt;End Sub&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Note: At design time you can just drag the TreeView control into the ExplorerBarGroup directly&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5) Run the project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of           Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-8385274023503691485?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/8385274023503691485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/using-explorerbargroup-as-container.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/8385274023503691485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/8385274023503691485'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/using-explorerbargroup-as-container.html' title='Using a ExplorerBarGroup as a Container Control [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-8704257466261484036</id><published>2010-08-04T19:50:00.000+08:00</published><updated>2010-08-04T19:50:00.089+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus ExplorerBar'/><title type='text'>Show ExplorerBar Groups in several columns [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>This tutorial is intended to show you how to set ExplorerBar groups in several columns.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The steps followed to create this project are:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1) Create a new Visual Basic or C# project using "Windows Application" Template.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2)  Drag an ExplorerBar control from the toolbox into the Form designer.&lt;br /&gt;&lt;br /&gt;3) Select the ExplorerBar control and change the Columns property to 3 in the property&lt;br /&gt;window.&lt;br /&gt;&lt;br /&gt;4) Right click in the ExplorerBar control and select "ExplorerBar Designer" menu.  Add new&lt;br /&gt;groups and items to the ExplorerBar control in the Designer.&lt;br /&gt;&lt;br /&gt;Note: You can specify the column span of each group with the ColumnSpan property of the&lt;br /&gt;ExplorerBarGroup.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5) Run the project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of           Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-8704257466261484036?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/8704257466261484036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/show-explorerbar-groups-in-several.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/8704257466261484036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/8704257466261484036'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/show-explorerbar-groups-in-several.html' title='Show ExplorerBar Groups in several columns [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-6792372994987609220</id><published>2010-08-03T01:07:00.000+08:00</published><updated>2010-08-03T01:07:00.570+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='VB .Net sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus GridEX'/><title type='text'>Using GridEX in SelfReferencing HierarchicalMode [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>This tutorial is intended to show you how to use GridEX to display a self-referencing table in a tree fashion.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1)      Create a new Visual Basic or C# project using "Windows Application" Template.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2)      Add a new Data Source to the application:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Click in the "Add New Data Source..." menu under "Data" and follow the wizard to add "Messages" table from GridEXTutorialsData.mdb database.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In the tutorial we used Provider = "Microsoft Access Database File (OLE DB)" and Database file name = "C:\GridEXTutorialsData.mdb".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3)      Build the project to be able to see GridEXTutorialsDataDataSet and MessagesTableAdapter as components in the Toolbox.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4)      Drag from the tool box GridEXTutorialsDataDataSet component and MessagesTableAdapter component.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5)      Drag a GridEX control from the toolbox into the Form designer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6)      Select GridEX control in the Form and set the following properties in the properties window:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : text"&gt;&lt;br /&gt;           DataSource = GridEXTutorialsDataDataSet1&lt;br /&gt;&lt;br /&gt;           DataMember = Messages&lt;br /&gt;&lt;/pre&gt;            &lt;br /&gt;&lt;br /&gt;         &lt;br /&gt;&lt;br /&gt;7)      Right click in the GridEX control and select "Retrieve Structure" menu to create the columns matching those found in the DataSource.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;8)      Right click in the GridEX control and select "Designer" menu. In the Designer dialog, under RootTable node select Columns node and move the columns positions as you want using Move Up and Move Down toolbar buttons. In the sample, the following properties were changed in the columns:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Column&lt;br /&gt;Property&lt;br /&gt;New Value&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;MessageID&lt;br /&gt;Visible&lt;br /&gt;False&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ParentMessageID&lt;br /&gt;Visible&lt;br /&gt;False&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Subject&lt;br /&gt;ColumnType&lt;br /&gt;ImageAndText&lt;br /&gt;&lt;br /&gt;ImageIndex&lt;br /&gt;0*&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;*To be able to set ImageIndex, an ImageList was added to the form and assigned as the ImageList property of the GridEX control&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;** Selectable property is set as False in all columns.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;         &lt;br /&gt;&lt;br /&gt;9)      In the designer, now select SelfReferencingSettings node under RootTable and click in the "SelfReferencing Wizard" button that appears at the right side. The settings we used in the wizard are:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;HierarchicalMode&lt;br /&gt;SelfReferencing&lt;br /&gt;To present Tree-like hierarchies in a GridEX control.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ParentDataMember&lt;br /&gt;MessageID&lt;br /&gt;The field that identifies the parent column in the self-referencing relation.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ChildDataMember&lt;br /&gt;ParentMessageID&lt;br /&gt;The field that identifies the child column in the self-referencing relation.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ExpandColumn&lt;br /&gt;Subject&lt;br /&gt;The column in the table where the expand glyph will be displayed.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                                  &lt;br /&gt;&lt;br /&gt;10)   In the Load event of the Form fill the "Messages" table in the dataset with the following code:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           In VB .Net&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;                       MessagesTableAdapter1.Fill(GridEXTutorialsDataDataSet1.Messages)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           In C#.Net&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;                       messagesTableAdapter1.Fill(gridEXTutorialsDataDataSet1.Messages);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;11)   To create a new MessageDataRow in the application, MessageDialog form was added to the project. The form consists of 3 EditBox controls that let the user enter the Subject, the name of the user creating the message and a Message body. This form is called by the method CreateMessage in Form1 as follows:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;   private void CreateMessage(object parentId,string subject)&lt;br /&gt;&lt;br /&gt;   {&lt;br /&gt;&lt;br /&gt;       MessageDialog message = new MessageDialog();&lt;br /&gt;&lt;br /&gt;       message.Subject = subject;&lt;br /&gt;&lt;br /&gt;       if (message.ShowDialog() == DialogResult.OK)&lt;br /&gt;&lt;br /&gt;       {&lt;br /&gt;&lt;br /&gt;          //Add a new message row to the dataset&lt;br /&gt;&lt;br /&gt;          GridEXTutorialsDataDataSet.MessagesRow newMessage;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;          newMessage = gridEXTutorialsDataDataSet1.Messages.NewMessagesRow();&lt;br /&gt;&lt;br /&gt;          newMessage.Subject = message.Subject;&lt;br /&gt;&lt;br /&gt;          if (message.From.Length == 0)&lt;br /&gt;&lt;br /&gt;          {&lt;br /&gt;&lt;br /&gt;             newMessage.From = "ANONIMOUS";&lt;br /&gt;&lt;br /&gt;          }&lt;br /&gt;&lt;br /&gt;          else&lt;br /&gt;&lt;br /&gt;          {&lt;br /&gt;&lt;br /&gt;             newMessage.From = message.From;&lt;br /&gt;&lt;br /&gt;          }&lt;br /&gt;&lt;br /&gt;          newMessage.Message = message.Message;&lt;br /&gt;&lt;br /&gt;          newMessage.Date = DateTime.Now;&lt;br /&gt;&lt;br /&gt;          if (parentId != null)&lt;br /&gt;&lt;br /&gt;          {&lt;br /&gt;&lt;br /&gt;              newMessage.ParentMessageID = (int)parentId;&lt;br /&gt;&lt;br /&gt;          }&lt;br /&gt;&lt;br /&gt;          //Add the row to the dataset and it will be displayed&lt;br /&gt;&lt;br /&gt;          //automatically in the grid.&lt;br /&gt;&lt;br /&gt;          gridEXTutorialsDataDataSet1.Messages.Rows.Add(newMessage);&lt;br /&gt;&lt;br /&gt;          //Select the new row in grid&lt;br /&gt;&lt;br /&gt;          gridEX1.MoveTo(gridEX1.GetRow(newMessage));&lt;br /&gt;&lt;br /&gt;          gridEX1.Focus();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;12)   Finally, add 3 buttons to the form:  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : text"&gt;&lt;br /&gt;btnNewMessage    (Text = "New Message...")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    In the Click event, a new message with no parent is created as follows:&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;     CreateMessage(null, "New Message");&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;btnReplyMessage  (Text = "Reply Message...")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    In the Click event, a message with the selected row id as parent is created as follows:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;     if (gridEX1.CurrentRow != null &amp;amp;&amp;amp;&lt;br /&gt;&lt;br /&gt;         gridEX1.CurrentRow.RowType == RowType.Record)&lt;br /&gt;&lt;br /&gt;     {&lt;br /&gt;&lt;br /&gt;        CreateMessage(gridEX1.GetValue("MessageID"), "RE: " + gridEX1.GetValue("Subject"));&lt;br /&gt;&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     else&lt;br /&gt;&lt;br /&gt;     {&lt;br /&gt;&lt;br /&gt;         MessageBox.Show("Select the message to reply." , "",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;btnDelete              (Text = "Delete Message")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  In the Click event, the selected message is deleted as follows:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    if (gridEX1.CurrentRow != null &amp;amp;&amp;amp;&lt;br /&gt;&lt;br /&gt;        gridEX1.CurrentRow.RowType == RowType.Record)&lt;br /&gt;&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        gridEX1.Delete();&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    else&lt;br /&gt;&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        MessageBox.Show("Select the message you want to delete", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;13)   Other properties set in the GridEX control are:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : text"&gt;&lt;br /&gt;AllowEdit = False&lt;br /&gt;&lt;br /&gt;AllowDelete = True             To be able to use GridEX.Delete method&lt;br /&gt;&lt;br /&gt;HideSelection = Highlight     To see the selected row even when grid is not focused.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;14)   Press F5 and run the project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of          Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-6792372994987609220?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/6792372994987609220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/using-gridex-in-selfreferencing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/6792372994987609220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/6792372994987609220'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/using-gridex-in-selfreferencing.html' title='Using GridEX in SelfReferencing HierarchicalMode [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-8988684236937766272</id><published>2010-08-02T01:01:00.000+08:00</published><updated>2010-08-02T01:01:00.270+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='VB .Net sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus GridEX'/><title type='text'>Using GridEX Control in Unbound Mode [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>This tutorial is intended to show you how to use GridEX control in unbound mode using AddItem method to add rows to the control.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Follow these steps to create a simple form using a GridEX control to display unbound items.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1)      Create a new Visual Basic or C# project using "Windows Application" Template.&lt;br /&gt;&lt;br /&gt;2)      Open Form1 that was created when the project was created.&lt;br /&gt;&lt;br /&gt;3)      Drop a GridEX control into Form1.&lt;br /&gt;&lt;br /&gt;4)      Set BoundMode property in GridEX equal to BoundMode.Unbound&lt;br /&gt;&lt;br /&gt;5)      Open GridEX Designer. Click in the "Create Root Table" button.&lt;br /&gt;&lt;br /&gt;6)      Add columns to the RootTable.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To create the columns, follow these steps:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   6.1 - In the GridEX Designer, select Columns collection below the RootTable node and click in the Add button.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   6.2 - Select "Unbound Column" and change the Key of the new column to "Name". Click Next, then Click Finish.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   6.3 - Click Add Button Again. In the "Add Column Wizard", Select "Unbound Column" and change the key of the new Column to "Date". Click Next.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   6.4 - Change EditType property to CalendarCombo. Click Finish.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   6.5 - Once the "Date" column is add, select the column in the designer and change the following properties:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : text"&gt;&lt;br /&gt;  DataTypeCode = DateTime&lt;br /&gt;&lt;br /&gt;  FormatString = d&lt;br /&gt;&lt;br /&gt;  DefaultGroupInterval = Date&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7)      Add a button to the form. Set its Text = "Add Item". In the click event of the button, use the following code:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB .NET:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C# .NET:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;    //Add a new row at the end of the list specifying its cell values.&lt;br /&gt;&lt;br /&gt;    GridEXRow newRow = this.gridEX1.AddItem();&lt;br /&gt;&lt;br /&gt;    //To edit values in cells of a row, call BeginEdit/EndEdit methods&lt;br /&gt;&lt;br /&gt;    newRow.BeginEdit();&lt;br /&gt;&lt;br /&gt;    newRow.Cells["Name"].Value = "InsertItem";&lt;br /&gt;&lt;br /&gt;    newRow.Cells["Date"].Value = DateTime.Now;&lt;br /&gt;&lt;br /&gt;    newRow.EndEdit();&lt;br /&gt;&lt;br /&gt;    //Move to the new item&lt;br /&gt;&lt;br /&gt;   this.gridEX1.MoveTo(newRow);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;8)      Add another button. Set its Text = "Insert Item". In the click event of the button, use the following code:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB .NET:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C# .NET:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;    //Insert the item at the beginning of the list.&lt;br /&gt;&lt;br /&gt;    GridEXRow newRow = this.gridEX1.AddItem(0);&lt;br /&gt;&lt;br /&gt;    //To edit values in cells of a row, call BeginEdit/EndEdit methods&lt;br /&gt;&lt;br /&gt;    newRow.BeginEdit();&lt;br /&gt;&lt;br /&gt;    newRow.Cells["Name"].Value = "InsertItem";&lt;br /&gt;&lt;br /&gt;    newRow.Cells["Date"].Value = DateTime.Now;&lt;br /&gt;&lt;br /&gt;    newRow.EndEdit();&lt;br /&gt;&lt;br /&gt;    //Move to the new item&lt;br /&gt;&lt;br /&gt;    gridEX1.MoveTo(newRow);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;9)      Add another button. Set its Text = "Remove Selected Item". In the click event of the button, use the following code:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB .NET:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C# .NET:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;     //Get current row&lt;br /&gt;&lt;br /&gt;     GridEXRow item = gridEX1.CurrentRow;&lt;br /&gt;&lt;br /&gt;     If (item != null &amp;amp;&amp;amp; item.RowType == RowType.Record)&lt;br /&gt;&lt;br /&gt;     {&lt;br /&gt;         //Delete the row.&lt;br /&gt;&lt;br /&gt;         item.Delete();&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     else&lt;br /&gt;&lt;br /&gt;     {&lt;br /&gt;         MessageBox.Show("Select an item to delete.");&lt;br /&gt;     }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;10)   Add another button. Set its Text = "Clear Items". In the click event of the button, use the following code:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB .NET:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C# .NET:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;     //Clear all items in GridEX&lt;br /&gt;&lt;br /&gt;     this.gridEX1.ClearItems();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;11)   In the Load event of the form, add some rows to the grid.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB .NET:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C# .NET:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;     this.gridEX1.AddItem("Item 1", DateTime.Now);&lt;br /&gt;&lt;br /&gt;     this.gridEX1.AddItem("Item 2", DateTime.Now);&lt;br /&gt;&lt;br /&gt;     this.gridEX1.AddItem("Item 3", DateTime.Now);&lt;br /&gt;&lt;br /&gt;     this.gridEX1.AddItem("Item 4", DateTime.Now);&lt;br /&gt;&lt;br /&gt;     this.gridEX1.AddItem("Item 5", DateTime.Now);&lt;br /&gt;&lt;br /&gt;     this.gridEX1.Row = 0;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;12)   Press F5 and run the project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of          Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-8988684236937766272?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/8988684236937766272/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/using-gridex-control-in-unbound-mode.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/8988684236937766272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/8988684236937766272'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/using-gridex-control-in-unbound-mode.html' title='Using GridEX Control in Unbound Mode [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-5393628162785498290</id><published>2010-08-01T01:18:00.000+08:00</published><updated>2010-08-01T01:18:00.236+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='VB .Net sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus GridEX'/><title type='text'>Using GridEX Control as a Checked List [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>This tutorial is intended to show you how to use GridEX control as a checked list control with a column acting as selector and the use of the GetCheckedRows method to retrieve an array containing the GridEXRow objects that are checked.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Follow these steps to create a simple form using a GridEX control as a checked list.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1)      Create a new Visual Basic or C# project using "Windows Application" Template.&lt;br /&gt;&lt;br /&gt;2)      Drop a GridEX control into Form1.&lt;br /&gt;&lt;br /&gt;3)      In the GridEX Designer dialog, select the GridEX control node and click in the "Create Root Table" button.&lt;br /&gt;&lt;br /&gt;4)      Select the Columns node under RootTable node and start the columns the control will present. In this tutorial we created 4 columns. The columns we created and the properties are listed below:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4.1) From:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Add Column Wizard:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : text"&gt;&lt;br /&gt;           Step 1:&lt;br /&gt;&lt;br /&gt;                       "Selector Column"&lt;br /&gt;&lt;br /&gt;                       UseHeaderSelector = True&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;                        &lt;br /&gt;&lt;br /&gt;4.2) Icon:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : text"&gt;&lt;br /&gt;           Add Column Wizard:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  Step 1:&lt;br /&gt;&lt;br /&gt;   "Unbound Column"&lt;br /&gt;&lt;br /&gt;   BoundMode: UnboundFetch&lt;br /&gt;&lt;br /&gt;   Key = "Icon"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  Step 2:&lt;br /&gt;&lt;br /&gt;   Caption  = ""&lt;br /&gt;&lt;br /&gt;   ColumnType = Image&lt;br /&gt;&lt;br /&gt;   EditType = NoEdit&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  After finishing the wizard, set these properties:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   AllowSize = False&lt;br /&gt;&lt;br /&gt;   ImageIndex = 0&lt;br /&gt;&lt;br /&gt;   Selectable = False&lt;br /&gt;&lt;br /&gt;   Width = 20&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4.3) From:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : text"&gt;&lt;br /&gt;  Add Column Wizard:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;             Step 1:&lt;br /&gt;&lt;br /&gt;    "Bound Column"&lt;br /&gt;&lt;br /&gt;    DataMember = "From"&lt;br /&gt;&lt;br /&gt;                     &lt;br /&gt;&lt;br /&gt;                       Step 2:&lt;br /&gt;&lt;br /&gt;    Caption  = "From"&lt;br /&gt;&lt;br /&gt;    ColumnType = Text&lt;br /&gt;&lt;br /&gt;    EditType = NoEdit&lt;br /&gt;&lt;br /&gt;                                 &lt;br /&gt;&lt;br /&gt;                       After finishing the wizard, set these properties:&lt;br /&gt;                  &lt;br /&gt;                        Selectable = False&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;4.4) Subject:&lt;br /&gt;&lt;pre class="brush : text"&gt;&lt;br /&gt;  Add Column Wizard:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;             Step 1:&lt;br /&gt;&lt;br /&gt;    "Bound Column"&lt;br /&gt;&lt;br /&gt;    DataMember = "Subject"&lt;br /&gt;&lt;br /&gt;                     &lt;br /&gt;&lt;br /&gt;                       Step 2:&lt;br /&gt;&lt;br /&gt;    Caption  = "Subject"&lt;br /&gt;&lt;br /&gt;    ColumnType = Text&lt;br /&gt;&lt;br /&gt;    EditType = NoEdit&lt;br /&gt;&lt;br /&gt;                                 &lt;br /&gt;&lt;br /&gt;                       After finishing the wizard, set these properties:&lt;br /&gt;&lt;br /&gt;                        Selectable = False&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4.5) Date:&lt;br /&gt;&lt;pre class="brush : text"&gt;&lt;br /&gt;  Add Column Wizard:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;             Step 1:&lt;br /&gt;&lt;br /&gt;    "Bound Column"&lt;br /&gt;&lt;br /&gt;    DataMember = "Date"&lt;br /&gt;&lt;br /&gt;                     &lt;br /&gt;&lt;br /&gt;                       Step 2:&lt;br /&gt;&lt;br /&gt;    Caption  = "Date"&lt;br /&gt;&lt;br /&gt;    ColumnType = Text&lt;br /&gt;&lt;br /&gt;    EditType = NoEdit&lt;br /&gt;&lt;br /&gt;                                 &lt;br /&gt;&lt;br /&gt;                       After finishing the wizard, set these properties:&lt;br /&gt;&lt;br /&gt;          Selectable = False&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5)      In the Load event of the Form, Call the BindGridEXControl procedure that creates the dataset and binds the control to it:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB .Net:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;   Private Sub BindGridEXControl()&lt;br /&gt;&lt;br /&gt;       Dim ds As New DataSet()&lt;br /&gt;&lt;br /&gt;       Dim table As New DataTable("Messages")&lt;br /&gt;&lt;br /&gt;       table.Columns.Add(New DataColumn("From", Type.GetType("System.String")))&lt;br /&gt;&lt;br /&gt;       table.Columns.Add(New DataColumn("Subject", Type.GetType("System.String")))&lt;br /&gt;&lt;br /&gt;       table.Columns.Add(New DataColumn("Date", Type.GetType("System.DateTime")))&lt;br /&gt;&lt;br /&gt;       ds.Tables.Add(table)&lt;br /&gt;&lt;br /&gt;       table.Rows.Add(New Object() {"john@mail.com", "Greetings", New DateTime(2002, 2, 5)})&lt;br /&gt;&lt;br /&gt;       table.Rows.Add(New Object() {"jenny@mail.com", "Invitation", New DateTime(2002, 2, 7)})&lt;br /&gt;&lt;br /&gt;       table.Rows.Add(New Object() {"chris@mail.com", "A question", New DateTime(2002, 2, 10)})&lt;br /&gt;&lt;br /&gt;       table.Rows.Add(New Object() {"ana@mail.com",  "How are you?", New DateTime(2002, 2, 12)})&lt;br /&gt;&lt;br /&gt;       table.Rows.Add(New Object() {"katherine@mail.com", "Greetings", New DateTime(2002, 2, 14)})&lt;br /&gt;&lt;br /&gt;       table.Rows.Add(New Object() {"bill@mail.com", "Hi", New DateTime(2002, 2, 18)})&lt;br /&gt;&lt;br /&gt;       table.Rows.Add(New Object() {"ronald@mail.com", "No Subject", New DateTime(2002, 2, 20)})&lt;br /&gt;&lt;br /&gt;       Me.GridEX1.SetDataBinding(ds, "Messages")&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C# .Net:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;private void BindGridEXControl()&lt;br /&gt;{&lt;br /&gt; DataSet ds = new DataSet();&lt;br /&gt;&lt;br /&gt; DataTable table = new DataTable("Messages");&lt;br /&gt;&lt;br /&gt; table.Columns.Add(new DataColumn("From", typeof(string)));&lt;br /&gt;&lt;br /&gt; table.Columns.Add(new DataColumn("Subject", typeof(string)));&lt;br /&gt;&lt;br /&gt; table.Columns.Add(new DataColumn("Date", typeof(DateTime)));&lt;br /&gt;&lt;br /&gt; ds.Tables.Add(table);&lt;br /&gt;&lt;br /&gt; table.Rows.Add(new Object[] {"john@mail.com", Greetings", new DateTime(2002, 2, 5)});&lt;br /&gt;&lt;br /&gt; table.Rows.Add(new Object[] {"jenny@mail.com", "Invitation", new DateTime(2002, 2, 7)});&lt;br /&gt;&lt;br /&gt; table.Rows.Add(new Object[] {"chris@mail.com", "A question", new DateTime(2002, 2, 10)});&lt;br /&gt;&lt;br /&gt; table.Rows.Add(new Object[] {"ana@mail.com", "How are you?", new DateTime(2002, 2, 12)});&lt;br /&gt;&lt;br /&gt; table.Rows.Add(new Object[] {"katherine@mail.com", "Greetings", new DateTime(2002, 2, 14)});&lt;br /&gt;&lt;br /&gt; table.Rows.Add(new Object[] {"bill@mail.com", "Hi", new DateTime(2002, 2, 18)});&lt;br /&gt;&lt;br /&gt; table.Rows.Add(new Object[] {"ronald@mail.com", "No Subject", new DateTime(2002, 2, 20)});&lt;br /&gt;&lt;br /&gt;     this.GridEX1.SetDataBinding(ds, "Messages");                &lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6)      Add a button to the form and set its Text property to "Delete". In the Click event of the delete button, get an array containing the checked rows and delete them from its table.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB .Net:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;   Dim checkedRows() As Janus.Windows.GridEX.GridEXRow&lt;br /&gt;&lt;br /&gt;   'get an array with all the rows that the user checked.&lt;br /&gt;&lt;br /&gt;   checkedRows = Me.GridEX1.GetCheckedRows()&lt;br /&gt;&lt;br /&gt;   'if the user didn't check any row, you will get an empty array      &lt;br /&gt;&lt;br /&gt;   If checkedRows.Length = 0 Then&lt;br /&gt;&lt;br /&gt;       MessageBox.Show("Select at least 1 message to be deleted.")&lt;br /&gt;&lt;br /&gt;   Else&lt;br /&gt;&lt;br /&gt;       Dim message As String&lt;br /&gt;&lt;br /&gt;       message = String.Format("You are about to delete {0} message(s)." _&lt;br /&gt;&lt;br /&gt;                   &amp;amp; vbCrLf &amp;amp; "Do you want to continue?", checkedRows.Length)&lt;br /&gt;&lt;br /&gt;       If MessageBox.Show(message, "Janus Tutorial", MessageBoxButtons.YesNo) = DialogResult.Yes Then&lt;br /&gt;&lt;br /&gt;           Dim row As Janus.Windows.GridEX.GridEXRow&lt;br /&gt;&lt;br /&gt;           For Each row In checkedRows&lt;br /&gt;               CType(row.DataRow, DataRowView).Delete()&lt;br /&gt;           Next&lt;br /&gt;&lt;br /&gt;       End If&lt;br /&gt;&lt;br /&gt;   End If&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   In C# .Net:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;     Janus.Windows.GridEX.GridEXRow[] checkedRows;&lt;br /&gt;&lt;br /&gt;           //get an array with all the rows that the user checked.&lt;br /&gt;&lt;br /&gt;           checkedRows = this.GridEX1.GetCheckedRows();&lt;br /&gt;&lt;br /&gt;           //if the user didn't check any row, you will get an empty array&lt;br /&gt;&lt;br /&gt;           if(checkedRows.Length==0)&lt;br /&gt;&lt;br /&gt;           {&lt;br /&gt;  MessageBox.Show("Select at least 1 message to be deleted.");&lt;br /&gt;           }&lt;br /&gt;&lt;br /&gt;           else&lt;br /&gt;&lt;br /&gt;           {&lt;br /&gt;  string message;&lt;br /&gt;&lt;br /&gt;  message = String.Format("You are about to delete {0} message(s)." +&lt;br /&gt;&lt;br /&gt;     "\n\rDo you want to continue?", checkedRows.Length);&lt;br /&gt;&lt;br /&gt;  if(MessageBox.Show(message, "Janus Tutorial", MessageBoxButtons.YesNo) == DialogResult.Yes)&lt;br /&gt;&lt;br /&gt;  {&lt;br /&gt;&lt;br /&gt;      foreach(Janus.Windows.GridEX.GridEXRow row in checkedRows)&lt;br /&gt;&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;   ((DataRowView)row.DataRow).Delete();&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;           }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7)      Press F5 and run the project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of          Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-5393628162785498290?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/5393628162785498290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/08/using-gridex-control-as-checked-list.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/5393628162785498290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/5393628162785498290'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/08/using-gridex-control-as-checked-list.html' title='Using GridEX Control as a Checked List [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-1829852409121160360</id><published>2010-07-31T01:21:00.000+08:00</published><updated>2010-07-31T01:21:00.262+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus GridEX'/><title type='text'>Using ColumnSets [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>This tutorial is intended to show you how to use column sets to have more that one line of columns to present a record.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1 - Create a new Visual Basic or C# project using "Windows Application" Template&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2 - Add a GridEX control to Form1.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3 - Add Employees table from JSNorthwind database as a Data Source for the application. After adding the table, build the application to be able to see EmployeesTableAdapter and JSNorthwindDataSet components in the tool box.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4 - From the "Data Sources" window in the Application, drag Employees table and drop it into the new GridEX control. JSNorthwindDataSet, EmployeesTableAdapter and EmployeesBindingSource components will be created.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5 - In the Designer window of the GridEX control click on the "Retrieve Structure" button to let GridEX control create the root table and the columns matching those found in the data source.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6 - Select the ColumnSets node under the RootTable node in the designer. Once you have selected the ColumnSets collection, click in the "ColumnSet Designer.." button that appears at the right of the designer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;9 - The first thing you need to do when designing a column set layout is to define how many lines of columns a record will have. To do this, set the ColumnSetRowCount property in the table. In this tutorial, the ColumnSetRowCount property was set to 3.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;10 - In the ColumnSets Designer, add a ColumnSet clicking in the "Add ColumnSet" button. Once you click in the button an empty column set will appear in the "ColumnSet Layout" panel. In the ColumnSet, set the number of columns you want to have in it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;11 - From the list of columns in the left side of the designer, drag any column and drop it into the one of the empty slots of the ColumnSet. If you want a column to span 2 or more columns, set the ColSpan property of the column. If you want to a column to span 2 or more rows, set the RowSpan property of the column. ColSpan and RowSpan properties can be set only when a column has been added to a ColumnSet.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;12 - Keep creating ColumnSets and filling them with columns by dragging a column from the list and dropping it into a columnset cell until you have defined the ColumnSet layout you want.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of          Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-1829852409121160360?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/1829852409121160360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/07/using-columnsets-janus-gridex-winforms.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/1829852409121160360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/1829852409121160360'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/07/using-columnsets-janus-gridex-winforms.html' title='Using ColumnSets [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-6252410996716738333</id><published>2010-07-30T01:09:00.000+08:00</published><updated>2010-07-30T01:09:00.130+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='VB .Net sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus GridEX'/><title type='text'>Using Unbound Columns [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>This tutorial is intended to show how to use unbound columns in a bound GridEX control.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Follow these steps to create a simple form using a GridEX control to display records from a table in a database with one unbound column whose values are set in the LoadingRow event.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1 - Create a new Visual Basic or C# project using "Windows Application" Template&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2 - Add "Order Details" Table from JSNorthwind database as a Data Source for the application. After adding the table, build the application to be able to see Order_DetailsTableAdapter and JSNorthwindDataSet components in the tool box.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3 - Add a GridEX control to Form1.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4 -  From the "Data Sources" window in the Application, drag Order_Details table and drop it into the new GridEX control. JSNorthwindDataSet, Order_DetailsTableAdapter and Orders_DetailsBindingSource components will be created.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5 - In the Designer window of the GridEX control click on the "Retrieve Structure" button to let GridEX control create the root table and the columns matching those found in the data source.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6 - Once the base structure is created, modify the layout as you want, changing the column positions, column widths.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7 - To create an unbound column, follow these steps:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           8.1 - In the GridEX Designer, select Columns collection below the RootTable node and click in the Add button.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           8.2 - Select "Unbound Column" and change the Key of the new column to "Total". Click Next.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           8.3 - Select NoEdit in the EditType Combo. Click Finish.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           8.4 - Finally, in the FormatString property of the column, set "c" to see the values of the columns formatted as currency values.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;9 - The cells under an unbound column are empty by default. To set the value of a cell that belongs to an unbound column, the developer must handle the LoadingRow event and set the value in the GridEXCell object like it is done in the following code:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           In VB.Net&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;                       If e.Row.RowType = RowType.Record Then&lt;br /&gt;&lt;br /&gt;                                   e.Row.Cells("Total").Value = totalValue&lt;br /&gt;&lt;br /&gt;                       End If&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           In C#.Net&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;                       if(e.Row.RowType==RowType.Record)&lt;br /&gt;&lt;br /&gt;                       {&lt;br /&gt;&lt;br /&gt;                                   e.Row.Cells["Total"].Value = totalValue;&lt;br /&gt;&lt;br /&gt;                       }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;10 - Press F5 and run the project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of          Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-6252410996716738333?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/6252410996716738333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/07/using-unbound-columns-janus-gridex.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/6252410996716738333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/6252410996716738333'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/07/using-unbound-columns-janus-gridex.html' title='Using Unbound Columns [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-1307121930470028197</id><published>2010-07-29T01:07:00.000+08:00</published><updated>2010-07-29T01:07:00.584+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='VB .Net sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus GridEX'/><title type='text'>Using Image Columns [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>This tutorial is intended to show you how to use image columns in a bound GridEX control.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In this tutorial, there are three column showing images. The first image column shows a default image for every cell in the column. In the second image column, the image is set in code depending on values of other cells in the same row and in the third image column the image displayed in the cell is set in a ValueList so it is dependant on the value of the cell.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1 - Create a new Visual Basic or C# project using "Windows Application" Template&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2 - Add Products and Categories Tables from JSNorthwind database as a Data Source for the application. After adding the Tables, build the application to be able to see ProductsTableAdapter and CategoriesTableAdapter components in the tool box.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3 - Add a GridEX control to Form1.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4 -  From the "Data Sources" window in the Application, drag Products table and drop it into the new GridEX control. JSNorthwindDataSet, ProductsTableAdapter and ProducctsBindingSource components will be created.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5 - In the Designer window of the GridEX control click on the "Retrieve Structure" button to let GridEX control create the root table and the columns matching those found in the data source.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6 - Once the base structure is created, modify the layout as you want, changing the column positions, column widths.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7 - Add an ImageList component to the form and assign it to the GridEX control setting its ExternalImageList property as the ImageList you added to the form. Add the Images you are going to use in the GridEX control. In this tutorial, we added 8 images corresponding to each product category, one image that represents the product and two other images: one to be displayed in products that are on sale and one to displayed in products that are discontinued.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;8 - To create a simple image column follow these steps:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           8.1 - In the GridEX Designer, select Columns collection below the RootTable node and click in the Add button.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           8.2 - Select "Unbound Column" and change the Key of the new column to "Icon". Click Next.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           8.3 - Clear the default Caption in the wizard and select Image in the ColumnType combo. Click Finish.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           8.4 - Finally, in the ImageIndex or ImageKey property of the column, select the image you want to show in all the cells below that column.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;9 - To create an image column that displays an image depending on the value of other cells in the row follow these steps:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           9.1 - In the GridEX Designer, select Columns collection below the RootTable node and click in the Add button.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           9.2 - Select "Unbound Column" and Change the Key of the new column to "StatusIcon". Click Next.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;9.3 -Clear the default Caption in the wizard and set Image in the ColumnType combo. Click Finish.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           9.4 - Finally, in the FormattingRow event of the control, write the code that sets the image index for each cell below that column:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB .Net:&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;  Private Sub GridEX1_FormattingRow(ByVal sender As System.Object, _&lt;br /&gt;&lt;br /&gt;       ByVal e As RowLoadEventArgs) Handles GridEX1.FormattingRow&lt;br /&gt;&lt;br /&gt;       If e.Row.RowType = RowType.Record Then&lt;br /&gt;&lt;br /&gt;           If CType(e.Row.Cells("Discontinued").Value, Boolean) Then&lt;br /&gt;&lt;br /&gt;               e.Row.Cells("StatusIcon").ImageKey = "discontinued"&lt;br /&gt;&lt;br /&gt;           ElseIf CType(e.Row.Cells("OnSale").Value, Boolean) Then&lt;br /&gt;&lt;br /&gt;               e.Row.Cells("StatusIcon").ImageKey = "onsale"&lt;br /&gt;&lt;br /&gt;           End If&lt;br /&gt;&lt;br /&gt;       End If&lt;br /&gt;&lt;br /&gt;   End Sub&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C# .Net:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;   private void GridEX1_FormattingRow(object sender, RowLoadEventArgs e)&lt;br /&gt;&lt;br /&gt;   {&lt;br /&gt;&lt;br /&gt;       if (e.Row.RowType == RowType.Record)&lt;br /&gt;&lt;br /&gt;       {&lt;br /&gt;&lt;br /&gt;           if ((bool)e.Row.Cells["Discontinued"].Value)&lt;br /&gt;&lt;br /&gt;           {&lt;br /&gt;&lt;br /&gt;               e.Row.Cells["StatusIcon"].ImageKey = "discontinued";&lt;br /&gt;&lt;br /&gt;           }&lt;br /&gt;&lt;br /&gt;           else if ((bool)e.Row.Cells["OnSale"].Value)&lt;br /&gt;&lt;br /&gt;           {&lt;br /&gt;&lt;br /&gt;               e.Row.Cells["StatusIcon"].ImageKey = "onsale";&lt;br /&gt;&lt;br /&gt;           }&lt;br /&gt;&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;10 - To create an image column that displays an image assigned in a ValueList, follow these steps:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           10.1 - In the GridEX Designer, select Columns collection below the RootTable node and, from the list of columns select CategoryID column.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           10.2 -Set the ColumnType property of the column to ColumnType.ImageAndText and its EditType property to EditType.DropDownList&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           10.3 - Finally, in the Load event of the form, fill the ValueList with the categories available and assign one image to each item in the value list:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB .Net:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt; Dim categories As GridEXColumn&lt;br /&gt;&lt;br /&gt;       categories = GridEX1.RootTable.Columns("CategoryID")&lt;br /&gt;&lt;br /&gt;       categories.HasValueList = True&lt;br /&gt;&lt;br /&gt;       categories.ColumnType = ColumnType.ImageAndText&lt;br /&gt;&lt;br /&gt;       categories.EditType = EditType.DropDownList&lt;br /&gt;&lt;br /&gt;       Dim ValueList As GridEXValueListItemCollection&lt;br /&gt;&lt;br /&gt;       ValueList = categories.ValueList&lt;br /&gt;&lt;br /&gt;       Dim row As JSNorthWindDataSet.CategoriesRow&lt;br /&gt;&lt;br /&gt;       For Each row In JSNorthWindDataSet.Categories.Rows&lt;br /&gt;&lt;br /&gt;           Dim item As GridEXValueListItem&lt;br /&gt;&lt;br /&gt;           item = New GridEXValueListItem(row.CategoryID, _&lt;br /&gt;&lt;br /&gt;                                       row.CategoryName)&lt;br /&gt;&lt;br /&gt;           'set image Key for items&lt;br /&gt;&lt;br /&gt;           item.ImageKey = "Cat(" &amp;amp; row.CategoryID &amp;amp; ")"&lt;br /&gt;&lt;br /&gt;           ValueList.Add(item)&lt;br /&gt;&lt;br /&gt;       Next&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In C# .Net:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;   GridEXColumn categories = this.gridEX1.RootTable.Columns["CategoryID"];&lt;br /&gt;&lt;br /&gt;   //To be able to get the ValueList from a column, its&lt;br /&gt;&lt;br /&gt;   //HasValueList property must be true&lt;br /&gt;&lt;br /&gt;   categories.HasValueList = true;&lt;br /&gt;&lt;br /&gt;   categories.ColumnType = ColumnType.ImageAndText;&lt;br /&gt;&lt;br /&gt;   categories.EditType = EditType.DropDownList;&lt;br /&gt;&lt;br /&gt;   GridEXValueListItemCollection ValueList = categories.ValueList;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   //Categories table in the dataset was added as&lt;br /&gt;&lt;br /&gt;   //the products table was added before&lt;br /&gt;&lt;br /&gt;   foreach(NorthWind.CategoriesRow row in this.northWind1.Categories.Rows)&lt;br /&gt;&lt;br /&gt;   {&lt;br /&gt;&lt;br /&gt;       GridEXValueListItem item;&lt;br /&gt;&lt;br /&gt;       item=new GridEXValueListItem(row.CategoryID,row.CategoryName);&lt;br /&gt;&lt;br /&gt;       if(row.CategoryID&lt;=8)              {                 //set image index for items 1 - 8                 //images start from 0 in the image list                 item.ImageIndex = row.CategoryID - 1;              }              ValueList.Add(item);      } &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;15 - Press F5 and run the project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of          Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-1307121930470028197?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/1307121930470028197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/07/using-image-columns-janus-gridex.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/1307121930470028197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/1307121930470028197'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/07/using-image-columns-janus-gridex.html' title='Using Image Columns [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-4455570153308673511</id><published>2010-07-28T01:03:00.000+08:00</published><updated>2010-07-28T01:03:00.260+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='VB .Net sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus GridEX'/><title type='text'>Binding GridEX Control to an IList [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>This tutorial is intended to show you how to bind GridEX control to a collection in your project that supports IList interface.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Note: When binding to an IList, a data bound control can not add records to the list. To let the users add records in a GridEX control bound to a collection you should implement the IBindingList interface in your collection or handle the GetNewRow event to do create the new object in code.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Follow these steps to create a simple form using a GridEX control to display an IList.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1)      Create a new Visual Basic or C# project using "Windows Application" Template.&lt;br /&gt;&lt;br /&gt;2)      Add a new class into the project and name it Person.&lt;br /&gt;&lt;br /&gt;3)      Add the following properties to the Person class: Title, Name, LastName and Suffix.&lt;br /&gt;&lt;br /&gt;4)      To create the collection or person objects, add a new class to the project and name it PersonCollection.&lt;br /&gt;&lt;br /&gt;5)      Inherit the PersonCollection class from System.Collections.CollectionBase class. CollectionBase class implements IList interface.&lt;br /&gt;&lt;br /&gt;6)      Create the indexer method as well as the Add and Remove methods in the PersonCollection class.&lt;br /&gt;&lt;br /&gt;7)      Open Form1 that was created when the project was created.&lt;br /&gt;&lt;br /&gt;8)      Drop a GridEX control into Form1.&lt;br /&gt;&lt;br /&gt;9)      Add a button, set the Text property of this button to "Fill Collection"&lt;br /&gt;&lt;br /&gt;10)   In the Click event of Button1 create a new instance of the PersonCollection class add a few Person objects to the collection and bind it to the GridEX control as follows:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB .NET:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;       'Creating the collection&lt;br /&gt;&lt;br /&gt;       people = New PersonCollection()&lt;br /&gt;&lt;br /&gt;       people.Add(New Person("Mr.", "John", "Smith", "Sr."))&lt;br /&gt;&lt;br /&gt;       people.Add(New Person("Mrs.", "Mary", "Jones", ""))&lt;br /&gt;&lt;br /&gt;       people.Add(New Person("Miss", "Sally", "Porter", ""))&lt;br /&gt;&lt;br /&gt;       people.Add(New Person("Mr.", "Joseph", "Gold", "Jr."))&lt;br /&gt;&lt;br /&gt;       people.Add(New Person("Dr.", "Ian", "Goldsmith", ""))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;       'Binding GridEX to the people collection&lt;br /&gt;&lt;br /&gt;       gridEX1.SetDataBinding(people, "")&lt;br /&gt;&lt;br /&gt;       'Forcing GridEX control to generate the columns needed&lt;br /&gt;&lt;br /&gt;       'to display all the properties in the Person class.&lt;br /&gt;&lt;br /&gt;       gridEX1.RetrieveStructure()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C# .NET:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;           //Creating the collection&lt;br /&gt;&lt;br /&gt;           people = new PersonCollection();&lt;br /&gt;&lt;br /&gt;           people.Add(new Person("Mr.","John","Smith","Sr."));&lt;br /&gt;&lt;br /&gt;           people.Add(new Person("Mrs.","Mary","Jones",""));&lt;br /&gt;&lt;br /&gt;           people.Add(new Person("Miss","Sally","Porter",""));&lt;br /&gt;&lt;br /&gt;           people.Add(new Person("Mr.","Joseph","Gold","Jr."));&lt;br /&gt;&lt;br /&gt;           people.Add(new Person("Dr.","Ian","Goldsmith",""));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           //Binding GridEX to the people collection&lt;br /&gt;&lt;br /&gt;           gridEX1.SetDataBinding(people,"");&lt;br /&gt;&lt;br /&gt;           //Forcing GridEX control to generate the columns needed&lt;br /&gt;&lt;br /&gt;           //to display all the properties in the Person class.&lt;br /&gt;&lt;br /&gt;         gridEX1.RetrieveStructure();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;11)   To allow add and remove rows from the collection set the following properties:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : text"&gt;&lt;br /&gt;           AllowAddNew = Janus.Windows.GridEX.TriState.True&lt;br /&gt;&lt;br /&gt;           AllowDelete = Janus.Windows.GridEX.TriState.True&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;12)   Since IList doesn't implement an AddNew method to allow the CurrencyManager to add new records you will get an exception when the user tries to add a record in the GridEX control. If you know how to create a new object of the same type the list holds, use the GetNewRow event. This event is raised to let you create a new instance of an object presented by the GridEX control.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB .NET:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;Private Sub gridEX1_GetNewRow(ByVal sender As Object,ByVal e As GetNewRowEventArgs) Handles gridEX1.GetNewRow&lt;br /&gt;&lt;br /&gt; e.NewRow = New Person()&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C# .NET:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;private void gridEX1_GetNewRow(object sender, GetNewRowEventArgs e)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt; e.NewRow = new Person();&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;13)   Press F5 and run the project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of          Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-4455570153308673511?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/4455570153308673511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/07/binding-gridex-control-to-ilist-janus.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/4455570153308673511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/4455570153308673511'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/07/binding-gridex-control-to-ilist-janus.html' title='Binding GridEX Control to an IList [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-4265612323342475530</id><published>2010-07-27T01:58:00.000+08:00</published><updated>2010-07-27T01:58:00.189+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='VB .Net sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus GridEX'/><title type='text'>Using Custom Edit Events [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>Steps to reproduce this sample:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1)      Create a new "Windows Application" Project.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2)      Add Customers Table from JSNorthwind database as a Data Source for the application.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3)      Add GridEX Control to a tab in the Toolbox window by right clicking in the Toolbox window and choosing "Customize Toolbox..." menu. When the dialog appears, select ".Net Framework Components" tab, check "GridEX" control in the list and click OK.&lt;br /&gt;Note: If GridEX control doesn't appear as an option in the list, click the Browse button and open Janus.Windows.GridEX.dll.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4)      Drag a GridEX control from the toolbox into the Form designer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5)   From the "Data Sources" window in the Application, drag Customers and drop it into the new GridEX control. JSNorthwindDataSet, CustomersTableAdapter and CustomersBindingSource components will be created.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5)      Right click in the GridEX control and select "Retrieve Structure" menu. This action will force the control to read the DataSource structure and create the tables and columns needed to show all the fields in the tables.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6)      Right click in the GridEX control again and select "GridEX Designer" menu. In the GridEX designer dialog, select "Columns" under GridEX/RootTable node.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7)      In the right pane, select "CustomerID" column and change the EditType property to Custom. Setting this property, you will be able to get the InitCustomEdit event every time the user tries to edit a cell in this column.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;8)      Drop a TextBox control into the Form and change its name to txtCustom. This text box will be the one used as the edit window in the CustomerID column.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;9) In the InitCustomEdit event of the GridEX control, set the Text property of the TextBox acting as the custom edit control and set the EditControl property of the InitCustomEditEventArgs parameter to the txtCustom control.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB .NET&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;       'For the sample, we will use BackColor Yellow in the TextBox&lt;br /&gt;&lt;br /&gt;       'if the cell is in a new row&lt;br /&gt;&lt;br /&gt;       If e.Row.RowType = RowType.NewRecord Then&lt;br /&gt;&lt;br /&gt;           txtCustom.BackColor = Color.Yellow&lt;br /&gt;&lt;br /&gt;       Else&lt;br /&gt;&lt;br /&gt;           txtCustom.BackColor = e.FormatStyle.BackColor&lt;br /&gt;&lt;br /&gt;       End If&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;       'When the user start edition by pressing a key,&lt;br /&gt;&lt;br /&gt;       'the EditChar property holds the char that&lt;br /&gt;&lt;br /&gt;       'started the edition. If edition was started&lt;br /&gt;&lt;br /&gt;       'because the user clicked in the cell the&lt;br /&gt;&lt;br /&gt;       'EditChar returns (char)0&lt;br /&gt;&lt;br /&gt;       If Char.IsLetterOrDigit(e.EditChar) Then&lt;br /&gt;&lt;br /&gt;           txtCustom.Text = e.EditChar.ToString()&lt;br /&gt;&lt;br /&gt;           txtCustom.SelectionStart = txtCustom.Text.Length&lt;br /&gt;&lt;br /&gt;       Else&lt;br /&gt;&lt;br /&gt;           If e.Value Is Nothing Then&lt;br /&gt;&lt;br /&gt;               txtCustom.Text = ""&lt;br /&gt;&lt;br /&gt;           Else&lt;br /&gt;&lt;br /&gt;               txtCustom.Text = e.Value.ToString()&lt;br /&gt;&lt;br /&gt;           End If&lt;br /&gt;&lt;br /&gt;           txtCustom.SelectionLength = txtCustom.Text.Length&lt;br /&gt;&lt;br /&gt;       End If&lt;br /&gt;&lt;br /&gt;       'Set the EditControl property to let the GridEX control&lt;br /&gt;&lt;br /&gt;       'know which control to position in the cell.&lt;br /&gt;&lt;br /&gt;       e.EditControl = txtCustom&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C# .NET&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;           //For the sample, we will allow to edit&lt;br /&gt;&lt;br /&gt;    //the CustomerID field only in new rows.&lt;br /&gt;&lt;br /&gt;        //So, we set the ReadOnly property to false&lt;br /&gt;&lt;br /&gt;           //if rows with RowType set to Record.&lt;br /&gt;&lt;br /&gt;           if(e.Row.RowType==RowType.NewRecord)&lt;br /&gt;&lt;br /&gt;           {&lt;br /&gt;&lt;br /&gt;                       txtCustom.ReadOnly=false;&lt;br /&gt;&lt;br /&gt;           }&lt;br /&gt;&lt;br /&gt;           else&lt;br /&gt;&lt;br /&gt;           {&lt;br /&gt;&lt;br /&gt;                       txtCustom.ReadOnly = true;&lt;br /&gt;&lt;br /&gt;           }&lt;br /&gt;&lt;br /&gt;            //When the user start edition by pressing a key,&lt;br /&gt;&lt;br /&gt;     //the EditChar property holds the char that started&lt;br /&gt;&lt;br /&gt;     //the edition. If edition was started because the&lt;br /&gt;&lt;br /&gt;     //user clicked in the cell the EditChar&lt;br /&gt;&lt;br /&gt;           //returns (char)0&lt;br /&gt;&lt;br /&gt;           if(e.EditChar!=(char)0 &amp;amp;&amp;amp; !txtCustom.ReadOnly)&lt;br /&gt;&lt;br /&gt;           {&lt;br /&gt;&lt;br /&gt;                       txtCustom.Text = e.EditChar.ToString();&lt;br /&gt;&lt;br /&gt;                       txtCustom.SelectionStart = txtCustom.Text.Length;&lt;br /&gt;&lt;br /&gt;           }&lt;br /&gt;&lt;br /&gt;           else&lt;br /&gt;&lt;br /&gt;           {&lt;br /&gt;&lt;br /&gt;                       if(e.Value==null)&lt;br /&gt;&lt;br /&gt;                       {&lt;br /&gt;&lt;br /&gt;                                   txtCustom.Text = "";&lt;br /&gt;&lt;br /&gt;                       }&lt;br /&gt;&lt;br /&gt;                       else&lt;br /&gt;&lt;br /&gt;                       {&lt;br /&gt;&lt;br /&gt;                                   txtCustom.Text = e.Value.ToString();&lt;br /&gt;&lt;br /&gt;                       }&lt;br /&gt;&lt;br /&gt;                       txtCustom.SelectionLength = txtCustom.Text.Length;&lt;br /&gt;&lt;br /&gt;           }&lt;br /&gt;&lt;br /&gt;           //Set the EditControl property to let the GridEX control&lt;br /&gt;&lt;br /&gt;           //know which control to position in the cell.&lt;br /&gt;&lt;br /&gt;           e.EditControl = txtCustom;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;         &lt;br /&gt;&lt;br /&gt;10) In the EndCustomEdit event of the GridEX control, compare value of the value in the TextBox to the original value in the cell. If the value has changed, set the Value property of the EndCustomEditEventArgs parameter to the new value and set the DataChanged property to true to inform the GridEX control that the cell must be updated in the data source.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB .NET&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;       If Not e.CancelUpdate Then&lt;br /&gt;&lt;br /&gt;           If e.Value &lt;&gt; txtCustom.Text Then&lt;br /&gt;&lt;br /&gt;               e.Value = txtCustom.Text&lt;br /&gt;&lt;br /&gt;           End If&lt;br /&gt;&lt;br /&gt;       End If&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C# .NET&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt; //Compare the original value with&lt;br /&gt;&lt;br /&gt; //the value in the control.&lt;br /&gt;&lt;br /&gt; if(txtCustom.Text.CompareTo(e.Value)!=0)&lt;br /&gt;&lt;br /&gt; {&lt;br /&gt;     //If the value is different,&lt;br /&gt;&lt;br /&gt;     //set the DataChanged property to true&lt;br /&gt;&lt;br /&gt;     //to indicate the control that it has&lt;br /&gt;&lt;br /&gt;     //to update the cell value.&lt;br /&gt;&lt;br /&gt;     e.DataChanged = true;&lt;br /&gt;&lt;br /&gt;     e.Value = txtCustom.Text;&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;11) Press F5 and run the project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of          Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-4265612323342475530?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/4265612323342475530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/07/using-custom-edit-events-janus-gridex.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/4265612323342475530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/4265612323342475530'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/07/using-custom-edit-events-janus-gridex.html' title='Using Custom Edit Events [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-7242612754496645758</id><published>2010-07-26T01:53:00.000+08:00</published><updated>2010-07-26T01:53:00.635+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='VB .Net sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus GridEX'/><title type='text'>Using a layout file to preserve user changes [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>This tutorial is intended to show you how to use a layout file to preserve GridEX control settings. Using a layout file you could be able to preserve the changes to the layout made by the user.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The Layout file used in this tutorial was saved with the GridEX designer using the multiple layouts defined in tutorial 13.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Follow these steps to use a layout file at run time:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1 - Define the layout at design time and then save it clicking in the "Save Layout File" button that is found in the "Layout Manager" tab of the GridEX control designer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2 - (Optional) Clear all the settings of the GridEX control at run time clicking in the menu "Reset Defaults" that appears when you right click a GridEX control.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3 - In the Load event of the form, load the layout from a file calling a procedure similar to the following:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;   Private Sub LoadLayout()&lt;br /&gt;&lt;br /&gt;       Dim LayoutDir As String = GetLayoutDirectory() + "\GridEXLayout.gxl"&lt;br /&gt;&lt;br /&gt;       Dim LayoutStream As FileStream&lt;br /&gt;&lt;br /&gt;       LayoutStream = New FileStream(LayoutDir, FileMode.Open)&lt;br /&gt;&lt;br /&gt;       GridEX1.LoadLayoutFile(LayoutStream)&lt;br /&gt;&lt;br /&gt;       LayoutStream.Close()&lt;br /&gt;&lt;br /&gt;   End Sub&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C#:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;    private void LoadLayout()&lt;br /&gt;&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        string layoutDir = GetLayoutDirectory() + @"\GridEXLayout.gxl";&lt;br /&gt;&lt;br /&gt;        if (FileExists(layoutDir))&lt;br /&gt;&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;             FileStream layoutStream;&lt;br /&gt;&lt;br /&gt;             layoutStream = new FileStream(layoutDir, FileMode.Open);&lt;br /&gt;&lt;br /&gt;             GridEX1.LoadLayoutFile(layoutStream);&lt;br /&gt;&lt;br /&gt;             layoutStream.Close();&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4 - In the CurrentLayoutChanged event, bound the GridEX control to its data source and fill the data source as follows:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;   Private Sub GridEX1_CurrentLayoutChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridEX1.CurrentLayoutChanged&lt;br /&gt;&lt;br /&gt;       'clear the DataTable used by the previous layout&lt;br /&gt;&lt;br /&gt;       JsNorthWindDataSet1.Clear()&lt;br /&gt;&lt;br /&gt;       'when layouts are persisted into a file,&lt;br /&gt;&lt;br /&gt;       'the DataSource and DataMember properties are&lt;br /&gt;&lt;br /&gt;       'not persisted so you must reset them at run time&lt;br /&gt;&lt;br /&gt;       'instead of resetting the DataSource and DataMember&lt;br /&gt;&lt;br /&gt;       'properties when the layout is made, this could be done&lt;br /&gt;&lt;br /&gt;       'in all the layouts at once in the LayoutLoad event&lt;br /&gt;&lt;br /&gt;       If Not GridEX1.CurrentLayout Is Nothing Then&lt;br /&gt;&lt;br /&gt;           Select Case GridEX1.CurrentLayout.Key&lt;br /&gt;&lt;br /&gt;               Case "Customers"&lt;br /&gt;&lt;br /&gt;                   CustomersTableAdapter1.Fill(JsNorthWindDataSet1.Customers)&lt;br /&gt;&lt;br /&gt;                   GridEX1.SetDataBinding(JsNorthWindDataSet1, "Customers")&lt;br /&gt;&lt;br /&gt;               Case "Products"&lt;br /&gt;&lt;br /&gt;                   ProductsTableAdapter1.Fill(JsNorthWindDataSet1.Products)&lt;br /&gt;&lt;br /&gt;                   GridEX1.SetDataBinding(JsNorthWindDataSet1, "Products")&lt;br /&gt;&lt;br /&gt;               Case "Suppliers"&lt;br /&gt;&lt;br /&gt;                   SuppliersTableAdapter1.Fill(JsNorthWindDataSet1.Suppliers)&lt;br /&gt;&lt;br /&gt;                   GridEX1.SetDataBinding(JsNorthWindDataSet1, "Suppliers")&lt;br /&gt;&lt;br /&gt;           End Select&lt;br /&gt;&lt;br /&gt;       End If&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   End Sub&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C#:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;   private void GridEX1_CurrentLayoutChanged(object sender, EventArgs e)&lt;br /&gt;&lt;br /&gt;   {&lt;br /&gt;&lt;br /&gt;       //clear the DataTable used by the previous layout&lt;br /&gt;&lt;br /&gt;       jsNorthWindDataSet1.Clear();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;       //When layouts are persisted into a file,&lt;br /&gt;&lt;br /&gt;       //the DataSource and DataMember properties are&lt;br /&gt;&lt;br /&gt;       //not persisted so you must reset them at run time&lt;br /&gt;&lt;br /&gt;       //instead of resetting the DataSource and DataMember&lt;br /&gt;&lt;br /&gt;       //properties when the layout is made, this could be done&lt;br /&gt;&lt;br /&gt;       //in all the layouts at once in the LayoutLoad event&lt;br /&gt;&lt;br /&gt;       if (GridEX1.CurrentLayout != null)&lt;br /&gt;&lt;br /&gt;       {&lt;br /&gt;&lt;br /&gt;           switch (GridEX1.CurrentLayout.Key)&lt;br /&gt;&lt;br /&gt;           {&lt;br /&gt;&lt;br /&gt;               case "Customers":&lt;br /&gt;&lt;br /&gt;                  customersTableAdapter1.Fill(jsNorthWindDataSet1.Customers);&lt;br /&gt;&lt;br /&gt;                  GridEX1.SetDataBinding(jsNorthWindDataSet1, "Customers");&lt;br /&gt;&lt;br /&gt;                  break;&lt;br /&gt;&lt;br /&gt;               case "Products":&lt;br /&gt;&lt;br /&gt;                  productsTableAdapter1.Fill(jsNorthWindDataSet1.Products);&lt;br /&gt;&lt;br /&gt;                  GridEX1.SetDataBinding(jsNorthWindDataSet1, "Products");&lt;br /&gt;&lt;br /&gt;                  break;&lt;br /&gt;&lt;br /&gt;               case "Suppliers":&lt;br /&gt;&lt;br /&gt;                  suppliersTableAdapter1.Fill(jsNorthWindDataSet1.Suppliers);&lt;br /&gt;&lt;br /&gt;                  GridEX1.SetDataBinding(jsNorthWindDataSet1, "Suppliers");&lt;br /&gt;&lt;br /&gt;                  break;&lt;br /&gt;&lt;br /&gt;           }&lt;br /&gt;&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5- (Optional) To preserve user changes to the layout, update each layout before it is changed in the CurrentLayoutChanging event.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;   Private Sub GridEX1_CurrentLayoutChanging(ByVal sender As Object, _&lt;br /&gt;&lt;br /&gt;       ByVal e As System.ComponentModel.CancelEventArgs) Handles _&lt;br /&gt;&lt;br /&gt;       GridEX1.CurrentLayoutChanging&lt;br /&gt;&lt;br /&gt;       'to persist user changes in the current layout,&lt;br /&gt;&lt;br /&gt;       'call the Update method explicitly before changing the layout&lt;br /&gt;&lt;br /&gt;       If Not GridEX1.CurrentLayout Is Nothing Then&lt;br /&gt;&lt;br /&gt;           GridEX1.CurrentLayout.Update()&lt;br /&gt;&lt;br /&gt;       End If&lt;br /&gt;&lt;br /&gt;   End Sub&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C#:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;   private void gridEX1_CurrentLayoutChanging(object sender, System.ComponentModel.CancelEventArgs e)&lt;br /&gt;&lt;br /&gt;   {&lt;br /&gt;&lt;br /&gt;       //to persist user changes in the current layout,&lt;br /&gt;&lt;br /&gt;       //call the Update method explicitly before changing the layout&lt;br /&gt;&lt;br /&gt;       if(gridEX1.CurrentLayout!=null)&lt;br /&gt;&lt;br /&gt;       {&lt;br /&gt;&lt;br /&gt;           gridEX1.CurrentLayout.Update();&lt;br /&gt;&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6 - In the Closing event of the form, save the layout file again to be able to preserve the changes the user did (like grouping, sorting, columns size and position etc).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;   Protected Overrides Sub OnClosing(ByVal e As System.ComponentModel.CancelEventArgs)&lt;br /&gt;&lt;br /&gt;        Dim Result As DialogResult&lt;br /&gt;&lt;br /&gt;        Dim LayoutDir As String&lt;br /&gt;&lt;br /&gt;        Dim LayoutStream As FileStream&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        Result = MessageBox.Show("Do you want to preserve the changes in the _&lt;br /&gt;&lt;br /&gt;                                 GridEX control layout?", "Preserve changes", _&lt;br /&gt;&lt;br /&gt;                                 MessageBoxButtons.YesNoCancel, _&lt;br /&gt;&lt;br /&gt;                                 MessageBoxIcon.Question)&lt;br /&gt;&lt;br /&gt;       If Result = DialogResult.Cancel Then&lt;br /&gt;&lt;br /&gt;           e.Cancel = True&lt;br /&gt;&lt;br /&gt;       ElseIf Result = DialogResult.Yes Then&lt;br /&gt;&lt;br /&gt;           LayoutDir = GetLayoutDirectory() + "\GridEXLayout.gxl"&lt;br /&gt;&lt;br /&gt;           LayoutStream = New FileStream(LayoutDir, FileMode.Create)&lt;br /&gt;&lt;br /&gt;           GridEX1.SaveLayoutFile(LayoutStream)&lt;br /&gt;&lt;br /&gt;           LayoutStream.Close()&lt;br /&gt;&lt;br /&gt;       End If&lt;br /&gt;&lt;br /&gt;   End Sub&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C #:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;   protected override void OnClosing(CancelEventArgs e)&lt;br /&gt;&lt;br /&gt;   {&lt;br /&gt;&lt;br /&gt;       base.OnClosing(e);&lt;br /&gt;&lt;br /&gt;       DialogResult result;&lt;br /&gt;&lt;br /&gt;       string layoutDir;&lt;br /&gt;&lt;br /&gt;       FileStream layoutStream;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;       result = MessageBox.Show("Do you want to preserve the changes in " +&lt;br /&gt;&lt;br /&gt;               "the GridEX control layout?", "Preserve changes",&lt;br /&gt;&lt;br /&gt;               MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);&lt;br /&gt;&lt;br /&gt;       if (result == System.Windows.Forms.DialogResult.Cancel)&lt;br /&gt;&lt;br /&gt;       {&lt;br /&gt;&lt;br /&gt;           e.Cancel = true;&lt;br /&gt;&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       else if (result == System.Windows.Forms.DialogResult.Yes)&lt;br /&gt;&lt;br /&gt;       {&lt;br /&gt;&lt;br /&gt;           DirectoryInfo dInfo;&lt;br /&gt;&lt;br /&gt;           dInfo = new DirectoryInfo(Application.ExecutablePath).Parent;&lt;br /&gt;&lt;br /&gt;           dInfo = new DirectoryInfo(dInfo.FullName + @"\LayoutData");&lt;br /&gt;&lt;br /&gt;           if (!dInfo.Exists) dInfo.Create();&lt;br /&gt;&lt;br /&gt;           layoutDir = dInfo.FullName + @"\GridEXLayout.gxl";&lt;br /&gt;&lt;br /&gt;           layoutStream = new FileStream(layoutDir, FileMode.Create);&lt;br /&gt;&lt;br /&gt;           GridEX1.SaveLayoutFile(layoutStream);&lt;br /&gt;&lt;br /&gt;           layoutStream.Close();&lt;br /&gt;&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7 - Run the project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of          Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-7242612754496645758?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/7242612754496645758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/07/using-layout-file-to-preserve-user_26.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/7242612754496645758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/7242612754496645758'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/07/using-layout-file-to-preserve-user_26.html' title='Using a layout file to preserve user changes [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-3281633420890961955</id><published>2010-07-25T01:48:00.000+08:00</published><updated>2010-07-25T01:48:00.673+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='VB .Net sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus GridEX'/><title type='text'>Using multiple layouts [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>How to use multiple layouts in a GridEX control.&lt;br /&gt;&lt;br /&gt;It is assumed that you are familiarized with the creation of DataSets with multiple tables and changing GridEX control settings at design time&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Follow these steps to create multiple layouts at design time:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1 - Create a new Visual Basic or C# project using "Windows Application" Template&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2 - Using the JSNorthWind Data Source, select the Customers, Products and Suppliers tables.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3 - Build the application to be able to see JSNorthwindDataSet and the TableAdapters created in the Tool box.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4 - Drag JSNorthwindDataSet and drop it into Form1.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5 - Drag CustomersTableAdapter and drop it into Form1.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6 - Drag ProductsTableAdapter and drop it into Form1.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7 - Drag SuppliersTableAdapter and drop it into Form1.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;8 - Add a GridEX control to Form1.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7 - In GridEX control, select JSNorthwindDataSet1 as the DataSource and Customers as the DataMember.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;8 - In the Designer window of the GridEX control click on the "Retrieve Structure" button to let GridEX control create the root table and the columns matching those found in the data source.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;9 - Once the base structure is created, modify the layout as you want, changing the column positions, column widths, adding an icon column, etc.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;9 -Select the "Layout Manager" Tab. A List View will appear with a "Draft Layout" in it. The Draft Layout contains the table structure you just created but it is not saved as a layout in the Layouts collection.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;10 - Click on "Save Current Layout" button and set the name "Customers" to the draft layout.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;11 -Once the "Customers" layout has been saved, add a new layout for products. To add a new layout click on the "New Layout" button and Layout1 will appear.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;12 - Change the name of Layout1 for "Products".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;13 - Double click in the "Products" layout to select this empty layout. This action will set the "Products" layout you just created as the CurrentLayout in the GridEX control and all the changes you do will affect this layout only.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;14 - In GridEX control properties select JSNorthwindDataSet1 as the DataSource and Products as the DataMember.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;15 - Click on "Retrieve Structure" button.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;16 - Change any properties in the new layout like column positions or column widths.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;17 - Select "Layout Manager" Tab again.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;18 - Click in the "New Layout" button and Layout1 will appear.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;19 - Change the name of Layout1 for "Suppliers".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;20 - Double click in the "Suppliers" layout to select this empty layout. This action will set the "Products" layout you just created as the CurrentLayout in the GridEX control and all the changes you do will affect this layout only.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;21 - In GridEX control properties select JSNorthwindDataSet1 as the DataSource and Suppliers as the DataMember&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;22 - Click on Retrieve Structure button.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;23 - Change any properties in the new layout like column positions or column widths.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;24 - You have finished adding layouts for the tutorial. To change a property in any of the layouts you have in the Layouts collection, select the layout from Layouts combo in the tool bar of the GridEX designer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;25 - To select a layout at run time use the CurrentLayout property of the GridEX class. In the tutorial we are going to do that using buttons. So, add a button "Button1" and change its Text property to "Show Customers". In the Click event for this button write the following code that set the "Customers" layout as the current layout in the GridEX control:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;          If GridEX1.CurrentLayout Is Nothing OrElse _&lt;br /&gt;&lt;br /&gt;             GridEX1.CurrentLayout.Key &lt;&gt; "Customers" Then&lt;br /&gt;&lt;br /&gt;             GridEX1.CurrentLayout = GridEX1.Layouts("Customers")&lt;br /&gt;&lt;br /&gt;          End If&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C#&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;if(gridEX1.CurrentLayout==null || gridEX1.CurrentLayout.Key!="Customers")&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;  gridEX1.CurrentLayout = gridEX1.Layouts["Customers"];&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;26 - Add a buttons to show "Products" and "Suppliers" layouts with similar code in the Click event for those buttons.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;27 - Now that we have written code to select the different layouts what rests is to fill the appropriate DataTable when a layout is selected. To do that, we handle the CurrentLayoutChanged event as follows:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;      'clear the DataTable used by the previous layout&lt;br /&gt;&lt;br /&gt;      JsNorthWindDataSet1.Clear()&lt;br /&gt;&lt;br /&gt;      If Not GridEX1.CurrentLayout Is Nothing Then&lt;br /&gt;&lt;br /&gt;          Select Case GridEX1.CurrentLayout.Key&lt;br /&gt;&lt;br /&gt;              Case "Customers"&lt;br /&gt;&lt;br /&gt;                  CustomersTableAdapter1.Fill(JsNorthWindDataSet1.Customers)&lt;br /&gt;&lt;br /&gt;              Case "Products"&lt;br /&gt;&lt;br /&gt;                  ProductsTableAdapter1.Fill(JsNorthWindDataSet1.Products)&lt;br /&gt;&lt;br /&gt;              Case "Suppliers"&lt;br /&gt;&lt;br /&gt;                  SuppliersTableAdapter1.Fill(JsNorthWindDataSet1.Suppliers)&lt;br /&gt;&lt;br /&gt;          End Select&lt;br /&gt;&lt;br /&gt;      End If&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C#:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;//clear the DataTable used by the previous layout&lt;br /&gt;&lt;br /&gt;jsNorthWindDataSet1.Clear();&lt;br /&gt;&lt;br /&gt;if (GridEX1.CurrentLayout != null)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt; switch (GridEX1.CurrentLayout.Key)&lt;br /&gt;&lt;br /&gt; {&lt;br /&gt;&lt;br /&gt;    case "Customers":               &lt;br /&gt;&lt;br /&gt;       customersTableAdapter1.Fill(jsNorthWindDataSet1.Customers);&lt;br /&gt;&lt;br /&gt;       break ;&lt;br /&gt;&lt;br /&gt;    case "Products":&lt;br /&gt;&lt;br /&gt;       productsTableAdapter1.Fill(jsNorthWindDataSet1.Products);&lt;br /&gt;&lt;br /&gt;       break ;&lt;br /&gt;&lt;br /&gt;    case "Suppliers":&lt;br /&gt;&lt;br /&gt;       suppliersTableAdapter1.Fill(jsNorthWindDataSet1.Suppliers);&lt;br /&gt;&lt;br /&gt;       break ;&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;28 - Run the project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of          Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-3281633420890961955?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/3281633420890961955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/07/using-multiple-layouts-janus-gridex.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/3281633420890961955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/3281633420890961955'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/07/using-multiple-layouts-janus-gridex.html' title='Using multiple layouts [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-2725716107182131650</id><published>2010-07-24T01:42:00.000+08:00</published><updated>2010-07-24T01:42:00.134+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='VB .Net sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus GridEX'/><title type='text'>Binding GridEX control at run time [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>To bind GridEX control at runtime, instead of using DataSource and DataMember properties you must use SetDataBinding method.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Once the control is bound you must call the RetrieveStructure method in order to force the control to create the table(s) and fields defined in the data source.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;    'binding control at runtime&lt;br /&gt;&lt;br /&gt;    'First, get the table you want to bind to the control and populate it&lt;br /&gt;&lt;br /&gt;    'in this sample we create a table in memory but&lt;br /&gt;&lt;br /&gt;    'you can also create a table&lt;br /&gt;&lt;br /&gt;    'using OleDBConnection and OleDBDataAdapter object&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;       Dim myTable As DataTable = New DataTable("GridEXTest")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;       'creating the columns in the table&lt;br /&gt;&lt;br /&gt;       myTable.Columns.Add("Number", GetType(Integer))&lt;br /&gt;&lt;br /&gt;       myTable.Columns.Add("Text", GetType(String))&lt;br /&gt;&lt;br /&gt;       myTable.Columns.Add("Date", GetType(DateTime))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;       'adding rows&lt;br /&gt;&lt;br /&gt;       myTable.Rows.Add(1, "Text 1", DateTime.Today)&lt;br /&gt;&lt;br /&gt;       myTable.Rows.Add(2, "Text 2", DateTime.Today)&lt;br /&gt;&lt;br /&gt;       myTable.Rows.Add(3, "Text 3", DateTime.Today)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;       'call SetDataBinding method to bind the control at run time&lt;br /&gt;&lt;br /&gt;       'and be able to set DataSource and DataMember properties&lt;br /&gt;&lt;br /&gt;       'at the same time&lt;br /&gt;&lt;br /&gt;       GridEX1.SetDataBinding(myTable, "")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;       'Once the control is bound, call Retrieve Structure method&lt;br /&gt;&lt;br /&gt;       'to force the control to create the table(s) and column(s)&lt;br /&gt;&lt;br /&gt;       'defined in the DataSource&lt;br /&gt;&lt;br /&gt;       GridEX1.RetrieveStructure()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C#:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;//binding control at runtime&lt;br /&gt;&lt;br /&gt;//First, get the table you want to bind to the control&lt;br /&gt;&lt;br /&gt;//and populate it.&lt;br /&gt;&lt;br /&gt;//In this sample we create a table in memory but&lt;br /&gt;&lt;br /&gt;//you can also create a table&lt;br /&gt;&lt;br /&gt;           //using OleDBConnection and OleDBDataAdapter object&lt;br /&gt;&lt;br /&gt;DataTable myTable = new DataTable("GridEXTest");&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           //creating the columns in the table&lt;br /&gt;&lt;br /&gt;myTable.Columns.Add("Number", typeof(int));&lt;br /&gt;&lt;br /&gt;myTable.Columns.Add("Text", typeof(string));&lt;br /&gt;&lt;br /&gt;myTable.Columns.Add("Date", typeof(DateTime));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//adding rows&lt;br /&gt;&lt;br /&gt;myTable.Rows.Add(1, "Text 1", DateTime.Today);&lt;br /&gt;&lt;br /&gt;myTable.Rows.Add(2, "Text 2", DateTime.Today);&lt;br /&gt;&lt;br /&gt;myTable.Rows.Add(3, "Text 3", DateTime.Today);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//call SetDataBinding method to bind the control at run time&lt;br /&gt;&lt;br /&gt;//and be able to set DataSource and DataMember properties&lt;br /&gt;&lt;br /&gt;//at the same time&lt;br /&gt;&lt;br /&gt;gridEX1.SetDataBinding(myTable, "");&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//Once the control is bound, call Retrieve Structure method&lt;br /&gt;&lt;br /&gt;//to force the control to create the table(s) and column(s)&lt;br /&gt;&lt;br /&gt;//defined in the DataSource&lt;br /&gt;&lt;br /&gt;gridEX1.RetrieveStructure();&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of          Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-2725716107182131650?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/2725716107182131650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/07/binding-gridex-control-at-run-time.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/2725716107182131650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/2725716107182131650'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/07/binding-gridex-control-at-run-time.html' title='Binding GridEX control at run time [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-8564007902716979192</id><published>2010-07-23T01:39:00.000+08:00</published><updated>2010-07-23T01:39:00.258+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='VB .Net sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus GridEX'/><title type='text'>Displaying Hierarchical Data [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>Steps to reproduce this sample:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1)      Create a new "Windows Application" Project.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2)   Add a new Data Source to the application:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Click in the "Add New Data Source..." menu under "Data" and follow the wizard to add "Customers", "Orders" and "Order Details" tables from JSNorthWind.mdb database.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In the tutorial we used Provider = "Microsoft Access Database File (OLE DB)" and Database file name = "C:\JSNorthWind.mdb".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3)   Build the project to be able to see JSNorthwindDataSet, CustomersTableAdapter, OrdersTableAdapter and Order_DetailsTableAdpater as components in the Toolbox.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4)   Drag from the tool box JSNorthwindDataSet, CustomersTableAdapter, OrdersTableAdapter and Order_DetailsTableAdpater components.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5)   Add GridEX Control to a tab in the Toolbox window by right clicking in the Toolbox window and choosing "Customize Toolbox..." menu. When the dialog appears, select ".Net Framework Components" tab, check "GridEX" control in the list and click OK.&lt;br /&gt;Note: If GridEX control doesn't appear as an option in the list, click the Browse button and open Janus.Windows.GridEX.dll.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6)      Drag a GridEX control from the toolbox into the Form designer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Select GridEX control in the Form and set the following properties in the properties window:&lt;br /&gt;&lt;br /&gt;DataSource = JSNorthwindDataSet1&lt;br /&gt;DataMember = "Customers"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7)      Right click in the GridEX control and select "Retrieve Hierarchical Structure" menu. This action will force the control to read the DataSource structure and create the tables and columns needed to show all the fields in the tables.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;8)      In the Load event of the Form fill the tables in the dataset with the following code:&lt;br /&gt;&lt;br /&gt;In VB.Net&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;          CustomersTableAdapter1.Fill(JsNorthWindDataSet1.Customers)&lt;br /&gt;&lt;br /&gt;          OrdersTableAdapter1.Fill(JsNorthWindDataSet1.Orders)&lt;br /&gt;&lt;br /&gt;          Order_DetailsTableAdapter1.Fill(JsNorthWindDataSet1.Order_Details)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;          &lt;br /&gt;          &lt;br /&gt;In C#.Net&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;           customersTableAdapter1.Fill(jsNorthWindDataSet1.Customers);&lt;br /&gt;&lt;br /&gt;           ordersTableAdapter1.Fill(jsNorthWindDataSet1.Orders);&lt;br /&gt;&lt;br /&gt;           order_DetailsTableAdapter1.Fill(jsNorthWindDataSet1.Order_Details);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;9)      Press F5 and run the project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of          Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-8564007902716979192?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/8564007902716979192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/07/displaying-hierarchical-data-janus.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/8564007902716979192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/8564007902716979192'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/07/displaying-hierarchical-data-janus.html' title='Displaying Hierarchical Data [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-8127852214161967194</id><published>2010-07-22T01:26:00.000+08:00</published><updated>2010-07-22T01:26:00.139+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='VB .Net sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus GridEX'/><title type='text'>Updating Changes to the Database [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>Since a DataSet works with disconnected data, you must explicitly commit the changes in the dataset to the data source. This tutorial is intended to show you a simple example of how to do this:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1)      Add a button to the Form and Change its Name property to UpdateButton and its Text property to "Update"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2)      In the Click event of the UpdateButton, get a table with the rows that has changes, if the table is not empty, call the Update method in the DataAdapter to write those changes into the database.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;Dim changedRecords As System.Data.DataTable&lt;br /&gt;&lt;br /&gt;changedRecords = JSNorthWindDataSet.Products.GetChanges()&lt;br /&gt;&lt;br /&gt;If Not (changedRecords Is Nothing) AndAlso _&lt;br /&gt;&lt;br /&gt;           (changedRecords.Rows.Count &gt; 0) Then&lt;br /&gt;&lt;br /&gt; Dim message As String&lt;br /&gt;&lt;br /&gt;        message = String.Format("You are about to update {0} record(s)." _&lt;br /&gt;&lt;br /&gt;            + vbCrLf + "Do you want to continue?", changedRecords.Rows.Count)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        If MessageBox.Show(message, "GridEX Tutorial", MessageBoxButtons.YesNo, _&lt;br /&gt;&lt;br /&gt;            MessageBoxIcon.Question) = System.Windows.Forms.DialogResult.Yes Then&lt;br /&gt;&lt;br /&gt;           Try&lt;br /&gt;&lt;br /&gt;               ProductsTableAdapter.Update(JSNorthWindDataSet.Products)&lt;br /&gt;&lt;br /&gt;           Catch exc As Exception&lt;br /&gt;&lt;br /&gt;               MessageBox.Show( _&lt;br /&gt;&lt;br /&gt;   "An error occurred while trying to update the database:" + _&lt;br /&gt;&lt;br /&gt;    vbCrLf + exc.Message + vbCrLf + vbCrLf + _&lt;br /&gt;&lt;br /&gt;    "The rows with errors will appear in dark red.", _&lt;br /&gt;&lt;br /&gt;    "GridEX Tutorial" , MessageBoxButtons.OK, _&lt;br /&gt;&lt;br /&gt;    MessageBoxIcon.Exclamation)&lt;br /&gt;&lt;br /&gt;           End Try&lt;br /&gt;&lt;br /&gt;        End If&lt;br /&gt;&lt;br /&gt;     Else&lt;br /&gt;&lt;br /&gt;       MessageBox.Show("There are no changes in the Products table to update.", _&lt;br /&gt;&lt;br /&gt;          "GridEX Tutorial", MessageBoxButtons.OK, MessageBoxIcon.Information)&lt;br /&gt;&lt;br /&gt; End If&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In C#:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;DataTable changedRecords;&lt;br /&gt;&lt;br /&gt;changedRecords = jsNorthWindDataSet1.Products.GetChanges();&lt;br /&gt;&lt;br /&gt;if (changedRecords != null &amp;amp;&amp;amp; changedRecords.Rows.Count &gt; 0)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;  string message;&lt;br /&gt;&lt;br /&gt;  message = String.Format("You are about to update {0} record(s)."&lt;br /&gt;&lt;br /&gt;  + "\n\rDo you want to continue?", changedRecords.Rows.Count);&lt;br /&gt;&lt;br /&gt;  if (MessageBox.Show(message, "GridEX Tutorial",&lt;br /&gt;&lt;br /&gt;        MessageBoxButtons .YesNo,&lt;br /&gt;&lt;br /&gt;        MessageBoxIcon .Question) == DialogResult.Yes)&lt;br /&gt;&lt;br /&gt;  {&lt;br /&gt;&lt;br /&gt;     Try&lt;br /&gt;&lt;br /&gt;     {&lt;br /&gt;&lt;br /&gt;        productsTableAdapter1.Update(jsNorthWindDataSet1.Products);&lt;br /&gt;&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     catch (Exception exc)&lt;br /&gt;&lt;br /&gt;     {&lt;br /&gt;&lt;br /&gt;        MessageBox.Show("An error occurred while trying to update " +&lt;br /&gt;&lt;br /&gt;             "the database:\n\r" + exc.Message + "\n\n\r" +&lt;br /&gt;&lt;br /&gt;             "The rows with errors will appear in dark red." ,&lt;br /&gt;&lt;br /&gt;             "GridEX Tutorial" , MessageBoxButtons.OK,&lt;br /&gt;&lt;br /&gt;             MessageBoxIcon .Exclamation);&lt;br /&gt;&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Else&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;  MessageBox.Show("There are no changes in the Products&lt;br /&gt;&lt;br /&gt;table to update." , "GridEX Tutorial", MessageBoxButtons.OK, MessageBoxIcon.Information);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3) Press F5 and run the project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of         Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-8127852214161967194?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/8127852214161967194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/07/updating-changes-to-database-janus.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/8127852214161967194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/8127852214161967194'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/07/updating-changes-to-database-janus.html' title='Updating Changes to the Database [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-2822978648588137876</id><published>2010-07-21T01:23:00.000+08:00</published><updated>2010-07-21T01:23:00.564+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus GridEX'/><title type='text'>Using GridEXPrintDocument to Print the Control [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>GridEXPrintDocument component allows the developer to print the contents of a GridEX control.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;We are going to use a GridEXPrintDocument to provide the application with Print and Print Preview capabilities.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The steps required to create this project are:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1)      Open Form1 in Design mode&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2)      Drag a GridEXPrintDocument component from the Toolbox and drop it over Form1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3)      Select GridEXPrintDocument1 component in the Components tray and set its GridEX property equal to GridEX1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4)      Drag a PrintPreviewDialog component from the Toolbox and drop it over Form1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5)      Set the Document property of PrintPreviewDialog1 equal to GridEXPrintDocument1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6)      Add a button and change its Text property to "Print Preview&amp;amp; "&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7)      In the Click event of the button, call the ShowDialog method of the PrintPreviewDialog1 component.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;8)      Run the project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-2822978648588137876?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/2822978648588137876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/07/using-gridexprintdocument-to-print.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/2822978648588137876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/2822978648588137876'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/07/using-gridexprintdocument-to-print.html' title='Using GridEXPrintDocument to Print the Control [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-4012025309710493950</id><published>2010-07-20T01:21:00.000+08:00</published><updated>2010-07-20T01:21:00.137+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus GridEX'/><title type='text'>Changing Colors and Fonts using Predefined FormatStyles [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>In GridEX control, Predefined FormatStyles are used to specify how the different areas of the control will be drawn.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In each format style you can specify Font, colors, transparency, gradients, etc. that will be used to draw a particular area of the control. Also, the dialog lets you change the properties in the ControlStyle object that will be used to draw internal controls in the grid like scrollbars and buttons.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The PredefinedStyles used in this tutorial are:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;RowFormatStyle: Holds the format settings used when drawing rows in the control. When AlternatingColors property is True, this style will be used only in odd rows while AlternatingRowFormatStyle will be used in even rows.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;HeaderFormatStyle: Holds the format settings used when drawing column and row headers.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;AlternatingRowFormatStyle: Holds the format settings used when drawing even rows when AlternatingColors property if True. This FormatStyle is merged with RowFormatStyle before it is applied.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SelectedFormatStyle: Holds format settings to be used when drawing selected rows. This FormatStyle is merged with the FormatStyle used to draw the row when it is not selected (the base FormatStyle can be Row, AlternatingRow, GroupRow, NewRow, etc)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;GroupByBoxFormatStyle: Holds format settings to be used when drawing the group by box background.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;GroupByBoxInfoFormatStyle: Holds format settings to be used when drawing the information text in the group by box when no columns are grouped.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;GroupRowFormatStyle: Holds format settings to be used when drawing group rows. This FormatStyle is merged with RowFormatStyle before it is applied.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CardCaptionFormatStyle: Holds format settings to be used when drawing the caption bar in cards.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CardColumnHeaderFormatStyle: Holds format settings to be used when drawing column headers in a card. This FormatStyle is merged with RowFormatStyle before it is applied.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of         Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-4012025309710493950?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/4012025309710493950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/07/changing-colors-and-fonts-using.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/4012025309710493950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/4012025309710493950'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/07/changing-colors-and-fonts-using.html' title='Changing Colors and Fonts using Predefined FormatStyles [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-5103084486524781724</id><published>2010-07-19T01:14:00.001+08:00</published><updated>2010-07-19T01:14:00.035+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus GridEX'/><title type='text'>Changing Control's Appearance [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>There are several properties used to define the appearance of the GridEX control.&lt;br /&gt;&lt;br /&gt;We are using only a few of these properties to give you a hint of the possibilities the control has when it comes to its appearance.&lt;br /&gt;&lt;br /&gt;The properties used in this tutorial are:&lt;br /&gt;&lt;br /&gt;In GridEX Control:&lt;br /&gt;&lt;br /&gt;ThemedAreas: With this property, you can define whether to use Windows XP Visual Styles to render some areas of the GridEX control like scrollbars or headers.&lt;br /&gt;&lt;br /&gt;VisualStyle: With this property, you can define whether to use standard grid style or Office 2003 style to draw the control. Also, VisualStyleAreas property allows you to determine which visual style to use in each of the different areas of the control.&lt;br /&gt;&lt;br /&gt;RowHeaders: To determine whether the control will display a row header at the beginning of the row.&lt;br /&gt;&lt;br /&gt;GroupByBoxVisible: Hides or shows the Group By Box area in the control.&lt;br /&gt;&lt;br /&gt;AlternatingColors: If this property is set to True, GridEX control will render odd rows using RowFormatStyle settings and even rows using AlternatingRowFormatStyle settings. The colors used in these format styles can be changed directly in the GridEXFormatStyle class.&lt;br /&gt;&lt;br /&gt;RecordNavigator: Hides or shows the record navigator in the control.&lt;br /&gt;&lt;br /&gt;BorderStyle: Determines which style to use when drawing the border of the control.&lt;br /&gt;&lt;br /&gt;GridLines: Lets you specify whether the control will draw vertical and or horizontal lines to separate the cells.&lt;br /&gt;&lt;br /&gt;GridLineStyle: Determines if the grid lines in the control will be drawn as a solid or dotted line.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Header Appearance: Unlike the previous properties that belong to the GridEX control directly. This property is set in the GridEXFormatStyle instance that is associated to the HeaderFormatStyle property. HeaderFormatStyle determines the appearance of column and row headers.&lt;br /&gt;&lt;br /&gt;Grid.HeaderFormatStyle.Appearance = Appearance.Flat&lt;br /&gt;&lt;br /&gt;ScrollBar and DropDowns appearance: The appearance of the scrollbars, buttons, dropdown buttons and record navigator is defined in the ControlStyle property. With the ControlStyle instance associated to the control you can specify the 3D appearance of buttons and also their colors.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of         Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-5103084486524781724?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/5103084486524781724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/07/changing-controls-appearance-janus.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/5103084486524781724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/5103084486524781724'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/07/changing-controls-appearance-janus.html' title='Changing Control&apos;s Appearance [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-3278103613242288617</id><published>2010-07-18T01:03:00.000+08:00</published><updated>2010-07-18T01:03:00.322+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus GridEX'/><title type='text'>Customizing Card View [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>The properties used to enhance Card View used in this tutorial are:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In GridEX Control:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;          CardCaptionPrefix = "Product:"&lt;br /&gt;&lt;br /&gt;          CardColumnHeaderFormatStyle.FontBold = TriState.True&lt;br /&gt;&lt;br /&gt;          CenterSingleCard  = False&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;                   &lt;br /&gt;&lt;br /&gt;In Column objects:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;          Column["Icon"]&lt;br /&gt;          CardIcon = True&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CardIcon property is used to instruct the control to use the icon displayed in this column as the icon in the card caption. Only one column can have this property equal to True.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;     Column["ProductName"]&lt;br /&gt;          CardCaption = True&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CardCaption property is used to instruct the control to use the text in this column as the text shown in the card caption. Only one column can have this property equal to True.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;After setting these properties, we added a combo box to let the user switch between Table, Card and Single Card Views. When the user selects a view, other properties are also set depending on the selected view. For instance, in card views, we are hiding the Icon column to show it only in the card’s caption but not as a part of the card body. When SingleCardView is selected, the RecordNavigator is shown to let the user navigate through all the records in the products table. Refer to the SelectedIndexChanged event of the Combo Box to see the code.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of         Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-3278103613242288617?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/3278103613242288617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/07/customizing-card-view-janus-gridex.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/3278103613242288617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/3278103613242288617'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/07/customizing-card-view-janus-gridex.html' title='Customizing Card View [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-2701293737881038363</id><published>2010-07-17T01:41:00.000+08:00</published><updated>2010-07-17T01:41:00.284+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='VB .Net sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus GridEX'/><title type='text'>Using Conditional Formatting [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>There could be situations where you want to apply different formats to rows or cells depending on a condition. You could use FormatConditions in GridEX control for this effect.&lt;br /&gt;&lt;br /&gt;1)      A FormatCondition that uses StrikeOut font and gray ForeColor to indicate the user that the product is discontinued.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2)      A FormatCondition that uses Bold Font and red ForeColor to indicate the user that the product is on sale.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The steps you need to add a FormatCondition is code are:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1)      Create a new GridEXFormatCondition object:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In the following code we are creating a FormatCondition and then defining the FormatStyle settings that will be applied to all the rows where Discontinued column value is True.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In VB:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;      Dim fc As GridEXFormatCondition&lt;br /&gt;&lt;br /&gt;      fc = New GridEXFormatCondition(GridEX1.RootTable.Columns("Discontinued"), ConditionOperator.Equal, True)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In C#:&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;                      GridEXFormatCondition fc = new GridEXFormatCondition(this.gridEX1.RootTable.Columns["Discontinued"],ConditionOperator.Equal,true);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2)      Specify the FormatStyle properties you want to be applied in the rows where the condition is met.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                      fc.FormatStyle.FontStrikeout = TriState.True;&lt;br /&gt;&lt;br /&gt;                      fc.FormatStyle.ForeColor = SystemColors.GrayText;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3)      Add the FormatCondition created to the FormatCondition collection in the table.&lt;br /&gt;&lt;br /&gt;                      gridEX1.RootTable.FormatConditions.Add(fc); &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of         Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-2701293737881038363?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/2701293737881038363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/07/using-conditional-formatting-janus.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/2701293737881038363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/2701293737881038363'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/07/using-conditional-formatting-janus.html' title='Using Conditional Formatting [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-6529821675960024951</id><published>2010-07-16T01:35:00.000+08:00</published><updated>2010-07-16T01:35:00.228+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='VB .Net sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus GridEX'/><title type='text'>Using MultiColumn DropDowns [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>The SupplierID field will have a GridEX dropdown to display the Suppliers' name to the user while the control internally works with the SupplierID value. The GridEXDropDown object is used also as the source list of a dropdown list when MultiColumnCombo or MultiColumnDropDown EditType is used.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To have a MultiColumn DropDown in a column you must:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1 - Add Suppliers table to JSNorthwindDataSet. To add a table to an existing DataSet, in the Data Sources window, click in the "Configure DataSet wizard button and check the table you want to add in the dialog that appears.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2 - Build the application so you can see SuppliersTableAdapter component in the tool box.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3 - Drag SuppliersTableAdapter component from the toolbox and drop it into the form.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4 - In the GridEX Designer dialog:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;          Select DropDowns node and click Add button&lt;br /&gt;&lt;br /&gt;          In the MultiColumnConfiguration Wizard, Select JSNorthwindDataSet as DataSource and Suppliers as DataMember&lt;br /&gt;&lt;br /&gt;          Click Next&lt;br /&gt;&lt;br /&gt;          Check the column you want to show in the drop down (In this sample we selected SupplierID and CompanyName)&lt;br /&gt;&lt;br /&gt;          Click Next&lt;br /&gt;&lt;br /&gt;          Set Key = "Suppliers"&lt;br /&gt;&lt;br /&gt;          Column = SupplierID&lt;br /&gt;&lt;br /&gt;          ValueMember = "SupplierID"&lt;br /&gt;&lt;br /&gt;          DisplayMember = "CompanyName"&lt;br /&gt;&lt;br /&gt;          Click Finish&lt;br /&gt;&lt;br /&gt;         &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5 - In the Columns Node of the GridEX control, select SupplierID Column.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;10 - Change the following properties in the column&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;          EditType = MultiColumnCombo&lt;br /&gt;&lt;br /&gt;          CompareTarget = Text&lt;br /&gt;&lt;br /&gt;          DefaultGroupInterval = Text&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;11 - In the Load event of the Form, fill the Suppliers table using this code:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;          SuppliersTableAdapter.Fill(JSNorthwindDataSet.Suppliers)&lt;br /&gt;&lt;br /&gt;       &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;12 - Set the DataSource and DataMember properties of the DropDown at run time. DropDown objects cannot keep the DataSource and DataMember properties you have used at design time to retrieve the column layout.&lt;br /&gt;&lt;br /&gt;For that reason, you need to reset those properties at runtime.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      In the Load event of Form1 write:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      In VB:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;GridEX1.DropDowns("Suppliers").SetDataBinding(JSNorthwindDataSet,"Suppliers")&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In C#:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;gridEX1.DropDowns["Suppliers"].SetDataBinding(jsNorthwindDataSet,"Suppliers");&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;11 - Run the project&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of         Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-6529821675960024951?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/6529821675960024951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/07/using-multicolumn-dropdowns-janus.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/6529821675960024951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/6529821675960024951'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/07/using-multicolumn-dropdowns-janus.html' title='Using MultiColumn DropDowns [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-1745902062555170497</id><published>2010-07-15T01:31:00.000+08:00</published><updated>2010-07-15T01:31:00.668+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus GridEX'/><title type='text'>Using ValueLists [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>A column in the GridEX control can have a look up list to replace ID's stored in a table for a name associated to that ID.&lt;br /&gt;&lt;br /&gt;The CategoryID field will have a value list to display the Category name to the user while the control internally works with the CategoryID value. The ValueList object is used also as the source list of a dropdown list when Combo or DropDownList EditType is used.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1 - Add Categories table to JSNorthwindDataSet. To add a table to an existing DataSet, in the Data Sources window, click in the "Configure DataSet" wizard button and check the table you want to add in the dialog that appears.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2 - Build the application so you can see CategoriesTableAdapter component in the tool box.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3 - Drag CategoriesTableAdapter component from the toolbox and drop it into the form.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In Tutorial 3 project, you could see that we are calling the FillCategoriesValueList method in the Load event of the form.&lt;br /&gt;&lt;br /&gt;To have a ValueList in a column you must:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4 - Set the HasValueList property of the column equal to True. This is necessary to be able to get a ValueList from the ValueList property of the column; otherwise the property will return null (nothing in Visual Basic)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5 - Get the ValueList object from the column:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;GridEXValueListItemCollection ValueList = column.ValueList;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6 - Fill the ValueList. To fill a ValueList you have two options:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           6.1 - Use the Add method for each value item.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           ValueList.Add(1, "Text 1")&lt;br /&gt;&lt;br /&gt;           ValueList.Add(2, "Text 2")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           6.2 - Use the PopulateValueList method if you already have a list of objects or a DataView. When using this method, you must specify the ValueMember and DisplayMember.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ValueList.PopulateValueList(&lt;br /&gt;&lt;br /&gt;tableCategories.DefaultView,&lt;br /&gt;&lt;br /&gt;"CategoryID",&lt;br /&gt;&lt;br /&gt;"CategoryName")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7 -(optional)(recommended) Set the CompareTarget and DefaultGroupInterval properties of the column equal to Text. When you sort or group a column, the control by default uses the value it retrieves from its DataSource, setting these properties, you are instructing the control to sort using the replaced values (in this case, the control will sort category names instead of sorting the category id’s).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;8 - (optional) set the EditType property of the column equal to Combo or DropDownList.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of         Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-1745902062555170497?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/1745902062555170497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/07/using-valuelists-janus-gridex-winforms.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/1745902062555170497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/1745902062555170497'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/07/using-valuelists-janus-gridex-winforms.html' title='Using ValueLists [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-3103967899193153598</id><published>2010-07-14T01:23:00.000+08:00</published><updated>2010-07-14T01:23:00.169+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus GridEX'/><title type='text'>Adding an Unbound Image Column [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>Follow these steps to add an Image column to a table in a GridEX control:&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;1 - Add an image list to Form1.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2 - Add two images to imageList1 product.bmp and header.bmp&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3 - In the ExternalImageList property of the GridEX control, select imageList1.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4 - Go to GridEX Designer dialog and select Columns collection of the RootTable object.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5 - In the Columns panel, Click Add button to add a new column.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           Select "Unbound Column" option and enter Icon in the Key text box.&lt;br /&gt;&lt;br /&gt;           In the next step, Clear the caption of the column and select Image as the ColumnType for the new column.&lt;br /&gt;&lt;br /&gt;           Click OK&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;9 - In the property grid, set the ImageKey property equal to "product.bmp". Doing this, you are instructing the column to display that image in all the cells of the column.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;10 - To display an image in the header of the column, use the HeaderImageKey property. In this tutorial, we used header.bmp.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;11 - Use the MoveUp button in the toolbar to move this column up to be the first column in the control.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;12 - Change the Width of the Column to 20 (pixels) and set the AllowSize property equal to false.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;13 - Since an image can not be sorted nor grouped, set the AllowGroup and AllowSort properties equal to false.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;14 - Save the form and press F5 to run the project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of         Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-3103967899193153598?l=codelibraries.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelibraries.blogspot.com/feeds/3103967899193153598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codelibraries.blogspot.com/2010/07/adding-unbound-image-column-janus.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/3103967899193153598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6353430478574550535/posts/default/3103967899193153598'/><link rel='alternate' type='text/html' href='http://codelibraries.blogspot.com/2010/07/adding-unbound-image-column-janus.html' title='Adding an Unbound Image Column [Janus GridEX WinForms Control v3.5 for .NET]'/><author><name>code libraries</name><uri>http://www.blogger.com/profile/07491157238841842259</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6353430478574550535.post-1129371820936258537</id><published>2010-07-13T21:21:00.000+08:00</published><updated>2010-07-13T21:22:40.569+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='VB .Net sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='Janus GridEX'/><title type='text'>Binding GridEX Control to a Data Source at Design Time [Janus GridEX WinForms Control v3.5 for .NET]</title><content type='html'>Bind GridEX control to a DataSource available at design time.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Follow these steps to create a simple form using a GridEX control to display records from a table in a database.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1 - Create a new Visual Basic or C# project using "Windows Application" Template&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2 - Add a new Data Source to the application:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Click in the "Add New Data Source..." menu under "Data" and follow the wizard to add "Products" table from JSNorthWind.mdb database.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In the tutorial we used Provider = "Microsoft Access Database File (OLE DB)" and Database file name = "C:\JSNorthWind.mdb".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3 - Build the project to be able to see JSNorthwindDataSet and ProductsTableAdapter as components in the Toolbox.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4 - Drag from the tool box JSNorthwindDataSet component and ProductsTableAdapter component.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now that the connection has been set, we can start using GridEX control in the project.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5 - Add GridEX Control to a tab in the Toolbox window by right clicking in the Toolbox window and click in "Choose Items..." menu. When the dialog appears, check "GridEX" control in the list and click OK.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Note: If GridEX control doesn't appear as an option in the list, click the Browse button and open Janus.Windows.GridEX.v3.dll.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6 - Drag a GridEX control from the toolbox into the Form designer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7 - Select GridEX control in the Form and set the following properties in the properties window:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           DataSource = JSNorthwindDataSet1&lt;br /&gt;&lt;br /&gt;           DataMember = Products&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;8 - Right click in the GridEX control and select "Retrieve Structure" menu. This action will force the control to read the data source structure and create the columns needed to show all the fields in the table.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;9 - Right click in the GridEX control and select "Designer" menu. In the Designer dialog, select Columns node under RootTable node and move the columns positions as you want using Move Up and Move Down toolbar buttons.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;10 - In the Load event of the Form fill the Products table in the dataset with the following code:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           In VB .Net&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : vbnet"&gt;&lt;br /&gt;                       ProductsTableAdapter1.Fill(JSNorthwindDataSet1.Products)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           In C#.Net&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush : csharp"&gt;&lt;br /&gt;                       productsTableAdapter1.Fill(jsNorthwindDataSet1.Products);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;         &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;11 - Press F5 and run the project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 204, 204);"&gt;Source Of        Information : Janus v3.5 Help Files for VS 2008&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6353430478574550535-1129371820936258537?l=codelibraries.blo
