Friday, November 23, 2007

Visual Studio 2008 - Automatic Properties in .NET 2.0

In the next couple of blogs we will present shortly some cool and interesting stuff we found about Visual Studio 2008 and .NET Framework 3.5. For all cool stuff see Visual Studio 2008 Official page.
One of the first items we noticed and played around are Automatic Properties. What does it mean? Untill now it was common to define a class as
public class Test
{
public Test() { }

private string _firstName;
public string FirstName
{
get { return _firstName; }
set { _firstName = value; }
}
}
where for each property you usually had a private member variable.
But now, Visual Studio 2008 and .NET framework 3.5 introduces Automatic Proeprties where your class can be defined as

public class Test
{
public Test() { }
public string FirstName { get; set; }
}
and you will notice that a private member variable is missing and a whole body of the property implementation itself (it has just a stub definition get; set; )
Imagine how much you reduce a time for class scripting. Readability is also much better.
But you will probably ask, where does .NET keep your data now? If you take a look at IL you will find that actually a compiler generates a field (variable) for you:
'<>k__AutomaticallyGeneratedPropertyField0'. Whole construction is done just by using CompilerGeneratedAttribute. But, what we had in mind, this attribute is part of .NET Framework 2.0, what lead us to... Hey, Automatic Properties are possible in .NET 2.0 than?! And this is really true. Open your Visual Studio 2008 (Express), create such a construction, as a Target Framework for a project choose .NET Framework 2.0 and you will see it runs. WOW!!! We like this very much and will use it in DBTyP.NET as soon as possible.

Monday, November 12, 2007

Formatting bounded DateTime fields in ASP.NET

If you ever tried to work with BoundField object bound to a DateTime field with the DataFormatString, it must happen, that first time you didn't get your DateTime value proeprly formatted.
<asp:BoundField DataField="MyNotFormattedDate" DataFormatString="{0:MM/dd/yyyy}" />

Looks like that you have done everything correct but still getting your value formatted using its ToString() method like "11/13/2007 10:05:12 PM". So, the problem is not in your definition but in ASP.NET which tries to prevent cross site scripting attacks, the field value is HTMLEncoded. And HTMLEncoding occurs before applying any formatting, making your formatting string without effects. To Get your field formatted as you define, you should tell object not to use HTMLEncoding like

<asp:BoundField DataField="MyFormattedDate" DataFormatString="{0:MM/dd/yyyy}" HtmlEncode="false"/>

Compare databases with the best tool - DBTYP.NET Studio.