<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Intersoft Solutions Corporate Blog &#187; 2011 R2</title>
	<atom:link href="http://blog.intersoftsolutions.com/category/2011-r2/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.intersoftsolutions.com</link>
	<description>All about development productivity – ASP.NET, Silverlight, WPF, iOS, Android, Windows Phone, Windows 8</description>
	<lastBuildDate>Sat, 21 Apr 2018 06:57:13 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.2.33</generator>
	<item>
		<title>UXFileUpload: Store Uploaded Files in Database</title>
		<link>http://blog.intersoftsolutions.com/2012/04/uxfileupload-store-uploaded-files-in-database/</link>
		<comments>http://blog.intersoftsolutions.com/2012/04/uxfileupload-store-uploaded-files-in-database/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 04:06:00 +0000</pubDate>
		<dc:creator><![CDATA[yudhiy]]></dc:creator>
				<category><![CDATA[2011 R2]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[ClientUI]]></category>
		<category><![CDATA[MVVM]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[UXFileUpload]]></category>

		<guid isPermaLink="false">https://intersoftpt.wordpress.com/?p=2667</guid>
		<description><![CDATA[Handling client files which are uploaded to a server is a common requirement for application. Files can be uploaded either to the FileSystem of your server or directly to the database as BLOB. However, there has been a lot of debate about the best way [...]]]></description>
				<content:encoded><![CDATA[<img width="421" height="269" src="http://blog.intersoftsolutions.com/wp-content/uploads/2014/09/image_thumb123.png" class="attachment-post-thumbnail wp-post-image" alt="image" style="float:right; margin:0 0 10px 10px;" /><p>Handling client files which are uploaded to a server is a common requirement for application. Files can be uploaded either to the FileSystem of your server or directly to the database as BLOB.</p>
<p>However, there has been a lot of debate about the best way to store the files. I’m sure there are many people who have strong favor for why one option is better than the other and vice versa.</p>
<p>So there must be interesting differences between the two solutions. Let’s have a brief comparison between these two options.</p>
<h2>FileSystem – Pros and Cons</h2>
<p>Storing the files on disk is much easier and simple to implement. Having the files in the filesystem <strong>allow accesing</strong> it from many different standard applications such FTP, web browser etc. and users as well, independent of access to the database itself etc.</p>
<p>Another advantage is that files on disk are <strong>easy to backup</strong>; you just copy the files to another location. This also makes it easier to do incremental backups; files that have already been backed up don’t need to be copied again.</p>
<p>Probably the <strong>most problematic issue</strong> is the loosely coupled nature of the files on disk as they have no strong relation with a record in the database. So, when you delete, say, a customer from the database, you may end up with an orphaned customer’s image/photo. There is no direct way to do a JOIN between the customer table and your images folder to determine what orphaned files you have left.</p>
<p>Nevertheless, to store uploaded files on disk, your web server needs <strong>permissions to write</strong> to the file system. This is easy to overcome by when you run your own server, but may prove to be more problematic in an ISP scenario.</p>
<h2>Database – Pros and Cons</h2>
<p>The loosely coupled nature of the files on disk problem will not happen when the uploaded files are stored in database. They have strong relation with a record in the database. It will automatically gets deleted when record of an employee is terminated.</p>
<p>Another advantage of storing files in a database is the fact that all data is contained in a single location. Make a backup of your database and you’re ready to go. No need to copy files, set up permission and so on.</p>
<p>Performance is probably one of the disadvantages of storing files in a database. Storing files in a database somehow degrading the performance as putting binary data into the database has obviously some overhead.</p>
<p>Another cons is that whenever you make a full backup of your database, all the files are included, whether they have been changed or not. If you copy your backups to a different machine or network for safety reasons, you need to move the entire backup file. With a file based solution, you can use diff programs that can determine which files have been changed since the last backup, and only download those.</p>
<p>Realizing that both methods have their pros and their cons, the question is: what to choose? Personally, due to its easier and simpler to be implemented, I’d prefer to store the uploaded files on FileSystem.</p>
<p>However, in this occasion, I will not discuss further on the pros and cons of the file storage matter. I’m going to present the solution on how to store the uploaded files of UXFileUpload ClientUI control to database.</p>
<h2>UXFileUpload Introduction</h2>
<p>UXFileUpload is a feature-rich file upload control supporting Silverlight 3, Silverlight 4, and WPF. It includes all standard features you expected in a file upload control, plus a multitude of innovative features that unique to UXFileUpload such as multiple upload worker process, comprehensive MVVM and commanding support, smart file chunk algorithm, very large file upload support, file-level cancellation, drag-and-drop files from operating system, and more.</p>
<p>Despite of the large number of features, UXFileUpload is designed for an ultimate ease-of-use. The simplest UXFileUpload control can be defined with only two properties set, the <em>ServiceUrl</em> and the <em>TargetFolder</em> property. You set the <em>ServiceUrl</em> property to a value that determines the absolute web address where the server-side handler is configured to accept the file upload requests. The <em>TargetFolder</em> determines where the files should be stored in the server.</p>
<p>ClientUI includes a built-in ASP.NET server-side handler that you can use to accept the file upload requests from the UXFileUpload control. When using the built-in server-side handler, you can set the <em>TargetFolder</em> to a relative path in your web server, for an instance, ~/Upload.</p>
<h2>Creating a Simple UXFileUpload Control</h2>
<p>The following code shows the most basic configuration of a UXFileUpload control.</p>
<p></p><pre class="crayon-plain-tag">&lt;Intersoft:UXFileUpload ServiceUrl="http://localhost:9041/UXFileUploadHandler.ashx"
                        TargetFolder="~/ClientBin/Assets/Documents" /&gt;</pre><p></p>
<p>You need to register the server-side upload handler in your ASP.NET web project in order for the UXFileUpload control to work properly. For more information configuring the server-side handler for the upload control, see <a href="http://www.intersoftpt.com/Support/ClientUI/Documentation/HowtoConfigureASPNETServersideHandlerforUXFileUpload.html">How-to: Configure ASP.NET Server-side Handler for UXFileUpload</a>.</p>
<p>When viewing the control in either design or runtime, you will find the results similar to the illustration in the following:</p>
<p><a href="http://intersoftpt.files.wordpress.com/2012/04/image6.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="image" border="0" alt="image" src="http://intersoftpt.files.wordpress.com/2012/04/image_thumb12.png" width="421" height="269"></a></p>
<p>With the upload control shown above, users can start to add files immediately by clicking the <strong>Add Files</strong> command in the toolbar and click on the <strong>Start Upload</strong> command to start uploading the selected files.</p>
<p>Once the <strong>Start Upload</strong> command is invoked, the file upload request will be handled by <em>UXFileUploadHandler.ashx</em> server-side upload handler. The uploaded files will be stored inside the <strong>Upload</strong> folder of the server.</p>
<p>In order to store the uploaded files to database instead of keep them in file system, we need to prepare following items.</p>
<ul>
<li>Add and configure database which will be used as file storage.
<li>Add and configure custom UXFileUpload handler. </li>
</ul>
<h2>Adding and Configuring Database</h2>
<p>A database, called <em>Files.mdf</em>, is added into the App_Data folder of the web project. This database has Files table which consist of following fields.</p>
<table border="1" cellspacing="0" cellpadding="2" width="359">
<tbody>
<tr>
<th valign="top" width="96">Column Name</th>
<th valign="top" width="123">Data Type</th>
<th valign="top" width="140">Allow Nulls</th>
</tr>
<tr>
<td valign="top" width="96">Id</td>
<td valign="top" width="123">uniqueidentifier</td>
<td valign="top" width="140">False</td>
</tr>
<tr>
<td valign="top" width="96">FileData</td>
<td valign="top" width="123">varbinary(MAX)</td>
<td valign="top" width="140">True</td>
</tr>
<tr>
<td valign="top" width="96">OriginalName</td>
<td valign="top" width="123">nvarchar(50)</td>
<td valign="top" width="140">False</td>
</tr>
<tr>
<td valign="top" width="96">DateCreated</td>
<td valign="top" width="123">datetime</td>
<td valign="top" width="140">False</td>
</tr>
</tbody>
</table>
<p>A Stored Procedure, <em>sprocFilesInsertSingleItem</em>, will be used to insert a single item of file into <em>Files.mdf</em> database.</p>
<p></p><pre class="crayon-plain-tag">INSERT INTO Files
(
	Id,
	FileUrl,
	FileData,
	OriginalName
)
VALUES
(
	@id,
	@FileUrl,
	@FileData,
	@originalName
)</pre><p></p>
<h2>Adding and Configuring Custom UXFileUpload Handler</h2>
<p>UXFileUpload implements a smart file chunk logic where multiple files can fit into a single upload request thus minimizing the client-server requests. With the smart file chunk logic, UXFileUpload allows you to upload very large files without have to worry about the performance and memory consumption in both client and server side. It is not necessary to change the maximum upload request length or other configuration in the server-side to accommodate the large files upload using the UXFileUpload control.</p>
<p>The built-in UXFileUpload server handler is designed with a great level of customizability, allowing you to inherit the UXFileUploadHandler class and override the properties as necessary. We can also customize the upload post processing logic, by overriding the provided methods.</p>
<p>We will create a custom UXFileUpload handler that will store the uploaded files into the database by overriding the <em>OnUploadCompleted</em> method. Within this method, we can find all the information we need, such as: the number of uploaded files; the file path of uploaded files; saved name of the uploaded files; etc. In <em>OnUploadCompleted</em> we have files that has been completely uploaded. This is important to ensure that there is no file problem such as corrupted files or incomplete files during the saving of the files to the database.</p>
<p>Generally, the custom handler will process each of uploaded files and do the following:</p>
<ul>
<li>Read and manipulate the file using <em>FileStream</em> class.
<li>Invoke <em>sprocFilesInsertSingleItem</em> stored procedure to store the file on <em>Files.mdf </em>database.
<li>Delete the specified file from the location specified in <em>TargetFolder</em> property of UXFileUpload. </li>
</ul>
<p>Open the UXFileUpload project and add a class library project, named as ExtendedUXFileUploadHandler.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2012/04/image51.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="image" border="0" alt="image" src="http://intersoftpt.files.wordpress.com/2012/04/image51_thumb.png" width="640" height="443"></a></p>
<p>Add the following code into the <em>DatabaseFileUploadHandler.cs</em> file.</p>
<p></p><pre class="crayon-plain-tag">public class DatabaseFileUploadHandler : UXFileUploadHandler
{
    protected override void OnUploadCompleted(List&lt;FileUploadInfoResponse&gt; uploadedFiles)
    {
        if (uploadedFiles.Count &gt; 0)
        {
            int FilesNumber = uploadedFiles.Count;

            for (int i = 0; i &lt; FilesNumber; i++)
            {
                byte[] fileData = ReadFile(uploadedFiles[i].TargetFilePath);
                string originalName = uploadedFiles[i].SavedName;

                using (SqlConnection mySqlConnection = new SqlConnection(
                      @"Data Source=.SQLEXPRESS;AttachDbFilename=|DataDirectory|Files.mdf;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Integrated Security=True;Connect Timeout=30;User Instance=True"))
                {
                    // Set up the Command object
                    SqlCommand myCommand = new SqlCommand("sprocFilesInsertSingleItem", mySqlConnection);
                    myCommand.CommandType = CommandType.StoredProcedure;

                    // Set up the ID parameter
                    SqlParameter prmId = new SqlParameter("@id", SqlDbType.UniqueIdentifier);

                    prmId.Value = uploadedFiles[i].ID;
                    myCommand.Parameters.Add(prmId);

                    // Set up the FileData parameter
                    SqlParameter prmFileData = new SqlParameter("@fileData ", SqlDbType.VarBinary);

                    prmFileData.Value = fileData;
                    prmFileData.Size = fileData.Length;
                    myCommand.Parameters.Add(prmFileData);

                    // Set up the OriginalName parameter
                    SqlParameter prmOriginalName = new SqlParameter("@originalName", SqlDbType.NVarChar, 50);
                    prmOriginalName.Value = uploadedFiles[i].SavedName;
                    myCommand.Parameters.Add(prmOriginalName);

                    // Execute the command, and clean up.
                    mySqlConnection.Open();
                    bool result = myCommand.ExecuteNonQuery() &gt; 0;
                    mySqlConnection.Close();
                }

                File.Delete(uploadedFiles[i].TargetFilePath);
            }
        }            

        base.OnUploadCompleted(uploadedFiles);
    }

    private static byte[] ReadFile(string filePath)
    {
        byte[] buffer;
        FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);

        try
        {
            int length = (int)fileStream.Length; // get file length
            buffer = new byte[length];           // create buffer
            int count;                           // actual number of bytes read
            int sum = 0;                         // total number of bytes read

            // read until Read method returns 0 (end of the stream has been reached)
            while ((count = fileStream.Read(buffer, sum, length - sum)) &gt; 0)
            {
                sum += count; // sum is a buffer offset for next reading
            }
        }
        finally
        {
            fileStream.Close();
        }

        return buffer;
    }
}</pre><p></p>
<p>The <em>ReadFile</em> function will reads the source file into a byte array. The <em>Read</em> method of <em>FileStream</em> object returns zero only after reaching the end of the stream. Otherwise, <em>Read</em> always reads at least one byte from the stream before returning. Finally, close the current stream and releases any resources associated with the current stream when <em>Read</em> method returns zero.</p>
<p>After completing the read process and set up the required parameter, <em>fileData</em> byte array will then be inserted into <em>Files</em> table by invoking the <em>sprocFilesInsertSingleItem</em> stored procedure.</p>
<p>Finally, delete the uploaded file from the specified path after execute the stored procedure.</p>
<p>Before running the solution, build the project and add the reference of <strong>ExtendedUXFileUploadHandler.dll</strong> into the web project. Then re-define the handler in Web.Config file into the following.</p>
<p></p><pre class="crayon-plain-tag">&lt;configuration&gt;
  ...
  &lt;system.web&gt;
        &lt;compilation debug="true" targetFramework="4.0" /&gt;
      &lt;httpHandlers&gt;
        &lt;add verb="*" path="UXFileUploadHandler.ashx"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="ExtendedUXFileUploadHandler.DatabaseFileUploadHandler, ExtendedUXFileUploadHandler"/&gt;
      &lt;/httpHandlers&gt;
    &lt;/system.web&gt;
  &lt;system.webServer&gt;
    &lt;handlers&gt;
      &lt;add name="UXFileUpload" verb="*" path="UXFileUploadHandler.ashx"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="ExtendedUXFileUploadHandler.DatabaseFileUploadHandler, ExtendedUXFileUploadHandler" /&gt;      
    &lt;/handlers&gt;
  &lt;/system.webServer&gt;
  ...
&lt;/configuration&gt;</pre><p></p>
<p>Save all the changes and run the project.</p>
<p>Add files to be uploaded and click <strong>Start Upload</strong>. After the uploading process completed, the uploaded files is no longer available in the <em>TargetFolder</em> location. The file is now stored in database.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2012/04/image11.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="image" border="0" alt="image" src="http://intersoftpt.files.wordpress.com/2012/04/image1_thumb.png" width="400" height="350"></a></p>
<p><a href="http://intersoftpt.files.wordpress.com/2012/04/image5.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="image" border="0" alt="image" src="http://intersoftpt.files.wordpress.com/2012/04/image_thumb11.png" width="640" height="87"></a></p>
<p>In this post, we have learnt how to store uploaded files of UXFileUpload to database by overriding the UXFileUpload handler.</p>
<p>Click <a href="http://www.intersoftpt.com/tdn/downloads/BindUplodedFilesUsingMVVMPattern.zip">here</a> to download the sample project and feel free to drop me a line in the comment box if you find that this post useful, or have any questions and feedback regarding this topic.</p>
<p>Regards,<br />Yudi Ariawan</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2012/04/uxfileupload-store-uploaded-files-in-database/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Create Rich Outlook Style Silverlight Application in Minutes</title>
		<link>http://blog.intersoftsolutions.com/2012/04/create-rich-outlook-style-silverlight-application-in-minutes/</link>
		<comments>http://blog.intersoftsolutions.com/2012/04/create-rich-outlook-style-silverlight-application-in-minutes/#comments</comments>
		<pubDate>Mon, 16 Apr 2012 10:04:52 +0000</pubDate>
		<dc:creator><![CDATA[yudhiy]]></dc:creator>
				<category><![CDATA[2011 R2]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[ClientUI]]></category>
		<category><![CDATA[MVVM]]></category>
		<category><![CDATA[Office Ribbon]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[UXRibbon]]></category>

		<guid isPermaLink="false">https://intersoftpt.wordpress.com/?p=2641</guid>
		<description><![CDATA[Recently I was assigned to create a simple Silverlight project that shows a list of data with full editing support. The first thing that comes to my mind is using the ClientUI project template as a first step to start working on this task. After [...]]]></description>
				<content:encoded><![CDATA[<img width="466" height="270" src="http://blog.intersoftsolutions.com/wp-content/uploads/2014/09/image_thumb39-604x350.png" class="attachment-post-thumbnail wp-post-image" alt="" style="float:right; margin:0 0 10px 10px;" /><p>Recently I was assigned to create a simple Silverlight project that shows a list of data with full editing support. The first thing that comes to my mind is using the ClientUI project template as a first step to start working on this task.</p>
<p>After spending about 30 minutes trying all the project templates that come with Intersoft WebUI Studio 2011 R2 SP1, I decided to start the project using Intersoft ClientUI Ribbon Application template. This project template allows the creation of rich Silverlight application with rich Ribbon interface and integrated navigation interfaces.</p>
<p>Intersoft ClientUI Ribbon Application template is ideal to build business applications with relatively large modules and features. The template ships with predefined MVVM infrastructure that demonstrates how to use UXRibbonBar as a command placeholder that dynamically change its content based on the active module. It also includes fully-functional MVVM examples such as Mail and Calendar which are implemented with the advanced data controls available in ClientUI.</p>
<p>Building rich application using this Ribbon project template is easy and straightforward. In this blog post, I’ll share some of my experiences building the project such as adding the navigation, customizing the ribbon through XML configuration file, and drop-in the data grid to display data.</p>
<p>Let’s get started!</p>
<h2>Creating a new project from the Ribbon Application project template</h2>
<p>We’ll start by creating a new Silverlight project using Intersoft ClientUI Ribbon Application project template. This project template is available after install the Premier edition or Intersoft WebUI Studio 2011 R2 (or newer) for Silverlight and WPF. To create a new Intersoft ClientUI Ribbon Application project, open Visual Studio and select File &gt; New &gt; Project… (or press Ctrl+Shift+N) from the menu bar. Select Intersoft ClientUI Ribbon Application from New Project window. Enter the appropriate details to create the new application project.</p>
<p>One nice feature of Intersoft project template on New Project window of Visual Studio is that you can have the Intersoft project template grouped under Intersoft Solutions node of Installed Templates tree view.</p>
<p><img alt="Intersoft ClientUI Ribbon Application Project Template" src="http://intersoftpt.files.wordpress.com/2012/04/image_thumb.png" width="642" height="411"></p>
<p>The project template contains several predefined configuration, assembly references, and code files such as Assets, Factory, Selectors and several XAML files. Click <a href="http://www.intersoftpt.com/Support/ClientUI/Documentation/WalkthroughCreateANewSilverlightRibbonApplicationFromProjectTemplate.html">here</a> to learn more about the structure of this project template.</p>
<p>When you run the project for the first time, you’ll see a fully-functional user interface such as shown below.</p>
<p><img alt="Project's User Interface" src="http://intersoftpt.files.wordpress.com/2012/04/image_thumb1.png" width="550" height="482"></p>
<h2>Creating Inventory UXRibbon Structure</h2>
<p>I’m going to add a new module which will show list of products. The module will have its own ribbon bar control which employs three buttons: add new data; edit selected item; and delete selected item.</p>
<p><img alt="Inventory Module Ribbon Button" src="http://intersoftpt.files.wordpress.com/2012/04/image_thumb2.png" width="642" height="70"></p>
<p>Three image files are added into the [SilverligthProject]AssetsImagesInventory folder as the icon for each of the button.</p>
<p></p><pre class="crayon-plain-tag">&lt;?xml version="1.0" encoding="utf-8" ?&gt;
&lt;RibbonBar Name="Inventory"&gt;
  &lt;RibbonTab Header="Home" IsSelected="True"
             ResizeOrder=""
             KeyTipAccessText="H"&gt;
    &lt;RibbonTabGroup Name="Edit" Header="Products" MinimumSize="Large" IsCollapsible="false"
                    Icon="/ClientUIRibbon1;component/Assets/Images/Inventory/Inventory.png"&gt;
      &lt;RibbonButton Content="Add New" MinimumSize="Large" TooltipHeader="New Item" TooltipContent="Create a New Item."
                    LargeIcon="/ClientUIRibbon1;component/Assets/Images/Inventory/AddExistingStandard_32.png"/&gt;
      &lt;RibbonButton Content="Edit" MinimumSize="Large" TooltipHeader="Edit Selected Item" TooltipContent="Edit Selected Item."
                    LargeIcon="/ClientUIRibbon1;component/Assets/Images/Inventory/Edit32.png"/&gt;
      &lt;RibbonButton Content="Delete" MinimumSize="Large" TooltipHeader="Delete Selected Item" TooltipContent="Delete Selected Item."
                    LargeIcon="/ClientUIRibbon1;component/Assets/Images/Inventory/Delete.png"/&gt;
    &lt;/RibbonTabGroup&gt;
  &lt;/RibbonTab&gt;

&lt;/RibbonBar&gt;</pre><p></p>
<p>Instead of declaring the ribbon structure directly in the xaml page, the ribbon structure is defined in an xml file, RibbonInventoryData.xml. The file is located inside the [SilverlightProject]AssetsData folder.</p>
<p>RibbonFactory.cs class will read each element, attributes of the xml file; parse them to the appropriate object; and create the ribbon to be displayed.</p>
<p>Once the ribbon structure is configured, we need to initialize the ribbon data source and register the Inventory module so that the ribbon tab will be dynamically updated when user select Inventory module.</p>
<p>To initialize the ribbon data source, find InitializeRibbonBar() method in the RibbonPageViewModel.cs class and add a line as shown in the following code. *The class can be found in [SilverlightProject]ViewModels folder.</p>
<p></p><pre class="crayon-plain-tag">private void InitializeRibbonBar()
{
    // Initializes application menu
    this.RibbonApplicationMenu = RibbonFactory.CreateMenu(RibbonDataFolder + "RibbonBarData.xml");

    // Initializes ribbon data sources
    this.RibbonData = new Dictionary&lt;ModuleType, string&gt;();
    this.RibbonData.Add(ModuleType.Overview, "RibbonOverviewData.xml");
    ...
    this.RibbonData.Add(ModuleType.Inventory, "RibbonInventoryData.xml");
}</pre><p></p>
<p>Before running the project and showing the ribbon structure of Inventory module, we need to register the Inventory module in the UpdateRibbonTab method. UpdateRibbonTab is the method that will be invoked when users select a module.</p>
<p></p><pre class="crayon-plain-tag">internal void UpdateRibbonTab(ModuleType moduleType, object context)
{
    ...

    switch (moduleType)
    {
        case ModuleType.Calendar:
        case ModuleType.Contacts:
        case ModuleType.Inventory:
        case ModuleType.Mail:
            this.RibbonContextualGroups = RibbonFactory.CreateRibbonContextualTabGroups(RibbonDataFolder + this.RibbonData[moduleType]);
            this.RibbonTabs = RibbonFactory.CreateRibbonTabs(RibbonDataFolder + this.RibbonData[moduleType], context);
            break;

        default:
            this.RibbonTabs = RibbonFactory.CreateRibbonTabs(RibbonDataFolder + this.RibbonData[ModuleType.Overview], context);
            break;
    }

    this.ActiveModule = moduleType;
}</pre><p></p>
<p>Save all the changes and run the Silverlight application project<strong>.</strong></p>
<p>The ribbon structure for Inventory module has been successfully added. When users click/select the Inventory module from the navigation pane, the Add New button; Edit button; and Delete button will be shown.</p>
<p><img alt="UXRibbon for Inventory Module" src="http://intersoftpt.files.wordpress.com/2012/04/image_thumb3.png" width="642" height="383"></p>
<h2>Displaying The Product List with UXGridView</h2>
<p>In this part, we are going to display a list of products. The list will be presented in an UXGridView control.</p>
<p>In this project, UXGridView is bound to WCF RIA Services. In this post, I will not describe in detail about how to configure the application to become WCF RIA Services-enabled; creating the data model; etc. I’d like to suggest you to refer to Intersoft ClientUI MVVM Data Application (WCF RIA SP1) project template. To learn more, see <a href="http://www.intersoftpt.com/Support/ClientUI/Docs/WalkthroughCreateNewIntersoftClientUIMVVMDataApplicationWCFRiaSP1.html">Walkthrough: Create New Intersoft ClientUI MVVM Data Application (WCF RIA SP1) Template</a>.</p>
<p>Once the data repository of Products is completely added, Add UXGridView control and bind the ItemsSource property with Items property from ProductsViewModel; and bind each column of the UXGridView to their corresponding property of ProductsViewModel respectively.</p>
<p></p><pre class="crayon-plain-tag">&lt;Intersoft:UXGridView Intersoft:DockPanel.IsFillElement="True" ItemsSource="{Binding Path=Items}"
                        AutoGenerateColumns="False"&gt;
    &lt;Intersoft:UXGridView.Columns&gt;
        &lt;Intersoft:UXGridViewTextColumn Header="Category ID" Binding="{Binding CategoryID}"/&gt;
        &lt;Intersoft:UXGridViewTextColumn Header="Product ID" Binding="{Binding ProductID}"/&gt;
        &lt;Intersoft:UXGridViewTextColumn Header="Product Name" Binding="{Binding ProductName}"/&gt;
        &lt;Intersoft:UXGridViewTextColumn Header="Unit Price" Binding="{Binding UnitPrice}"/&gt;
        &lt;Intersoft:UXGridViewTextColumn Header="Units In Stock" Binding="{Binding UnitsInStock}"/&gt;
        &lt;Intersoft:UXGridViewTextColumn Header="Units On Order" Binding="{Binding UnitsOnOrder}"/&gt;
        &lt;Intersoft:UXGridViewTextColumn Header="Quantity Per Unit" Binding="{Binding QuantityPerUnit}"/&gt;
    &lt;/Intersoft:UXGridView.Columns&gt;
&lt;/Intersoft:UXGridView&gt;</pre><p></p>
<p>Save all the changes and run the project.</p>
<p><img alt="UXGridView in Inventory Module" src="http://intersoftpt.files.wordpress.com/2012/04/image_thumb4.png" width="642" height="383"></p>
<p>The Inventory module now has had a ribbon structure and will display a list of product in the ContentFrame.</p>
<h2>Adding Commanding and Enabling/Disabling UXRibbon Button Based on UXGridView Selected Item.</h2>
<p>In this part, I’d like to set the enable/disable state of each ribbon button based on the selected item of UXGridView. By default, the Add New UXRibbonButton is enabled since user should be able to add new item at any time. When no item is selected in UXGridView, Edit and Delete button should be disabled. They will be enabled when item(s) are selected.</p>
<p>In UXGridView, when a row is selected, the SelectedItem property will be automatically synchronized. I can bind this property to my ViewModel to capture the currently selected item. This property is then converted to a Visible/Collapsed and then consumed by IsEnabled property of UXRibbon button to determine whether the UXRibbon button is enabled or not.</p>
<p>Several questions arise when I started to check the feasibility to implement this approach.</p>
<ul>
<li>The Inventory.xaml page and the UXRibbon are located in different view. Each of them has their own ViewModel. Implementing converter seems not as easy as I thought earlier.
<li>The xml file of ribbon structure is processed by RibbonFactory.cs class by implementing parser. I need to ensure whether the ribbon button parser is equipped with binding parser or not. </li>
</ul>
<p>I’m pretty sure there must be an elegant solution for a simple scenario such as this. So I decided to explore this project and hope to find an example that can be applied to my scenario.</p>
<p>After spending about 15 minutes exploring the project, clues are spotted when Mail module is opened. Some of the ribbon buttons are disabled when no message is selected.</p>
<p>This is exactly what I’m looking for!</p>
<p>It turns out that DelegateCommand play an important role in such scenario as shown in the Mail module. ClientUI provides DelegateCommand, a specialized command object that can be used to handle a delegate directly in the view model, and still can be bound to the view through binding. Furthermore, the DelegateCommand takes advantage of the routed command concept in which the IsEnabled state of the command sources will be automatically synchronized depending on whether the command can execute.</p>
<p>Many thanks to ClientUI development team who has extended the commanding framework to support MVVM through built-in DelegateCommand class. Not only this, they also have made this project template brilliantly. I mean it and don’t intend to exaggerate about what I say. Building Silverlight application based on Intersoft’s project template is considerably easy, even for beginners. I started to learn the implementation of DelegateCommand on Mail module and reset the plan to implement this scenario to be as follow.</p>
<p>There are three UXRibbon button: Add New; Edit; and Delete. Each button is bound to the AddAction; EditAction; and DeleteAction DelegateCommand respectively.</p>
<p>RibbonInventoryData.xml</p>
<p></p><pre class="crayon-plain-tag">&lt;?xml version="1.0" encoding="utf-8" ?&gt;
&lt;RibbonBar Name="Inventory"&gt;
  &lt;RibbonTab ...&gt;
    &lt;RibbonTabGroup Name="Edit" ...&gt;
      &lt;RibbonButton Content="Add New" MinimumSize="Large" TooltipHeader="New Item" TooltipContent="Create a New Item."
                    LargeIcon="/ClientUIRibbon1;component/Assets/Images/Inventory/AddExistingStandard_32.png"
                    Command="{Binding AddAction}" CommandParameter="AddNew"/&gt;
      &lt;RibbonButton Content="Edit" MinimumSize="Large" TooltipHeader="Edit Selected Item" TooltipContent="Edit Selected Item."
                    LargeIcon="/ClientUIRibbon1;component/Assets/Images/Inventory/Edit32.png"
                    Command="{Binding EditAction}" CommandParameter="Edit"/&gt;
      &lt;RibbonButton Content="Delete" MinimumSize="Large" TooltipHeader="Delete Selected Item" TooltipContent="Delete Selected Item."
                    LargeIcon="/ClientUIRibbon1;component/Assets/Images/Inventory/Delete.png"
                    Command="{Binding EditAction}" CommandParameter="Delete"/&gt;
    &lt;/RibbonTabGroup&gt;
  &lt;/RibbonTab&gt;
  ...  
&lt;/RibbonBar&gt;</pre><p></p>
<p>ProductsViewModel.cs</p>
<p></p><pre class="crayon-plain-tag">public class ProductsViewModel : EditableGridViewModelBase&lt;Product&gt;
{
    public ProductsViewModel()
    {
        this.AddAction = new DelegateCommand(AddCommandAction, CanAddAction);
        this.EditAction = new DelegateCommand(EditCommandAction, CanEditAction);
        this.DeleteAction = new DelegateCommand(DeleteCommandAction, CanDeleteAction);
    }

    public DelegateCommand AddAction
    {
        get;
        set;
    }

    public DelegateCommand EditAction
    {
        get;
        set;
    }

    public DelegateCommand DeleteAction
    {
        get;
        set;
    }

    ...

    private bool CanAddAction(object obj)
    {
        //this method validate whether or not AddNew button is active
        //In this sample, I will keep this button to be always active
        return true;
    }

    private bool CanEditAction(object obj)
    {
        if (this.SelectedProductItem != null)
            return true;
        return false;
    }

    private bool CanDeleteAction(object obj)
    {
        if (this.SelectedProductItem != null)
            return true;
        return false;
    }

    private void AddCommandAction(object obj)
    {
        MessageBoxServiceProvider.Show("add new row is performed", "Information",
                    Intersoft.Client.UI.Aqua.UXDesktop.MessageBoxButton.OK, Intersoft.Client.UI.Aqua.UXDesktop.MessageBoxImage.Information, null);
    }

    private void EditCommandAction(object obj)
    {
        MessageBoxServiceProvider.Show("edit selected row is performed", "Information",
                    Intersoft.Client.UI.Aqua.UXDesktop.MessageBoxButton.OK, Intersoft.Client.UI.Aqua.UXDesktop.MessageBoxImage.Information, null);
    }

    private void DeleteCommandAction(object obj)
    {
        MessageBoxServiceProvider.Show("delete selected row is performed", "Information",
            Intersoft.Client.UI.Aqua.UXDesktop.MessageBoxButton.OK, Intersoft.Client.UI.Aqua.UXDesktop.MessageBoxImage.Information, null);
    }
}</pre><p></p>
<p><img alt="Binding Command to UXRibbonButton" src="http://intersoftpt.files.wordpress.com/2012/04/image_thumb5.png" width="638" height="482"></p>
<p>In the next series of my blog post, I will add a final touch to this Ribbon application by displaying detail information of data (for adding and editing operation) in a form.</p>
<h2>Download Sample Code</h2>
<p>For your reference, the demo project can be downloaded <a href="http://www.intersoftpt.com/tdn/downloads/ClientUIRibbon1.zip">here</a>.</p>
<p>I hope that this project will help you to prepare a simple demo project and provide you with insights about how easy to start developing Silverlight project using Intersoft Silverlight project template.</p>
<p>I&#8217;d love to hear your feedback so be sure to drop your comments in the box below.</p>
<p>Regards,<br />Yudi</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2012/04/create-rich-outlook-style-silverlight-application-in-minutes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deploy ClientUI Report Application Separately from Report Server</title>
		<link>http://blog.intersoftsolutions.com/2012/03/deploy-clientui-report-application-separately-from-report-server/</link>
		<comments>http://blog.intersoftsolutions.com/2012/03/deploy-clientui-report-application-separately-from-report-server/#comments</comments>
		<pubDate>Thu, 01 Mar 2012 11:22:17 +0000</pubDate>
		<dc:creator><![CDATA[yudhiy]]></dc:creator>
				<category><![CDATA[2011 R2]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[ClientUI]]></category>
		<category><![CDATA[Deployment Scenarios]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">https://intersoftpt.wordpress.com/?p=2596</guid>
		<description><![CDATA[Today I start to create a simple Silverlight project that uses Intersoft SqlReportViewer. This project will be used to display Microsoft SQL Server 2008 Reporting Services (further abbreviated as SSRS) document. The objective is to create SqlReportViewer application where the SSRS is located in different [...]]]></description>
				<content:encoded><![CDATA[<img width="466" height="270" src="http://blog.intersoftsolutions.com/wp-content/uploads/2014/09/projecttemplate_thumb1-604x350.png" class="attachment-post-thumbnail wp-post-image" alt="ProjectTemplate" style="float:right; margin:0 0 10px 10px;" /><p>Today I start to create a simple Silverlight project that uses Intersoft <strong>SqlReportViewer</strong>. This project will be used to display <strong>Microsoft SQL Server 2008 Reporting Services</strong> (further abbreviated as SSRS) document. The objective is to create <strong>SqlReportViewer</strong> application where the SSRS is located in different server.</p>
<p>The first step begins with creating a new project using Intersoft ClientUI MVVM Application project template.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2012/03/projecttemplate.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="ProjectTemplate" border="0" alt="ProjectTemplate" src="http://intersoftpt.files.wordpress.com/2012/03/projecttemplate_thumb.png" width="644" height="446"></a></p>
<p>After the project creation completed, you need to configure SqlReportViewer at first. Specifically, the following tasks are required in order to start using SqlReportViewer in your application:</p>
<ul>
<li>Register the SqlReportViewer rendering engine in SQL Reporting Services.
<li>Register the SqlReportViewer handler and SQL Reporting Services web service in the web project.
<li>Set the SqlReportViewer proxy and web service property. </li>
</ul>
<p>For more information on how to configure SqlReportViewer for first time use, it is suggested to check ClientUI documentation, <a href="http://www.intersoftpt.com/Support/ClientUI/Documentation/WalkthroughSqlReportViewerFirstTime.html">Walkthrough: Configuring SqlReportViewer for First Time Use</a>.</p>
<p></p><pre class="crayon-plain-tag">&lt;Intersoft:SqlReportViewer x:Name="SqlReportViewer1"
                Intersoft:DockPanel.IsFillElement="True"
                ZoomMode="FitToWidth"
                ReportProxyHandler="http://Saturn-PC/MySqlReportViewer/ReportDocumentStreamer.ashx"
                ReportServer="http://Uranus-PC/ReportServer"
                ReportExecutionServicePage="ReportExecution2005.asmx"
                ReportServicePage="ReportService2010.asmx"
                RenderingExtensionName="Chart_Intersoft_XAML"
                ReportName="/Northwind Reports/ProductSalesReport"
                LoadingMode="OnDemand"&gt;
&lt;/Intersoft:SqlReportViewer&gt;</pre><p></p>
<p>As you may see on the XAML code, the <strong>ReportProxyHandler</strong> and the <strong>ReportServer</strong> properties are set to different location of server. The project will be deployed on the deployment server, Saturn-PC. There will be another server, Uranus-PC, which will act as the SSRS server.</p>
<p>For this kind of scenario, you need to create a custom <strong>SqlReportViewer</strong> handler. The reason is because by default, the Intersoft SqlReportViewer handler uses Impersonate as the <strong>TokenImpersonationLevel</strong>. This means that the server process can impersonate the client’s security context on its local system. The server cannot impersonate the client on remote server.</p>
<p>The screenshot below shows what will happen when we use the default SqlReportViewer handler.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2012/03/exception.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="Exception" border="0" alt="Exception" src="http://intersoftpt.files.wordpress.com/2012/03/exception_thumb.png" width="644" height="424"></a></p>
<p>The impersonation level and network credential are handled by the <strong>SqlReportViewer</strong> handler. We need to add a class which inherits <strong>SqlReportViewerHandler</strong>, then set the <strong>ImpersonationLevel</strong> and <strong>NetworkCredential</strong> to the proper value.</p>
<p>Open the project and add a class library project, named as <strong>ExtendedSqlReportServer</strong>.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2012/03/addextendedclass.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="AddExtendedClass" border="0" alt="AddExtendedClass" src="http://intersoftpt.files.wordpress.com/2012/03/addextendedclass_thumb.png" width="644" height="446"></a></p>
<p>Add the following code into the Class1.cs file.</p>
<p></p><pre class="crayon-plain-tag">//NewClass1 inherits from Intersoft.SqlReportViewer.Server.SqlReportViewerHandler
class Class1:Intersoft.SqlReportViewer.Server.SqlReportViewerHandler
{
    private System.Security.Principal.TokenImpersonationLevel newImpersonationLevel;
    private System.Net.NetworkCredential newWindowsClientCredential;

    //Override the ImpersonationLevel property
    //modify the default Impersonation to None
    public override System.Security.Principal.TokenImpersonationLevel ImpersonationLevel
    {
        get
        {
            newImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.None;
            return newImpersonationLevel;
        }
        set
        {
            newImpersonationLevel = value;
        }
    }

    //Override the WindowsClientCredential property
    //set the NetworkCredential to the proper credential of SqlReport Report Server
    public override System.Net.NetworkCredential WindowsClientCredential
    {
        get
        {
            newWindowsClientCredential = new System.Net.NetworkCredential("username", "password", "Saturn-PC");
            return newWindowsClientCredential;
        }
        set
        {
            newWindowsClientCredential = value;
        }
    }
}</pre><p></p>
<p>As seen in the code above, the <strong>ImpersonationLevel</strong> property is overridden to return <strong>TokenImpersonationLevel.None</strong>, while the <strong>WindowClientCredential</strong> property is overriden to return the <strong>NetworkCredential</strong> object with proper user credential who has sufficient security permission to access the SSRS server. Of course, you should encrypt or obfuscate your code for the best security, especially when it contains security sensitive information.</p>
<p>After building the <strong>ExtendedSqlReportServer</strong> project, add the <strong>ExtendedSqlReportServer</strong> assembly file as <strong>References</strong> into the Web project. Finally, you redefine the <strong>SqlReportViewer</strong> handler using the new handler assembly.</p>
<p>In this post, you have learnt how to configure <strong>SqlReportViewer</strong> where the SqlReport service is deployed on remote server.</p>
<p>Should you find this po<a name="_GoBack"></a>st useful, or have any questions or feedback, please feel free to drop me a line in the comment box.</p>
<p>Best Regards,<br />Yudi Ariawan</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2012/03/deploy-clientui-report-application-separately-from-report-server/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Enable HTTPS mode in SqlReportViewer and SQL Report Service</title>
		<link>http://blog.intersoftsolutions.com/2012/03/enable-https-mode-in-sqlreportviewer-and-sql-report-service/</link>
		<comments>http://blog.intersoftsolutions.com/2012/03/enable-https-mode-in-sqlreportviewer-and-sql-report-service/#comments</comments>
		<pubDate>Thu, 01 Mar 2012 07:30:23 +0000</pubDate>
		<dc:creator><![CDATA[handy23]]></dc:creator>
				<category><![CDATA[2011 R2]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[ClientUI]]></category>
		<category><![CDATA[Customization]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">https://intersoftpt.wordpress.com/?p=2587</guid>
		<description><![CDATA[Normally, SQL Report Service (SSRS) is configured to run in HTTP by default. In this blog post, I will show you the steps required to configure the SSRS to use HTTPS mode, and how to configure the SqlReportViewer control to target the HTTPS-enabled report server. [...]]]></description>
				<content:encoded><![CDATA[<img width="466" height="270" src="http://blog.intersoftsolutions.com/wp-content/uploads/2014/09/ssrs-configuration_thumb1-604x350.png" class="attachment-post-thumbnail wp-post-image" alt="SSRS Configuration" style="float:right; margin:0 0 10px 10px;" /><p>Normally, <strong>SQL Report Service (SSRS)</strong> is configured to run in <strong>HTTP</strong> by default. In this blog post, I will show you the steps required to configure the SSRS to use HTTPS mode, and how to configure the <strong>SqlReportViewer</strong> control to target the HTTPS-enabled report server.</p>
<p>First, you can set <strong>HTTPS</strong> mode in <strong>SSRS</strong> by clicking <strong>Advanced</strong> button.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2012/03/ssrs-configuration.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="SSRS Configuration" border="0" alt="SSRS Configuration" src="http://intersoftpt.files.wordpress.com/2012/03/ssrs-configuration_thumb.png" width="639" height="472"></a></p>
<p>When configuring <strong>HTTPS</strong>, please use a valid <strong>Certificate</strong> for HTTPS. In this case, please contact your <strong>Certificate vendor</strong>.</p>
<p>Once <b>SSRS</b> has been configured <strong>HTTPS</strong>, it will look like the following screenshot.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2012/03/ssrs-https-configuration.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="SSRS HTTPS Configuration" border="0" alt="SSRS HTTPS Configuration" src="http://intersoftpt.files.wordpress.com/2012/03/ssrs-https-configuration_thumb.png" width="638" height="428"></a></p>
<p>Now that the <strong>SSRS</strong> server has been changed to <strong>HTTPS</strong>, the <strong>ReportServer</strong> property of the <strong>SqlReportViewer</strong> needs to be changed as well.</p>
<p>Example:</p>
<p>&lt;Intersoft: SQLReportViewer <strong> ReportServer</strong>=”https://win7-x32-1:443/ReportServer”/&gt;</p>
<p>Finally, in order to support HTTPS mode completely, you need one more additional setting in the web.config of the web application that hosts the Silverlight application. Otherwise, you will get the error below.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2012/03/error-configuration.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="Error Configuration" border="0" alt="Error Configuration" src="http://intersoftpt.files.wordpress.com/2012/03/error-configuration_thumb.png" width="638" height="401"></a></p>
<p>To resolve the error, change the security mode from <strong>TransportCredentialOnly </strong>to <strong>Transport </strong>in web.config. These changes are important due to the nature of HTTPS which requires more secure communication channel. </p>
<p>The code in the web.config looks like the following.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2012/03/config-changes.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="Config Changes" border="0" alt="Config Changes" src="http://intersoftpt.files.wordpress.com/2012/03/config-changes_thumb.png" width="631" height="179"></a></p>
<p>If you have any difficulties or issues regarding this scenario, please feel free to leave your comment, or post your questions to <a href="http://www.intersoftpt.com/Community" target="_blank">Intersoft Community</a>.</p>
<p>Warm Regards,<br />Handy</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2012/03/enable-https-mode-in-sqlreportviewer-and-sql-report-service/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Customize UXFlow Appearance Based on Item Position</title>
		<link>http://blog.intersoftsolutions.com/2012/02/customize-uxflow-appearance-based-on-item-position/</link>
		<comments>http://blog.intersoftsolutions.com/2012/02/customize-uxflow-appearance-based-on-item-position/#comments</comments>
		<pubDate>Wed, 29 Feb 2012 12:45:18 +0000</pubDate>
		<dc:creator><![CDATA[handy23]]></dc:creator>
				<category><![CDATA[2011 R2]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[ClientUI]]></category>
		<category><![CDATA[Customization]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">https://intersoftpt.wordpress.com/?p=2572</guid>
		<description><![CDATA[The latest ClientUI release (2011 R2 SP1) introduces several enhancements for UXFlow control. Some of the significant enhancements are the new AutoReflection property and PositionStates visual states. They are introduced to set different styles in UXFlowItem according to its position. The new PositionStates enhancement enables [...]]]></description>
				<content:encoded><![CDATA[<img width="585" height="270" src="http://blog.intersoftsolutions.com/wp-content/uploads/2014/09/position_thumb1-604x279.png" class="attachment-post-thumbnail wp-post-image" alt="Customize UXFlowItem based on the position" style="float:right; margin:0 0 10px 10px;" /><p>The latest ClientUI release (2011 R2 SP1) introduces several enhancements for UXFlow control. Some of the significant enhancements are the new <strong>AutoReflection</strong> property and <strong>PositionStates</strong> visual states. They are introduced to set different styles in <strong>UXFlowItem</strong> according to its position. </p>
<p>The new <strong>PositionStates</strong> enhancement enables you to customize the layout and appearance of the item based on the flow position. See the following illustration.</p>
<p><font face="Segoe UI">
<p></font><font face="Segoe UI"><a href="http://intersoftpt.files.wordpress.com/2012/02/position.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="Customize UXFlowItem based on the position" border="0" alt="Customize UXFlowItem based on the position" src="http://intersoftpt.files.wordpress.com/2012/02/position_thumb.png" width="628" height="279"></a></font></a></p>
<p>In this blog, I’m going to share how to achieve the above scenario in a step-by-step walkthrough.</p>
<p>1. Put additional text to the UXFlowItem.</p>
<p>You will need Microsoft Expression Blend to edit the ItemContainerStyle of the UXFlow control.<a href="http://intersoftpt.files.wordpress.com/2012/02/item-container.png"><font face="Segoe UI"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="Edit ItemContainerStyle" border="0" alt="Edit ItemContainerStyle" src="http://intersoftpt.files.wordpress.com/2012/02/item-container_thumb.png" width="623" height="326"></font></a></p>
<p>After the generated template is shown, put the text in <strong>CoverElementPerspective</strong>. <strong>CoverElementPerspective</strong> contains the <strong>ImageLoader</strong> of <strong>UXFlowItem</strong>. That’s the reason why the text requires to be put in that element. In this case, TextBlock is used as the text.</p>
<p>To easily maintain the layout, let’s use Grid and StackPanel container with configuration as shown below:</p>
<p></p><pre class="crayon-plain-tag">&lt;Intersoft:ContentPerspective x:Name="CoverElementPerspective" AutoRefresh="False" EnableReflection="{TemplateBinding EnableReflection}" VerticalContentAlignment="Bottom"&gt;
     &lt;Border Background="Silver" BorderBrush="#8D8D8D" BorderThickness="2" CornerRadius="8"&gt;
          &lt;StackPanel&gt;
                 &lt;Grid &gt;
                        &lt;Grid.ColumnDefinitions&gt;
                              &lt;ColumnDefinition Width="Auto"/&gt;
                                   &lt;ColumnDefinition/&gt;
                                   &lt;ColumnDefinition Width="Auto"/&gt;
                              &lt;/Grid.ColumnDefinitions&gt;
                        &lt;Grid.RowDefinitions&gt;
                        &lt;RowDefinition Height="Auto"/&gt;
                        &lt;RowDefinition/&gt;
                        &lt;RowDefinition Height="Auto"/&gt;
                        &lt;/Grid.RowDefinitions&gt;
                        &lt;Intersoft:ContentTransformer x:Name="ContentTransformer" Grid.ColumnSpan="2"&gt;
                               &lt;TextBlock Text="{Binding Contact.Name}" FontSize="24" Margin="4" HorizontalAlignment="Center"/&gt;
                        &lt;/Intersoft:ContentTransformer&gt;
                        &lt;Intersoft:ImageLoader Grid.Row="1" Grid.Column="1"   ImageStretch="None" x:Name="CoverElementImage" AutoSyncPerspectiveReflection="False" ImageSource="{TemplateBinding ImageSource}" ProgressBarHorizontalAlignment="Stretch" ProgressBarVerticalAlignment="Bottom" ProgressTextVisibility="Collapsed"  ProgressBarMargin="15,0,15,15"/&gt;
                &lt;/Grid&gt;
                &lt;StackPanel x:Name="info" &gt;
                        &lt;TextBlock Text="{Binding Contact.Email}" TextAlignment="Center" FontSize="10" /&gt;
                        &lt;TextBlock Text="{Binding Contact.Twitter}" TextAlignment="Center" FontSize="10"/&gt;
                &lt;/StackPanel&gt;
         &lt;/StackPanel&gt;
    &lt;/Border&gt;
&lt;/Intersoft:ContentPerspective&gt;</pre><p></p>
<p>2. Implement the visual state and switch the position by using <strong>PositionStates</strong> in <strong>VisualStateGroup</strong>.</p>
<p>As stated before, <strong>PositionStates</strong> is available only in the SP1 release.</p>
<p></p><pre class="crayon-plain-tag">&lt;VisualStateGroup x:Name="PositionStates"&gt;     
     &lt;VisualState x:Name="LeftSide"/&gt;     
     &lt;VisualState x:Name="Center"/&gt;     
     &lt;VisualState x:Name="RightSide"/&gt; 
&lt;/VisualStateGroup&gt;</pre><p></p>
<p>The <strong>PositionStates</strong> is automatically generated after you use <strong>EditItemContainer</strong> template.</p>
<p>Center is the default state when an item is selected. Therefore, you only need to customize position, animations and styles for the <strong>LeftSide</strong> and <strong>RightSide</strong>.</p>
<p></p><pre class="crayon-plain-tag">&lt;VisualStateGroup x:Name="PositionStates"&gt;
      &lt;VisualState x:Name="LeftSide"&gt;
             &lt;Storyboard&gt;
                   &lt;ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Transform)" Storyboard.TargetName="ContentTransformer"&gt;
                          &lt;DiscreteObjectKeyFrame KeyTime="0"&gt;
                                 &lt;DiscreteObjectKeyFrame.Value&gt;
                                        &lt;CompositeTransform Rotation="-90"/&gt;
                                 &lt;/DiscreteObjectKeyFrame.Value&gt;
                          &lt;/DiscreteObjectKeyFrame&gt;                
		   &lt;/ObjectAnimationUsingKeyFrames&gt;                
		   &lt;ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Margin)" Storyboard.TargetName="ContentTransformer"&gt;
                         &lt;DiscreteObjectKeyFrame KeyTime="0" Value="20,20,0,20"&gt;                     
			 &lt;/DiscreteObjectKeyFrame&gt;                
		   &lt;/ObjectAnimationUsingKeyFrames&gt;                
		   &lt;ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Grid.ColumnSpan)" Storyboard.TargetName="ContentTransformer"&gt;
                     	 &lt;DiscreteObjectKeyFrame KeyTime="0"&gt;                          
			 	&lt;DiscreteObjectKeyFrame.Value&gt;                               
					&lt;System:Int32&gt;1&lt;/System:Int32&gt;                          
				&lt;/DiscreteObjectKeyFrame.Value&gt;                     
			&lt;/DiscreteObjectKeyFrame&gt;                
		   &lt;/ObjectAnimationUsingKeyFrames&gt;                
		   &lt;ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Grid.RowSpan)" Storyboard.TargetName="ContentTransformer"&gt;
                        &lt;DiscreteObjectKeyFrame KeyTime="0"&gt;                          
				&lt;DiscreteObjectKeyFrame.Value&gt;                               
					&lt;System:Int32&gt;2&lt;/System:Int32&gt;                          
				&lt;/DiscreteObjectKeyFrame.Value&gt;                     
			&lt;/DiscreteObjectKeyFrame&gt;                
		   &lt;/ObjectAnimationUsingKeyFrames&gt;                
		   &lt;ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="info"&gt;                     
			&lt;DiscreteObjectKeyFrame KeyTime="0"&gt;                          
				&lt;DiscreteObjectKeyFrame.Value&gt;                               
					&lt;Visibility&gt;Collapsed&lt;/Visibility&gt;                          
				&lt;/DiscreteObjectKeyFrame.Value&gt;                     
			&lt;/DiscreteObjectKeyFrame&gt;                
		   &lt;/ObjectAnimationUsingKeyFrames&gt;          
	     &lt;/Storyboard&gt;     
       &lt;/VisualState&gt;     
       &lt;VisualState x:Name="Center"/&gt;     
       &lt;VisualState x:Name="RightSide"&gt;          
	    &lt;Storyboard&gt;               
		  &lt;ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Transform)" Storyboard.TargetName="ContentTransformer"&gt;                     
			&lt;DiscreteObjectKeyFrame KeyTime="0"&gt;                          
				&lt;DiscreteObjectKeyFrame.Value&gt;                               
					&lt;CompositeTransform Rotation="90"/&gt;                          
				&lt;/DiscreteObjectKeyFrame.Value&gt;                     
			&lt;/DiscreteObjectKeyFrame&gt;               
		  &lt;/ObjectAnimationUsingKeyFrames&gt;              
		  &lt;ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Margin)" Storyboard.TargetName="ContentTransformer"&gt;                    
			&lt;DiscreteObjectKeyFrame KeyTime="0" Value="0,20,20,20"&gt;                    
			&lt;/DiscreteObjectKeyFrame&gt;              
		  &lt;/ObjectAnimationUsingKeyFrames&gt;              
		  &lt;ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Grid.Column)" Storyboard.TargetName="ContentTransformer"&gt;                    
			&lt;DiscreteObjectKeyFrame KeyTime="0"&gt;                         
				&lt;DiscreteObjectKeyFrame.Value&gt;                              
					&lt;System:Int32&gt;2&lt;/System:Int32&gt;                         
				&lt;/DiscreteObjectKeyFrame.Value&gt;                    
			&lt;/DiscreteObjectKeyFrame&gt;              
		  &lt;/ObjectAnimationUsingKeyFrames&gt;              
		  &lt;ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Grid.ColumnSpan)" Storyboard.TargetName="ContentTransformer"&gt;
                    	&lt;DiscreteObjectKeyFrame KeyTime="0"&gt;                         
				&lt;DiscreteObjectKeyFrame.Value&gt;                              
					&lt;System:Int32&gt;1&lt;/System:Int32&gt;                         
				&lt;/DiscreteObjectKeyFrame.Value&gt;                    
			&lt;/DiscreteObjectKeyFrame&gt;              
		  &lt;/ObjectAnimationUsingKeyFrames&gt;              
		  &lt;ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Grid.RowSpan)" Storyboard.TargetName="ContentTransformer"&gt;                    
			&lt;DiscreteObjectKeyFrame KeyTime="0"&gt;                         
				&lt;DiscreteObjectKeyFrame.Value&gt;                              
					&lt;System:Int32&gt;2&lt;/System:Int32&gt;                         
				&lt;/DiscreteObjectKeyFrame.Value&gt;                    
			&lt;/DiscreteObjectKeyFrame&gt;              
		  &lt;/ObjectAnimationUsingKeyFrames&gt;              
		  &lt;ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="info"&gt;                    
			&lt;DiscreteObjectKeyFrame KeyTime="0"&gt;                         
				&lt;DiscreteObjectKeyFrame.Value&gt;                              
					&lt;Visibility&gt;Collapsed&lt;/Visibility&gt;                         
				&lt;/DiscreteObjectKeyFrame.Value&gt;                    
			&lt;/DiscreteObjectKeyFrame&gt;              
		  &lt;/ObjectAnimationUsingKeyFrames&gt;         
	   &lt;/Storyboard&gt;      
     &lt;/VisualState&gt; 
&lt;/VisualStateGroup&gt;</pre><p></p>
<p>3. Set <strong>AutoRefreshReflection</strong> to <strong>true</strong>. </p>
<p>When using the default <strong>UXFlow</strong> configuration, the reflection will be automatically cached. This may cause a reflection issue while switching the styles. To avoid this issue, simply set <strong>AutoRefreshReflection</strong> to true.</p>
<p>You can also download the <a href="http://intersoftpt.com/tdn/downloads/UXFlowStylePosition.zip">sample project</a> for your references.</p>
<p>I hope this post can give you some insights about styling with <strong>UXFlow</strong> control. As usual, feedback and comments are always welcome. </p>
<p><font face="Segoe UI"></font></p>
<p><font face="Segoe UI"></font></p>
<p>Warm Regards,<br />Handy</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2012/02/customize-uxflow-appearance-based-on-item-position/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing ImageAbsolutePath Feature in SqlReportViewer</title>
		<link>http://blog.intersoftsolutions.com/2012/01/introducing-imageabsolutepath-feature-in-sqlreportviewer/</link>
		<comments>http://blog.intersoftsolutions.com/2012/01/introducing-imageabsolutepath-feature-in-sqlreportviewer/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 04:12:00 +0000</pubDate>
		<dc:creator><![CDATA[glayaar]]></dc:creator>
				<category><![CDATA[2011 R2]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[ClientUI]]></category>
		<category><![CDATA[Deployment Scenarios]]></category>
		<category><![CDATA[New Releases]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[SQL Report Viewer]]></category>
		<category><![CDATA[SQL Reporting Services]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">https://intersoftpt.wordpress.com/?p=2545</guid>
		<description><![CDATA[The recently released service pack includes a number of enhancements to the SqlReportViewer control. One of the enhancements is the addition of ImageAbsolutePath property. This property is introduced for use in scenario involving multiple server environment. In the initial release, ImageAbsolutePath is inferred from ImageVirtualPath. [...]]]></description>
				<content:encoded><![CDATA[<p>The recently released <a href="http://intersoftpt.wordpress.com/2012/01/20/native-silverlight-5-support-and-100-enhancements/" target="_blank">service pack</a> includes a number of enhancements to the SqlReportViewer control. One of the enhancements is the addition of <strong>ImageAbsolutePath</strong> property. This property is introduced for use in scenario involving multiple server environment.</p>
<p>In the initial release, <strong>ImageAbsolutePath</strong> is inferred from <strong>ImageVirtualPath</strong>. In this case, the control always assume that the SqlReportViewer and SQL Reporting Service is located on the same server. However, based on customer feedback, scenarios involving multiple server location is common in enterprise application deployment. </p>
<p>For example, the SqlReportViewer service is hosted on <em>ssrs-1</em> server while the SqlReportingService is located on <em>web-1</em>. The scenario requires user to set both the <strong>ImageVirtualPath</strong> and <strong>ImageAbsolutePath</strong> properties, because the inferred absolute path from a remote location will not return a correct result. A code snippet to address such scenario would be:</p>
<p></p><pre class="crayon-plain-tag">&lt;Intersoft:SqlReportViewer x:Name="ReportViewer1" 
	ReportProxyHandler="http://web-1/SqlReportViewerHandler.ashx" 
	ReportName="/Northwind Reports/SalesOrderInvoice"
	ReportServer="http://ssrs-1/ReportServer"
	ImageVirtualPath="http://ssrs-1/TempImages/"
	ImageAbsolutePath="C:inetpubwwwrootTempImages" /&gt;</pre><p></p>
<p>The above code snippet assumes that the report images will be stored to the <em>C:inetpubwwwrootTempImages</em> folder on the <em>ssrs-1</em> server and virtually hosted on <em>http://ssrs-1/TempImages</em>. In this case, you need to configure <em>ssrs-1</em> as the image server by creating the <em>TempImages</em> virtual directory.</p>
<p>If opening up the SQL report server as public web server is not option, simply set the <strong>ImageVirtualPath</strong> property to the <em>web-1</em> server. Everything else should remain the same. In this case, you need to configure the IIS in the <em>web-1</em> server by creating a virtual directory and map it to the network path in the <em>ssrs-1</em> server.</p>
<p>I hope this post gives you insights on the new <strong>ImageAbsolutePath</strong> feature and how it can be used along with other properties to achieve advanced deployment scenarios. Any questions or feedback are welcomed.</p>
<p>For the complete list of enhancements and fixes in the latest ClientUI release, please visit our <a href="http://support.intersoftpt.com">support page</a>.</p>
<p>Regards,<br />Glenn Layaar</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2012/01/introducing-imageabsolutepath-feature-in-sqlreportviewer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Working with SqlReportViewer Parameter</title>
		<link>http://blog.intersoftsolutions.com/2012/01/working-with-sqlreportviewer-parameter/</link>
		<comments>http://blog.intersoftsolutions.com/2012/01/working-with-sqlreportviewer-parameter/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 01:22:00 +0000</pubDate>
		<dc:creator><![CDATA[glayaar]]></dc:creator>
				<category><![CDATA[2011 R2]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[ClientUI]]></category>
		<category><![CDATA[Report Parameter]]></category>
		<category><![CDATA[Report Viewer]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[SQL Report Viewer]]></category>
		<category><![CDATA[SQL Reporting Services]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">https://intersoftpt.wordpress.com/?p=2536</guid>
		<description><![CDATA[The latest ClientUI release comes up with a host of new amazing controls that have been awaited by many developers. One of the new controls is SqlReportViewer, which is used to display SQL Reporting Service reports in Silverlight or WPF applications. In this blog post, [...]]]></description>
				<content:encoded><![CDATA[<p>The latest ClientUI release comes up with a host of new amazing controls that have been awaited by many developers. One of the new controls is SqlReportViewer, which is used to display SQL Reporting Service reports in Silverlight or WPF applications.</p>
<p>In this blog post, I will share how to work with the report parameter features in SqlReportViewer, e.g. fill the parameter with default value, hide some parameters, and use custom validation to validate the inserted parameter value.</p>
<p>Consider this scenario, we have a holiday request form that a user needs to fill. The report by default requires these parameters to be filled:</p>
<ul>
<li>Company Name
<li>Username
<li>First Name
<li>Last Name
<li>Start Date
<li>End Date
<li>Holiday Name </li>
</ul>
<p><a href="http://intersoftpt.files.wordpress.com/2011/12/blog_defaultviewer.png"><img style="margin:0 0 12px;" class="aligncenter size-full wp-image-2533" title="" alt="" src="http://intersoftpt.files.wordpress.com/2011/12/blog_defaultviewer.png" width="640" height="470"></a></p>
<p>In this scenario, the Silverlight application will retrieve the Company Name, Username, First Name, and Last Name based on the user login information. Since these information are already predefined, SqlReportViewer has the capabilities to hide and automatically fill these parameters value.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/12/blog_sqlreportviewer.png"><img style="margin:0 0 12px;" class="aligncenter size-full wp-image-2534" title="" alt="" src="http://intersoftpt.files.wordpress.com/2011/12/blog_sqlreportviewer.png" width="640" height="394"></a></p>
<p>As shown in the above image, Company Name, Username, First Name, and Last Name by default has been set programmatically. Company Name and Username is hidden as well, since we would like the value not to be modified by the user.</p>
<p>In order to achieve this behavior, you need to bind the <strong>ReportParameters</strong> property to a <strong>ObservableCollection&lt;ISqlParameterMetadata&gt;</strong> using <strong>TwoWay</strong> mode.</p>
<p></p><pre class="crayon-plain-tag">&lt;Intersoft:SqlReportViewer ReportParameters="{Binding ReportParameters, Mode=TwoWay}"
x:Name="ReportViewer1" /&gt;</pre><p></p>
<p>The default value and <strong>Visible</strong> property is modified during <strong>ObservableCollection&lt;ISqlParameterMetadata&gt;</strong> collection changed event, see the code snippet below.</p>
<p></p><pre class="crayon-plain-tag">void _reportParameters_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
    if (e.NewItems != null)
    {
        foreach (object paramObj in e.NewItems)
        {
            SqlReportParameterMetadata sqlParamObj = paramObj as SqlReportParameterMetadata;
            if (sqlParamObj != null)
            {
                switch(sqlParamObj.Name)
                {
                    case "CompanyName":
                        sqlParamObj.Value = this._companyName;
                        sqlParamObj.Visible = Visibility.Collapsed;
                        break;
                    case "Username":
                        sqlParamObj.Value = this._userName;
                        sqlParamObj.Visible = Visibility.Collapsed;
                        break;
                    case "FirstName":
                        sqlParamObj.Value = this._firstName;
                        break;
                    case "LastName":
                        sqlParamObj.Value = this._lastName;
                        break;
                }
            }
        }
    }

    OnPropertyChanged("ReportParameters");
}

public ObservableCollection&lt;ISqlParameterMetadata&gt; ReportParameters
{
    set
    {
        if (_reportParameters != value)
        {
            _reportParameters = value;
            _reportParameters.CollectionChanged += new System.Collections.Specialized.
                NotifyCollectionChangedEventHandler(_reportParameters_CollectionChanged);
            OnPropertyChanged("ReportParameters");
        }
    }
    get
    {
        return _reportParameters;
    }
}</pre><p></p>
<p>For simplicity, the sample is using a static value to retrieve the default parameter value.</p>
<p></p><pre class="crayon-plain-tag">this._companyName = "Intersoft Solutions";
this._userName = "jdoe@intersoft.com";
this._firstName = "John";
this._lastName = "Doe";</pre><p></p>
<p>A custom validation which does not allow StartDate earlier than EndDate has also been provided.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2011/12/blog_sqlreportviewererror.png"><img class="aligncenter size-full wp-image-2535" title="Blog_SqlReportViewerError" alt="" src="http://intersoftpt.files.wordpress.com/2011/12/blog_sqlreportviewererror.png" width="640" height="111"></a></p>
<p>This behavior is achieved by using a custom <strong>SubmitParameterCommand</strong> and binding <strong>IsReportParameterError</strong> property to a boolean property with <strong>TwoWay</strong> mode. Setting <strong>IsReportParameter</strong> property to <strong>False</strong> aborts the report execution to the reporting services.</p>
<p></p><pre class="crayon-plain-tag">&lt;Intersoft:SqlReportViewer Intersoft:DockPanel.IsFillElement="True" x:Name="ReportViewer1"
    IsReportParameterError="{Binding IsReportParameterError, Mode=TwoWay}"
    SubmitParameterCommand="{Binding SubmitParameterCommand}" /&gt;</pre><p></p>
<p>During command execution, the code below will validate if the EndDate is later than StartDate. It will also set the <strong>IsReportParameter</strong> to <strong>False</strong> if the validation fail.</p>
<p></p><pre class="crayon-plain-tag">public ReportSampleViewModel()
{
    _submitParameterCommand = new DelegateCommand(ExecuteSubmitParameter, CanSubmitParameter);
}

public DelegateCommand SubmitParameterCommand
{
    get { return _submitParameterCommand; }
}

private bool CanSubmitParameter(object parameter)
{
    return true;
}

private void ExecuteSubmitParameter(object parameter)
{
    ObservableCollection&lt;ISqlParameterMetadata&gt; sqlParams = parameter as ObservableCollection&lt;ISqlParameterMetadata&gt;;

    if (sqlParams != null)
    {
        ISqlParameterMetadata sqlStartParam = sqlParams.Where(x =&gt; x.Name == "StartDate").FirstOrDefault();
        ISqlParameterMetadata sqlEndParam = sqlParams.Where(x =&gt; x.Name == "EndDate").FirstOrDefault();

        if (sqlStartParam != null &amp;&amp; sqlStartParam.Value != null &amp;&amp;
            sqlEndParam != null &amp;&amp; sqlEndParam.Value != null)
        {

            DateTime startDate = (DateTime)sqlStartParam.Value;
            DateTime endDate = (DateTime)sqlEndParam.Value;

            if (endDate.CompareTo(startDate) &gt; 0)
            {
                this.IsReportParameterError = false;
                sqlStartParam.ClearError("Value");
            }
            else
            {
                this.IsReportParameterError = true;
                sqlStartParam.SetError("Value", "Start date must be earlier than End date");
            }
        }
    }
}</pre><p></p>
<p>Here is the <a title="link" href="http://intersoftpt.com/tdn/downloads/SampleSlApp1.zip">link</a> to the sample project and the <a title="link" href="http://intersoftpt.com/tdn/downloads/HolidayRequest.zip">link</a> to the RDL used in this sample.</p>
<h1>Conclusion</h1>
<p>In this post, I have discussed the report parameter feature in SqlReportViewer. The feature allows you to insert default parameters value, hide parameters, and use custom validation to validate the parameter. If you would like to learn more about SqlReportViewer, please see <a href="http://www.intersoftpt.com/Support/ClientUI/Documentation/#url=SqlReportViewer.html" target="_blank">SqlReportViewer Overview</a>.</p>
<p>As an extra note, hiding parameter feature is an enhancement in the latest SqlReportViewer build and requires the latest ClientUI hotfix.</p>
<p>SqlReportViewer is available in the latest 2011 R2 release which you can download <a href="http://www.webuistudio.com/try" target="_blank">here</a>. If you have questions or feedback regarding SqlReportViewer or other ClientUI controls, feel free to post them to our <a href="http://www.intersoftpt.com/Community" target="_blank">community forum</a>.</p>
<p>Regards,<br />Glenn Layaar</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2012/01/working-with-sqlreportviewer-parameter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Native Silverlight 5 Support and 100+ Enhancements</title>
		<link>http://blog.intersoftsolutions.com/2012/01/native-silverlight-5-support-and-100-enhancements/</link>
		<comments>http://blog.intersoftsolutions.com/2012/01/native-silverlight-5-support-and-100-enhancements/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 16:19:56 +0000</pubDate>
		<dc:creator><![CDATA[Jimmy Petrus]]></dc:creator>
				<category><![CDATA[2011 R2]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[ClientUI]]></category>
		<category><![CDATA[New Releases]]></category>
		<category><![CDATA[Service Pack 1]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[WebUI Studio]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">https://intersoftpt.wordpress.com/?p=2556</guid>
		<description><![CDATA[Just a month ago, the Silverlight team has finally released the long awaited Silverlight 5. The latest Silverlight release simply signals that the technology is still of interest by huge number of developers. With dozens of exciting features in Silverlight 5 such as full trust [...]]]></description>
				<content:encoded><![CDATA[<img width="215" height="270" src="http://blog.intersoftsolutions.com/wp-content/uploads/2014/09/ensuresl5_thumb1-279x350.png" class="attachment-post-thumbnail wp-post-image" alt="Silverlight 5 assembly" style="float:right; margin:0 0 10px 10px;" /><p>Just a month ago, the Silverlight team has finally released the long awaited <a href="http://blogs.msdn.com/b/silverlight/archive/2011/12/09/silverlight-5-available-for-download-today.aspx" target="_blank">Silverlight 5</a>. The latest Silverlight release simply signals that the technology is still of interest by huge number of developers. With dozens of exciting features in Silverlight 5 such as full trust support for in-browser apps, vector printing support, 64 bit support and <a href="http://msdn.microsoft.com/en-us/library/gg986857%28v=vs.95%29.aspx" target="_blank">hundreds more</a>, it’s obvious that Silverlight will still be the preferred line-of-business application platform for many years to come.</p>
<p>Ever since Silverlight 5 was released, we’ve been bombarded with emails and forum posts asking when we will upgrade our tools to support it. And I’m pleased to answer that the day is today. You can download WebUI Studio 2011 R2 Service Pack 1 <a href="http://www.webuistudio.com/try" target="_blank">here</a> which is a free upgrade for all existing subscribers.</p>
<p>Speaking about Silverlight 5 support, we shipped not only about “compatibility” support with the Silverlight 5 runtime, but to the extent of “native” Silverlight 5 support where we improved many areas of our components to leverage the new features introduced in Silverlight 5. Once you installed the service pack, noticed that ClientUI assemblies for Silverlight 5 are now available in the separate folder.</p>
<p>Among the most significant enhancements is the vector printing support. All document viewer lineup in ClientUI – such as Fixed Document Viewer, XPS Document Viewer, Flow Document Viewer, and SQL Report Viewer – now automatically leverage vector printing by default, and fallback to the bitmap printing if unsupported by the printer. </p>
<p>The Flow Document Viewer has been significantly enhanced to support the improved graphic stack introduced in Silverlight 5 which enables the images to dynamically loaded in different UI thread while at the same time maintaining the layout consistency.</p>
<p>Upgrading your existing project to Silverlight 5 is as easy as few clicks away – thanks to the seamless integration to the Silverlight 5 developer tools. Simply bring up the project properties and change the Silverlight target version to Silverlight 5. Once you ok’ed the changes, Visual Studio will refresh the project’s references and automatically pick up the Silverlight 5 version of ClientUI assemblies. To ensure that your project is now upgraded, select a ClientUI assembly and press F4 to see the assembly properties, as shown in the following figure.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2012/01/ensuresl5.png"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="Silverlight 5 assembly" border="0" alt="Silverlight 5 assembly" src="http://intersoftpt.files.wordpress.com/2012/01/ensuresl5_thumb.png" width="279" height="550"></a></p>
<p>Note that ClientUI supports side-by-side development with Silverlight 3, Silverlight 4 and Silverlight 5 – by far the industry’s most comprehensive toolset for Silverlight development.</p>
<p>Another major effort that our team have put in this latest release is a brand-new wizard for Silverlight and WPF templates. Previously, some ClientUI templates depend on the installed Silverlight version. Several templates also have to be made separately to target different version of WCF RIA Services (i.e., RTM, SP1 and SP2). In this latest release, the ClientUI project templates no longer depend on the Silverlight version. A single project template now works flawlessly regardless of the WCF RIA Services, see the shot below. </p>
<p><a href="http://intersoftpt.files.wordpress.com/2012/01/newprojecttemplate.png"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="Enhanced ClientUI project templates" border="0" alt="Enhanced ClientUI project templates" src="http://intersoftpt.files.wordpress.com/2012/01/newprojecttemplate_thumb.png" width="642" height="392"></a></p>
<p>For data-driven project templates, you can now choose the target Silverlight version when creating a new project, see the shot below.</p>
<p><a href="http://intersoftpt.files.wordpress.com/2012/01/slversiontarget.png"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="Silverlight version target" border="0" alt="Silverlight version target" src="http://intersoftpt.files.wordpress.com/2012/01/slversiontarget_thumb.png" width="642" height="284"></a></p>
<p>In addition, the service pack also throws in nearly 100+ enhancements and fixes across all Silverlight, WPF and ASP.NET controls. To see the complete list, please download the release notes <a href="http://www.intersoftpt.com/WebUIStudio/2011R2Notes.pdf" target="_blank">here</a>.</p>
<p>So what’re you waiting for? Kick-off the new year with this exciting <a href="http://www.webuistudio.com/try" target="_blank">release</a>, and build some amazing apps fast.</p>
<p>Note: Existing customers can also download the service pack from <a href="http://dev2.intersoftpt.com/" target="_blank">Intersoft Developer Network</a>, under My Components link.</p>
<p>Best,<br />Jimmy Petrus</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2012/01/native-silverlight-5-support-and-100-enhancements/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Intersoft 2011 Holiday Offers Start Today</title>
		<link>http://blog.intersoftsolutions.com/2011/12/intersoft-2011-holiday-offers-start-today/</link>
		<comments>http://blog.intersoftsolutions.com/2011/12/intersoft-2011-holiday-offers-start-today/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 09:07:25 +0000</pubDate>
		<dc:creator><![CDATA[martinlie]]></dc:creator>
				<category><![CDATA[2011 R2]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Misc]]></category>
		<category><![CDATA[Products]]></category>

		<guid isPermaLink="false">https://intersoftpt.wordpress.com/?p=2520</guid>
		<description><![CDATA[Great news for all of you! During this holiday season, I’m very excited to announce that our most popular holiday offer is back. An interesting offer &#8211; Purchase a 1-year full subscription of any WebUI Studio editions, and you’ll get another subscription – free of [...]]]></description>
				<content:encoded><![CDATA[<p>Great news for all of you! During this holiday season, I’m very excited to announce that our most popular holiday offer is back. An interesting offer &#8211; Purchase a 1-year full subscription of any WebUI Studio editions, and you’ll get another subscription – free of charge. Of course you can use this moment to send the gift to someone you care the most – your colleagues, friends or relatives – or reserve it for a new team member for the next projects.</p>
<p>This great offer is not forever, means that it is limited only until 31st December 2011. So Hurry up! Don’t miss out this great opportunity! Time to save your money &#8211; take advantage of this special holiday offer and get two subscription licenses for the price of one. For more information about this promo, click <a href="http://intersoftpt.com/Corporate/News.aspx?page=News&amp;EventId=209" target="_blank">here</a>.</p>
<p>Visit our <a href="http://intersoftpt.com/Store/" target="_blank">online store</a> to get your copy along with the free second copy gift today, or feel free to contact me at <a href="mailto:martin@intersoftpt.com">martin@intersoftpt.com</a> for any questions.</p>
<p>Thank you and happy holiday!</p>
<p>Regards,<br />Martin</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2011/12/intersoft-2011-holiday-offers-start-today/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Business-Inspiring Samples in ClientUI 6</title>
		<link>http://blog.intersoftsolutions.com/2011/12/new-business-inspiring-samples-in-clientui-6/</link>
		<comments>http://blog.intersoftsolutions.com/2011/12/new-business-inspiring-samples-in-clientui-6/#comments</comments>
		<pubDate>Fri, 09 Dec 2011 09:29:13 +0000</pubDate>
		<dc:creator><![CDATA[martinlie]]></dc:creator>
				<category><![CDATA[2011 R2]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[Business Inspiring Samples]]></category>
		<category><![CDATA[ClientUI]]></category>
		<category><![CDATA[New Releases]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[UI Components]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">https://intersoftpt.wordpress.com/?p=2504</guid>
		<description><![CDATA[The latest ClientUI release comes up with new amazing controls that have been awaited by many developers, such as UXScheduleView with its scheduling capabilities, UXRibbon with its rich styling features, UXFlowDocumentViewer with its unique viewing performance and much more. Click here to find out more [...]]]></description>
				<content:encoded><![CDATA[<img width="464" height="270" src="http://blog.intersoftsolutions.com/wp-content/uploads/2014/09/medicalsheduler_thumb1-601x350.png" class="attachment-post-thumbnail wp-post-image" alt="UXScheduleView - Medical Scheduler" style="float:right; margin:0 0 10px 10px;" /><p>The latest ClientUI release comes up with new amazing controls that have been awaited by many developers, such as UXScheduleView with its scheduling capabilities, UXRibbon with its rich styling features, UXFlowDocumentViewer with its unique viewing performance and much more. Click <a href="http://www.clientui.com/New" target="_blank">here</a> to find out more about the new controls in ClientUI 6.</p>
<p>In this blog post, I will share some of the new samples demonstrating the new products, as well as reviewing the key features.</p>
<p>Below are the top 10 new samples that goes to my favorite list.</p>
<ol>
<li><strong>Hospital Medical Scheduler</strong>
<p>UXScheduleView is a powerful, MVVM-ready scheduling control that offers many advanced features and rich user experiences in a single box. This sample is a good demonstration of the latest UXScheduleView with many features enabled such as adding, editing and deleting events.</p>
<p>This sample defines the views as Daily, Next 3 Days and Week which can be elegantly defined through property sets in the XAML. It also demonstrates UXScheduleView&#8217;s strong customization support which allows you to redefine the styles, appearances and templates to fit your requirements, for instances, displaying the photo of the respective doctors.</p>
<p>In addition, many key features can also be seen in this sample such as high-performance grouping, real-time interactivity and drag-drop support, sophisticated editing capability, ISO usability standards conformance, and more. You can drag-drop the event without having to manually modify the time schedule. <a href="http://live.clientui.com/#/UXScheduleView/Reference" target="_blank">Explore the sample</a>.<br /><a href="http://intersoftpt.files.wordpress.com/2011/12/medicalsheduler.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="UXScheduleView - Medical Scheduler" border="0" alt="UXScheduleView - Medical Scheduler" src="http://intersoftpt.files.wordpress.com/2011/12/medicalsheduler_thumb.png" width="601" height="427"></a></p>
<li><strong>Software Project Schedule</strong>
<p>One of the most advanced features in UXScheduleView is its extensible view architecture which enables you to create your own custom views and easily instantiate the custom views into the UXScheduleView control. This sample includes a custom Agenda view which displays events in a simple list view. Notice that the custom view takes advantage of the automatic calendar synchronization which highlights the days covered by the view. <a href="http://live.clientui.com/#/UXScheduleView/Reference/SoftwareDev" target="_blank">Explore the sample</a>.<br /><a href="http://intersoftpt.files.wordpress.com/2011/12/projectschedule.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="UXScheduleView - Software Project Schedule" border="0" alt="UXScheduleView - Software Project Schedule" src="http://intersoftpt.files.wordpress.com/2011/12/projectschedule_thumb.png" width="605" height="423"></a></p>
<li><strong>Nested Grouping <br /></strong>If the above scenario shows about standard grouping, this sample demonstrates several advanced grouping features such as multi-level (nested) grouping using UXScheduleView. You can flexibly define the group items and orders through the GroupCollection property. <a href="http://live.clientui.com/#/UXScheduleView/Grouping/NestedGrouping" target="_blank">Explore the sample</a>.<br /><a href="http://intersoftpt.files.wordpress.com/2011/12/nestedgrouping.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="UXScheduleView - Nested Grouping" border="0" alt="UXScheduleView - Nested Grouping" src="http://intersoftpt.files.wordpress.com/2011/12/nestedgrouping_thumb.png" width="611" height="356"></a>
<li><strong>TextPad Editor</strong>
<p>This sample demonstrates a complete overview of the unique features available in UXRibbon such as fluid group and button resizing, state-of-the-art UI design and pixel-perfect layout rendering. It also shows the key ribbon features such as dozen of button variants, fluid tab group, ordered tab group, application menu, backstage view, quick access toolbar, key tips, and much more.</p>
<p>Despite of the rich features, UXRibbonBar is designed with lightweight and blazing-fast fluent resizing in mind. <a href="http://live.clientui.com/#/UXRibbon/Reference" target="_blank">Explore the sample</a>.<br /><a href="http://intersoftpt.files.wordpress.com/2011/12/textpad.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="UXRibbon - TextPad Editor" border="0" alt="UXRibbon - TextPad Editor" src="http://intersoftpt.files.wordpress.com/2011/12/textpad_thumb.png" width="612" height="463"></a>&nbsp;</p>
<li><strong>CRM<br /></strong>One of the unique metaphors in Ribbon UI is the contextual tab concept which lets you display certain groups of commands based on a certain condition or context. For example, instead of showing schedule-related commands with disabled state initially, it is more intuitive to hide them initially, then show them on-demand when the context is available such as when a follow-up record is selected.
<p>UXRibbonBar includes full support on this unique &#8220;contextual tab&#8221; metaphor which is well demonstrated in this business-inspiring CRM sample. Try to select a record in the Follow-up Schedule grid, notice that the &#8220;Schedule&#8221; contextual group will be shown with the &#8220;Follow Up&#8221; tab automatically selected.</p>
<p>UXRibbonBar also supports multiple contextual groups to be activated at the same time. With the &#8220;Schedule&#8221; contextual group shown, try to click on the Search text box. Notice that a &#8220;Search&#8221; contextual group will be displayed along side with the &#8220;Schedule&#8221; contextual group. When the context is out (i.e., tab out from the Search text box), the contextual group will automatically disappear and then select the first tab of the UXRibbonBar. <a href="http://live.clientui.com/#/UXRibbon/Reference/CRM" target="_blank">Explore the sample</a>.<br /><a href="http://intersoftpt.files.wordpress.com/2011/12/crm.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="UXRibbon - CRM" border="0" alt="UXRibbon - CRM" src="http://intersoftpt.files.wordpress.com/2011/12/crm_thumb.png" width="614" height="464"></a></p>
<li><strong>News Buzz <br /></strong>In this sample, UXFlowDocumentViewer is used to display the latest news documents. Try to select a category in the left navigation and the related news will be displayed in the viewer.
<p>UXFlowDocumentViewer has multiple view mode switching capability. Try to switch between Page view and Scroll view using the view mode tool commandsand the content will be adjusted to the selected view mode.</p>
<p>Also, you can perform zooming using either the zoom bar or zoom level. Click the “Show Actual Size” button to reset back to 100%. Or, toggle the full screen mode for maximum reading experience. Click the Print button to directly print the document exactly as user views it.</p>
<p>Try the search feature to search a text. Try to type &#8220;the&#8221; and note that all the matched words will be highlighted. When you switch to scroll view, the search text will be persisted and all the matched words will be highlighted as well. <a href="http://live.clientui.com/#/DocumentViewers/FlowDocumentViewer" target="_blank">Explore the sample</a>.<br /><a href="http://intersoftpt.files.wordpress.com/2011/12/newsbuzz.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="UXFlowDocumentViewer - News Buzz" border="0" alt="UXFlowDocumentViewer - News Buzz" src="http://intersoftpt.files.wordpress.com/2011/12/newsbuzz_thumb.png" width="619" height="393"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<li><strong>Personal Email Viewer</strong>
<p>UXFlowDocumentScrollViewer allows users to view flow content in scroll mode. In scroll mode, the content will flow based on the viewer size.</p>
<p>In this sample, UXFlowDocumentScrollViewer is used as a personal email viewer, which loads an email (in HTML format) when user selects an item from the top navigation. <a href="http://live.clientui.com/#/DocumentViewers/FlowDocumentViewer/PersonalEmailViewer" target="_blank">Explore the sample</a>.<br /><a href="http://intersoftpt.files.wordpress.com/2011/12/personalemailviewer1.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="UXFlowDocumentScrollViewer - Personal Email Viewer" border="0" alt="UXFlowDocumentScrollViewer - Personal Email Viewer" src="http://intersoftpt.files.wordpress.com/2011/12/personalemailviewer_thumb1.png" width="615" height="444"></a></p>
<li><strong>Product Sales Report per Customer<br /></strong>
<p>SQLReportViewer is a SQL report viewer for Silverlight with sophisticated rendering engine – conforming to SQL reporting services rendering. In this sample, SQLReportViewer provides users with the capability to view the product sales report.</p>
<p>You can perform zooming using either zoom bar or zoom level. Click the “Show Actual Size” button to reset back to 100%. Or, toggle the full screen mode for maximum reading experience. Click the Print button to directly print the report exactly as users views it. <a href="http://live.clientui.com/#/DocumentViewers/SqlReportViewer" target="_blank">Explore the sample</a>.<br /><a href="http://intersoftpt.files.wordpress.com/2011/12/productsalesreport.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="SQLReportViewer - Product Sales Report" border="0" alt="SQLReportViewer - Product Sales Report" src="http://intersoftpt.files.wordpress.com/2011/12/productsalesreport_thumb.png" width="621" height="377"></a></p>
<li><strong>Sales Order Invoice</strong>
<p>This sample demonstrates on how SQLReportViewer is able to accurately parse and render any SQL reporting service report, such as a sales order invoice. The thumbnail navigation could be used to jump between pages. Explore the sample.</p>
<p>You can perform zooming using either zoom bar or zoom level. Click the “Show Actual Size” button to reset back to 100%. Or, toggle the full screen mode for maximum reading experience. Click the Print button to directly print the report exactly as users views it. <a href="http://live.clientui.com/#/DocumentViewers/SqlReportViewer/SalesOrderInvoice" target="_blank">Explore the sample</a>.<br /><a href="http://intersoftpt.files.wordpress.com/2011/12/salesinvoice.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="SQLReportViewer - Sales Order Invoice" border="0" alt="SQLReportViewer - Sales Order Invoice" src="http://intersoftpt.files.wordpress.com/2011/12/salesinvoice_thumb.png" width="622" height="378"></a></p>
<li><strong>Data LookupBox</strong>
<p>This sample demonstrates how to implement data lookup using the UXDataLookUpBox control. UXDataLookupBox is an intuitive data input control that combines the ease of auto-complete and the flexibility of custom lookup.</p>
<p>Try to click the “Search” icon and type “ca” to search customers based on Contact Name. Finally, it will automatically list all orders purchased by the selected customer. Explore the sample.<br /><a href="http://intersoftpt.files.wordpress.com/2011/12/datalookupbox.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="UXDataLookupBox - Data LookupBox" border="0" alt="UXDataLookupBox - Data LookupBox" src="http://intersoftpt.files.wordpress.com/2011/12/datalookupbox_thumb.png" width="615" height="426"></a></p>
<p>There are many other samples collection which you can visit in our <a href="http://live.clientui.com" target="_blank">ClientUI Live Samples</a>. You are welcome to evaluate our 30-days trial in <a href="http://www.clientui.com/download/" target="_blank">here</a>. Existing customers with valid subscription can obtain the latest WebUI Studio from <a href="http://dev2.intersoftpt.com/">Developer Network</a>, under My Components shortcut.</p>
<p>Should you have any questions regarding sales, you can contact <a href="mailto:martin@intersoftpt.com">martin@intersoftpt.com</a>. Any comments or feedbacks are welcome.</p>
<p>Thank you and have a nice day.</p>
<p>Regards,<br />Martin</p>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.intersoftsolutions.com/2011/12/new-business-inspiring-samples-in-clientui-6/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
