21Sep
Read more...
20Dec
The DataGrid and the “Input string is not in a correct format” message in Silverlight
If you play around with the DataGrid in Silverlight and try some scenarios, maybe you come around the FormatException with the Message “Input String is not in a correct format”. You get this Exception if your Data-Object e.g. has a Property of type int and the user enters some characters in the DataGrid. The Exception doesn’t come up, instead the DataGrid shows it as a validation error. Let’s look at an example. Image you’ve a very simple Person-class containing a FirstName-Property of type string and an Age-Property of type int:
Now the question is, where to change this string. The DataGrid has a BindingValidationError-Event, but there you have only read access to the FormatException and the Errormessage. In the Property itself you can’t do anything, because the Exception is thrown before the Age-Property is set.
The solution is to define a Property special for Display in the Person-class. Normally you would create a ViewModel that encapsulates the Person-class and contains the additional property. In my case I implement the Property directly in the Person-class. I call it AgeDisplay-Property. Inside that property you can then throw your own FormatException with your special text. My Person-class now looks like this:
![image image](http://www.thomasclaudiushuber.com/wp-content/image-thumb11.png)
public class Person : INotifyPropertyChanged
{
private int? _age;
private string _firstName;
public string FirstName
{
get { return _firstName; }
set
{
_firstName = value;
Changed("FirstName");
}
}
public int? Age
{
get { return _age; }
set
{
_age = value;
Changed("Age");
}
}
private void Changed(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this,
new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
Now let’s fill up a List with some Test-Persons and add that list to the DataContext of your page:
public MainPage()
{
InitializeComponent();
this.DataContext = new List {
new Person{ FirstName="Thomas",Age=29},
new Person{ FirstName="Julia",Age=27},
new Person{ FirstName="Ben",Age=1},
};
}
No in the XAML-File of your MainPage a DataGrid could be defined like below. Notice the ItemsSource-Property that is bound to the DataContext:
<my:DataGrid ItemsSource="{Binding}"
AutoGenerateColumns="False">
<my:DataGrid.Columns>
<my:DataGridTextColumn Header="FirstName"
Binding="{Binding FirstName}"/>
<my:DataGridTextColumn Header="Age"
Binding="{Binding Age}"/>
</my:DataGrid.Columns>
</my:DataGrid>
When the User now enters a string as Age, the FormatException is raised before the Property is updated and the Message of the FormatException is displayed in the DataGrid:
![image image](http://www.thomasclaudiushuber.com/wp-content/image-thumb10.png)
public class Person : INotifyPropertyChanged
{
private int? _age;
private string _firstName;
public string FirstName
{
get { return _firstName; }
set
{
_firstName = value;
Changed("FirstName");
}
}
public int? Age
{
get { return _age; }
set
{
_age = value;
Changed("Age");
Changed("AgeDisplay");
}
}
public string AgeDisplay
{
get { return Age.ToString(); ; }
set
{
if (value == null)
{
Age = null;
return;
}
int result;
if (int.TryParse(value, out result))
{
Age = result;
}
else
{
throw new FormatException("Age must be a number. "
+ " Characters are not allowed.");
}
}
}
private void Changed(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this,
new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
Now you simple bind the DataGrid’s Column to AgeDisplay instead of Age:
<my:DataGrid ItemsSource="{Binding}"
AutoGenerateColumns="False">
<my:DataGrid.Columns>
<my:DataGridTextColumn Header="FirstName"
Binding="{Binding FirstName}"/>
<my:DataGridTextColumn Header="Age"
Binding="{Binding AgeDisplay}"/>
</my:DataGrid.Columns>
</my:DataGrid>
When the user now enters a string into the Age-Column, the text of the FormatException thrown in the AgeDisplay-Property is displayed:
![image image](http://www.thomasclaudiushuber.com/wp-content/image-thumb11.png)
02Feb
How-to deploy the Crystal Reports Basic Runtime that’s included in Visual Studio 2008
This week I've to deploy an ASP.NET application containing about 20 reports that have been created with the Crystal Reports Basic Runtime which is included in Visual Studio 2008. (By the way, the application also contains a lot of AJAX-Functionality. It uses the "AJAX Control Toolkit-based" MultiColumnDropDown that I've described in a previous post).
When deploying the application to a different machine than your developer-machine, the Crystal Report Basic Runtime must be deployed also. You do that by copying the necessary msi-file to the server and run it. The "necessary" .msi-file is already on your development machine and were installed with Visual Studio 2008. The .msi-files for different plattforms are located in the following paths:
(the table above is contained in MSDN-documentation here)
The installation is very simple. You doesn't need to click anything, simply run the .msi and you see the window below. Just wait until it closes.
There's also the possibility to include the msi in your setup-application. For more information on that take a look at this thread in MSDN-Forums.
Runtime | | MSI-Location |
(x86) | C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages\CrystalReports10_5\CRRedist2008_x86.msi |
(x64) | C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages\CrystalReports10_5\CRRedist2008_x64.msi |
(IA64) | C:\Program Files\Microsoft Visual Studio 9.0\Crystal Reports\CRRedist\IA64\CRRedist2008_ia64.msi |
![crystalReportsBasic](http://www.thomasclaudiushuber.com/wp-content/crystalreportsbasic-thumb.png)
23Jan
The PrintForm-Component in the Visual Basic Powerpack for Windows Forms
Did you ever wanted to print a Form without calling any native code? Well, with Windows Forms and Visual Studio 2008 this is a really simple exercise. When you design your WinForms-Application you'll find a Tab Visual Basic PowerPacks in the Toolbox of Visual Studio 2008. (more…)
22Jan
VisualStateManager in Silverlight
Last year I've written a german article for the dotnet-magazine about VisualStateManager in Silverlight. As this feature will also be part of WPF 4.0, take a look at the article, which is now available on my homepage. The article is also available on the homepage of Trivadis beside many other articles focused on other IT-Topics.
So read and enjoy. :-)
19Jan
The promised code example with the ASP.NET Ajax Multicolumn-Dropdown
During the last months I was asked many times for the code of the Multcolumn-Dropdown that I've described in this post. I've just created a very small sample-application containing such a dropdown. You can download it here.
If someone of you creates a control out of that source, I would be glad to get a link to it. :-)
Thomas
31Jul
Developing Multicolumn-DropDown/DropDownList with ASP.NET, the GridView and the AJAX Control Toolkit
During the last months I was developing an ASP.NET application and I needed a dropdownlist to display multiple columns in each item. Everyone with a little knowledge in Web-development knows, that HTML doesn't contain built-in support for multicolumn-DropDowns. (more…)
26Nov
TechEd Developers 2007 in retrospect – Wednesday
Wednesday at TechEd was another "linqy" day for me. In the morning I joined the session "LINQ to XML", with speaker Mike Taulty. With LINQ to XML there is a new XML-API as Part of .NET 3.5 which sits in the namespace System.Xml.Linq. LINQ to XML makes it easy to create (more…)
14Nov
TechEd Developers 2007 in retrospect – Monday
Last week I went to Barcelona for five days, participating at TechEd Developers 2007 (05. - 09. november). In the following posts I'll just show you a short summary of my experience at TechEd Developers 2007. Let's start on Monday.
On Monday the Keynote-Session started after a life grafiti-show with some really breaking news presented by S. Somasegar (Microsofts Corporate Vice President of the developer division):
- Visual Studio 2008 and .NET 3.5 will be available to MSDN subscribers by the end of November
- The first CTP of Microsofts Sync Framework is available now
- For those of you using Microsoft Popfly, a new Popfly Explorer will be available
- This year there will already be a CTP of the next Version of Visual Studio, called "Rosario". In 2008 there will be a Beta of it
- If you have .NET 3.0 already installed, an installation of .NET 3.5 will use this existing installation and change the red bit assemblies (some existing .NET 3.0 assemblies) and add some brand new Assemblies (the green bits). That means, after the installation of .NET 3.5 you wont come back to .NET 3.0, but every .NET 3.0 application should run well on .NET 3.5 (if Microsoft has done a good job with the red bits)
- If you haven't .NET 3.0 installed, an installation of .NET 3.5 will install whole .NET 3.0, plus the red and green bits of .NET 3.5
13Nov
The first one
Today I decided to start my own blog. So far I enjoyed life just as a blog-reader for the last couple of years. But now there are several reasons to start my own blog:
- Up to now I just played around with WPF for nearly two years, and I discovered some things I want to share with you
- I want to post some technical content to find it later again. Also the provider guarantees me a backup of my site. :-)
- A blog is a great platform to communicate with you and other guys working with .NET, WPF, XAML, C#, LINQ, ...
- ...
During the next days I'll provide some stuff just heared and learned from TechEd 2007 in Barcelona.
So stay tuned...