# Monday, 20 July 2009

ReportViewer in VS2010

I’ve been using the ReportViewer control in Visual Studio quite a bit to create RDLC (offline) reports that are based on the result of LINQ queries against object trees. It’s been a while since there has been a new release of this control and Visual Studio 2010 did not include anything major with regards to the ReportViewer control. I asked around and got an email from Robert Bruckner answering my two main questions:

1. Yes, the ReportViewer control in VS2010 will run on both .NET 3.5 as well as .NET 4.0.
2. Yes, the ReportViewer control in VS2010 will support Export to Word for RDLC (offline) scenarios.

Thanks Robert (and the rest of the people working on this technology), great news!

#    Comments [8] |
# Tuesday, 14 July 2009

Urban Legends

I frequently receive emails in my inbox warning me about all sorts of scandals or terrible things that could happen to my health. Usually the person(s) forwarding these mails to me have my best interests at heart. Most of the time the emails are a hoax. I found a good site to check and see whether something is a hoax or not: http://urbanlegends.about.com/

#    Comments [1] |

Patience while waiting for Windows 7

I was hoping to be able to download the RTM version of Windows 7 yesterday, but it looks like I’ll need to be patient a little longer. Brandon LeBlanc explains the RTM process here in a very clear blog post.

I’ve copied the section on how to get it:

Once Windows 7 is complete, how do I get it?

The answer depends on who you are:

  • MSDN & TechNet Subscribers: Subscribers will be able to download the final version of Windows 7 a few weeks after we announce RTM.
  • Volume License (VL) Customers: As announced today by Bill Veghte during his WPC09 keynote, Windows 7 will be available to Volume License customers on September 1st.
  • Consumers, Enthusiasts, & Beta Testers (Everyone else): The retail version of Windows 7 will be available in stores October 22nd. If you pre-ordered Windows 7, it should be delivered sometime around the October 22nd timeframe (depends on the retailer). You can pre-order Windows 7 today through many online retailers like the Microsoft Store.
  • On New PCs: OEMs are expected to start shipping new PCs with Windows 7 pre-installed on them around October 22nd.
#    Comments [0] |
# Monday, 29 June 2009

Why try new technologies?

I just read this post by Paul Gielens (http://weblogs.asp.net/pgielens/archive/2009/05/06/why-asp-net-mvc.aspx) about why a group of developers decided to use ASP.NET MVC.

The answer to the question “what made you guys decide to use MVC for this applications” was interesting “because we wanted to learn something new, and because it’s cool!”.

So the feedback on this post ranges from “ahumpff” to “these guys should not be experimenting when someone else is footing the bill”.

I’d just like to pitch in:

a) It’s great to see people showing interest in new technologies. I’d rather have some folks on my team who are eager to dive into a new technology than those who shy away from anything new.
b) There is not a lot of additional info: but assuming that the project was not a multi-million dollar project and there was some room for a little risk. Then “why not?”. In my experience you can play with any technology, but you won’t truly learn it until you have a serious goal. Without a fixed goal you won’t find the pain points of the technology.
c) I believe in risk driven project management. I’m not sure whether it is an official approach to project management. But I like to list all known risks, then decide whether something needs to be done to mitigate the risk. If the cost of mitigation outweighs the risk, then agree to do nothing. In essence, just about everything in PM is about risk management. Anyway, back to the new technology: do an assessment: will this new technology cost me more time to develop this app? Yes/no? No, then use it. Yes? How much? Can we afford to spend X hours on learning? Will it make my team happy? Happy coders write more code… aw heck, let them use it :-).

#    Comments [0] |
# Wednesday, 24 June 2009

Windows 7

Just ran across the boxes they will be using to ship Windows 7 (available Oct. 22, 2009):

Windows 7 Home PremiumWindows 7 ProfessionalWindows 7 Ultimate

From Bink.nu:
Microsoft has now set July 13th for RTM “sign-off”.

Sign off is the process where all divisions sign that they agree on the final code, which means the actual RTM build will be created a few days earlier, which is targeted on July 10th.

The general availability (GA) is set to October 22nd, this is when you can buy it in stores in a box or on new PC’s (OEM).

We can expect the RTM much earlier on MSDN, Technet and Volume Licensing download sites, probably a few days after July 13th.

#    Comments [0] |
# Wednesday, 10 June 2009

Daniel Pratt to present at BAND meeting

Daniel will present at the next Bangor Area .NET Developer (BAND) meeting (June 23rd, 2009):

WPF - A little further down the rabbit hole

Probably most of us have seen at least one slick demo of WPF or Silverlight. Such demos are inspiring, but they don't convey what it's like to actually use WPF in the real world. Fresh from completing our first business-centric application that uses WPF extensively, I'm excited to share from my experience of using WPF in the real world.


Daniel is a developer for Tyler Technologies in Bangor.


More information on: www.bangordevelopers.com


More from Daniel: http://www.danielgpratt.com/

#    Comments [0] |

Only one week to go to the AUGUSTA (Maine) MSDN Northeast Roadshow

Only one week to go! The MSDN Northeast Roadshow will once again make a stop in Augusta, ME. If you haven’t done so already, then sign up now!


June 18th is the day you can enjoy a day of free learning with Microsoft's New England Dream Team: Chris, Bob & Jim.


More info and sign up info: http://tinyurl.com/Summer09Roadshow.

#    Comments [0] |
# Monday, 08 June 2009

Windows 7 and Virtual PC + XP experience

If you’re planning to use Virtual PC or make use of the XP backwards compatibility mode in Windows 7, then you’ll need to have a CPU that supports hardware virtualization. Sadly is not very clear which CPU’s offer that feature.

I found two pages with useful info, one for Intel processors and one for AMD:

Note: for XP virtualization you will also need a minimum of 2GB of RAM.

I’ve copied the essential information (including the disclaimer) for your reference pleasure :-)

Disclaimer: I believe this information is accurate, but it is possible that some mistakes may be present in the following tables. caused by inaccuracies in Intel’s documentation or by editing and composition errors. I urge you to do your own research before making any buying decisions. Even if a specific CPU appears to support Intel VT, make sure that the PC’s BIOS manufacturer allows this feature to be enabled.

Intel Desktop CPUs

Core 2 Duo  
E4300/4400/4500/4600/4700 NO
E6300/6320/6400/6420/6540/6550 YES
E6600/6700/6750/6850 YES
E7200/7300/7400/7500 NO
E8190 NO
E8200/8300/8400/8500/8600 YES
Core 2 Extreme  
QX6700/6800/6850 YES
QX9650/9770/9775 YES
X6800 YES
Core 2 Quad  
Q6600/6700 YES
Q8200/8200S/8300/8400/8400S NO
Q9300/9400/9400S YES
Q9450/9550/9550S/9650 YES
Core i7/Core i7 Extreme  
I7-920/940 YES
I7-965 YES
Pentium D/Pentium EE  
805/820/830/840 NO
915/925/935/945 NO
920/930/940/950/960 YES
955/965 YES
Pentium for Desktop  
E2140/2160/2180/2200/2220 NO
E5200/5300/5400 NO

Intel Mobile CPUs

Core 2 Duo Mobile  
L7200/7300/7400/7500 YES
P7350/7450 NO
P7370 YES
P8400/8600/8700/9500/9600 YES
SL9300/9400/9600 YES
SP9300/9400/9600 YES
SU9300/9400/9600 YES
T5200/5250/5270/5300/5450/5470 NO
T5500/5600 YES
T5550/5670/5750/5800/5850/5870/5900 NO
T6400/6570 NO
T7100/7200/7250/7300/7400 YES
T7500/7600/7700/7800 YES
T8100/8300 YES
T9300/9400/9500/9550/9600/9800 YES
U7500/U7600 YES
Core 2 Extreme Mobile  
QX9300 YES
X7800/7900 YES
X9000/9100 YES
Core 2 Quad Mobile  
Q9000 YES
Q9100 NO
Core 2 Solo  
SU3300/3500 YES
U2100/2200 YES
Core Duo  
L2300/2400/2500 YES
T2050/2250 NO
T2300/2400/2500/2600/2700 YES
T2300E/2350/2450 NO
U2400/2500 YES
Core Solo  
T1300/1400 YES
T1350 NO
U1300/1400/1500 YES



“With the exceptions of Sempron-branded processors and Turion K8 Rev E processors, all notebook processors shipped by AMD include AMD-V and therefore support Windows 7 XP mode."

"With the exceptions of Sempron-branded processors and pre-Rev F Athlon branded processors, all of the desktop processors shipped by AMD include AMD-V and therefore support Windows 7 in XP mode."

"Also, all AMD Opteron processors shipped by AMD from Rev F forward include AMD-V."

#    Comments [1] |

Exam objectives for 70-536 with links to MSDN

Copied from : http://www.proprofs.com/forums/index.php?showtopic=11932


Microsoft 70-536 Objectives

Objectives as updated on Microsoft's Web site: March 29, 2007


Developing applications that use system types and collections
Manage data in a .NET Framework application by using the .NET Framework 2.0 system types (Refer System namespace)

Manage a group of associated data in a .NET Framework application by using collections. (Refer System.Collections namespace)

Improve type safety and application performance in a .NET Framework application by using generic collections. (Refer System.Collections.Generic namespace)

Manage data in a .NET Framework application by using specialized collections. (Refer System.Collections.Specialized namespace)

Implement .NET Framework interfaces to cause components to comply with standard contracts. (Refer System namespace)

Control interactions between .NET Framework application components by using events and delegates. (Refer System namespace)

Implementing service processes, threading, and application domains in a .NET Framework application
Implement, install, and control a service. (Refer System.ServiceProcess namespace)

Develop multithreaded .NET Framework applications. (Refer System.Threading namespace)

Create a unit of isolation for common language runtime in a .NET Framework application by using application domains. (Refer System namespace)

Embedding configuration, diagnostic, management, and installation features into a .NET Framework application
Embed configuration management functionality into a .NET Framework application. (Refer System.Configuration namespace)

Create a custom Microsoft Windows Installer for the .NET Framework components by using the System.Configuration.Install namespace, and configure the .NET Framework applications by using configuration files, environment variables, and the .NET Framework Configuration tool (Mscorcfg.msc).

Manage an event log by using the System.Diagnostics namespace.

Manage system processes and monitor the performance of a .NET Framework application by using the diagnostics functionality of the .NET Framework 2.0. (Refer System.Diagnostics namespace)

Debug and trace a .NET Framework application by using the System.Diagnostics namespace.

Embed management information and events into a .NET Framework application. (Refer System.Management namespace)

Implementing serialization and input/output functionality in a .NET Framework application
Serialize or deserialize an object or an object graph by using runtime serialization techniques. (Refer System.Runtime.Serialization namespace)

Control the serialization of an object into XML format by using the System.Xml.Serialization namespace.

Implement custom serialization formatting by using the Serialization Formatter classes.

Access files and folders by using the File System classes. (Refer System.IO namespace)

Manage byte streams by using Stream classes. (Refer System.IO namespace)

Manage the .NET Framework application data by using Reader and Writer classes. (Refer System.IO namespace)

Compress or decompress stream information in a .NET Framework application (refer System.IO.Compression namespace), and improve the security of application data by using isolated storage. (Refer System.IO.IsolatedStorage namespace)

Improving the security of the .NET Framework applications by using the .NET Framework 2.0 security features
Implement code access security to improve the security of a .NET Framework application. (Refer System.Security namespace)

Implement access control by using the System.Security.AccessControl classes.

Implement a custom authentication scheme by using the System.Security.Authentication classes. (Refer System.Security.Authentication namespace)
Encrypt, decrypt, and hash data by using the System.Security.Cryptography classes. (Refer System.Security.Cryptography namespace)

Control permissions for resources by using the System.Security.Permission classes. (Refer System.Security.Permission namespace)

Control code privileges by using System.Security.Policy classes. (Refer System.Security.Policy namespace)

Access and modify identity information by using the System.Security.Principal classes. (Refer System.Security.Principal namespace)

Implementing interoperability, reflection, and mailing functionality in a .NET Framework application
Expose COM components to the .NET Framework and the .NET Framework components to COM. (Refer System.Runtime.InteropServices namespace)

Call unmanaged DLL functions in a .NET Framework application, and control the marshaling of data in a .NET Framework application. (Refer System.Runtime.InteropServices namespace)

Implement reflection functionality in a .NET Framework application (refer System.Reflection namespace), and create metadata, Microsoft intermediate language (MSIL), and a PE file by using the System.Reflection.Emit namespace.

Send electronic mail to a Simple Mail Transfer Protocol (SMTP) server for delivery from a .NET Framework application. (Refer System.Net.Mail namespace)

Implementing globalization, drawing, and text manipulation functionality in a .NET Framework application
Format data based on culture information. (Refer System.Globalization namespace)

Enhance the user interface of a .NET Framework application by using the System.Drawing namespace.

Enhance the text handling capabilities of a .NET Framework application (refer System.Text namespace), and search, modify, and control text in a .NET Framework application by using regular expressions. (Refer System.Text.RegularExpressions namespace)

#    Comments [0] |
# Wednesday, 03 June 2009

Switching to Bing (and looking at BING API)

Today I’m switching my default search provider in Internet Explorer over to the new Microsoft Search Engine: Bing.

It seems fast, perhaps even faster than Google and with the few searches I’ve done it seems to provide the right results.

Did some quick looking around, there is a Bing developer page and Bing API as well.


#    Comments [0] |
# Tuesday, 02 June 2009

LINQ to SQL to remain alive a little longer? LINQ to SQL changes in .NET 4.0

I guess the success for LINQ to SQL makes it hard for Entity Framework to absorb the full feature set in a single (v2) release. The team has been working on a bunch of fixes and improvements to be delivered in .NET 4.0.

Here is the list as posted by Damien:

LINQ to SQL changes in .NET 4.0
Change list
  • Query plans are reused more often by specifically defining text parameter lengths
  • Identity cache lookups for primary key with single result now includes query.Where(predicate).Single/SingleOrDefault/First/FirstOrDefault
  • Reduced query execution overhead when DataLoadOptions specified (cache lookup considers DataLoadOptions value equivalency – post beta 1)
  • ITable<T> interface for additional mocking possibilities
  • Contains with enums automatically casts to int or string depending on column type
  • Associations can now specify non-primary-key columns on the other end of the association for updates
  • Support list initialization syntax for queries
  • LinqDataSource now supports inherited entities
  • LinqDataSource support for Dynamic Data query extenders added
Query stability
  • Contains now detects self-referencing IQueryable and doesn't cause a stack overflow
  • Skip(0) no longer prevents eager loading
  • GetCommand operates within SQL Compact transactions
  • Exposing Link<T> on a property/field is detected and reported correctly
  • Compiled queries now correctly detect a change in mapping source and throw
  • String.StartsWith, EndsWith and Contains now correctly handles ~ in the search string
  • Now detects multiple active result sets (MARS) better
  • Associations are properly created between entities when using eager loading with Table-Valued Functions (TVFs)
  • Queries that contain sub-queries with scalar projections now work better
Update stability
  • SubmitChanges no longer silently consumes transaction rollback exceptions
  • SubmitChanges deals with timestamps in a change conflict scenario properly
  • IsDbGenerated now honors renamed properties that don't match underlying column name
  • Server-generated columns and SQL replication/triggers now work instead of throwing SQL exception
General stability
  • Binary types equate correctly after deserialization
  • EntitySet.ListChanged fired when adding items to an unloaded entity set
  • Dispose our connections upon context disposal (ones passed in are untouched)
SQL Metal
  • Foreign key property setter now checks all affected associations not just the first
  • Improved error handling when primary key type not supported
  • Now skips stored procedures containing table-valued parameters instead of aborting process
  • Can now be used against connections that use AttachDbFilename syntax
  • No longer crashes when unexpected data types are encountered
LINQ to SQL class designer
  • Now handles a single anonymously named column in SQL result set
  • Improved error message for associations to nullable unique columns
  • No longer fails when using clauses are added to the partial user class
  • VarChar(1) now correctly maps to string and not char
  • Decimal precision and scale are now emitted correctly in the DbType attributes for stored procedures
  • Foreign key changes will be picked up when bringing tables back into the designer without a restart
Code generation (SQL Metal + LINQ to SQL class designer)
  • Stored procedures using original values now compiles when the entity and context namespaces differ
  • Virtual internal now generates correct syntax
  • Mapping attributes are now fully qualified to prevent conflicts with user types
  • KnownTypeAttributes are now emitted for DataContractSerializer with inheritance
  • Delay-loaded foreign keys now have the correct, compilable, code generated
  • Using stored procedures with concurrency no longer gets confused if entities in different namespace to context
  • ForeignKeyReferenceAlreadyHasValueException is now thrown if any association is loaded not just the first
Potentially breaking changes

We worked very hard to avoid breaking changes but of course any potential bug fix is a breaking change if your application was depending on the wrong behavior. The ones I specifically want to call out are:

Skip(0) is no longer a no-op

The special-casing of 0 for Skip to be a no-op was causing some subtle issues such as eager loading to fail and we took the decision to stop special casing this. This means if you had syntax that was invalid for a Skip greater than 0 it will now also be invalid for skip with a 0. This makes more sense and means your app would break on the first page now instead of subtlety breaking on the second page. Fail fast :)

ForeignKeyReferenceAlreadyHasValue exception

If you are getting this exception where you weren’t previously it means you have an underlying foreign key with multiple associations based on it and you are trying to change the underlying foreign key even though we have associations loaded.Best thing to do here is to set the associations themselves and if you can’t do that make sure they aren’t loaded when you want to set the foreign key to avoid inconsistencies.

#    Comments [0] |

Loading data from Excel 2007

I’m playing around with code generation using Visual Studio 2008 T4 and I needed to pull in some data. Easiest way to create the data is using Excel and then pull it into a dataset. Using the right connection string this becomes very easy.

The code below shows how to select the data from a worksheet.

public class Excel2007Reader


    private static string BuildExcelConnection( string filename )


        return @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + @";Extended Properties=""Excel 12.0;HDR=YES;""";



    public static DataSet Read( string filename, string worksheet, string range, string tableName )


        DataSet result = new DataSet();

        string connectionString = BuildExcelConnection( filename );

        string select = @"SELECT * FROM [" + worksheet + "$" + range + "]";

        using ( OleDbConnection conn = new OleDbConnection( connectionString ) )



            using ( OleDbCommand cmd = new OleDbCommand( select, conn ) )


                OleDbDataAdapter da = new OleDbDataAdapter( cmd );

                da.Fill( result, tableName );




        return result;



#    Comments [0] |
# Monday, 01 June 2009

Don’t believe everything you read or tweet

News travels fast in todays world of digital information. Blogs, Forums, Facebook and Twitter allow for easy and quick repetition of a bit of information. Heck twitter even has a name for it ‘retweeting’ (look for the posts that start with RT). I guess not so long retweeting would have been called gossiping. However, just as in real life you can’t always believe everything somebody tells you. Sometimes you need to check to make sure the information you’re getting is true. Because yes, not everything that is repeated, retweeted or posted is always true. Yesterday Ted Neward fell prey to believing someone he received an email from and responding by posting a response on his blog. Now why would I care? Well, the email Ted got told him that DevelopMentor was bye bye… As a former instructor at DevelopMentor Ted felt sad and wanted to pay homeage to the “many good people” at DevelopMentor. As it turns out the email Ted received contained false information, but within minutes of posting the blog entry information was spreading (I believe the word is ‘virally’) across the Internet with re-tweets and all those other forms of digital goodness spreading this piece of false information almost at the speed of light.

Now the good news is that DevelopMentor is very much alive and kicking and that the “many good people” that Ted paid homage to are working there today. They are teaching classes, helping customers be all that they can be. And not just with teaching classes, but also with onsite training, consulting on projects and also with the new Remote Access Open Enrollment Courses*.

Upcoming classes include:

June 15 Essential C# in LOS ANGELES

June 15 Essential Windows Communication Foundation in BOSTON

June 22 Essential Windows Presentation Foundation in BOSTON

More information can be found at www.develop.com

If you don’t believe me, or want to check the facts then call 800.699.1932 right now and register for a class! You can also email requests@develop.com

* Save Time and Travel: Remote Access Open Enrollment Courses

You can now take open enrollment courses in our Los Angeles and Boston facilities without traveling. Remote Access to our ongoing schedule of instructor-led courses will allow you to fully participate real-time in expert-level lectures, demos and labs that have made DevelopMentor a leader in software development training. We've added new collaboration tools and prepared our instructors for remote students in class so you will be fully engaged in the learning process.

#    Comments [0] |

Checking a string for illegal characters using Regular Expressions

In our Maine Microsoft Certification Study Group we recently had a discussion about using regular expression. Today I found myself writing a RegEx to check for illegal characters in a formula (string). I thought I’d share the solution:

private bool FormulaContainsIllegalCharacters( string formula )


    bool result = false;



        Regex r = new Regex( @"(!)|(@)|(#)|(\$)|(%)|(&)" );

        result = r.Match( formula ).Success;


    catch { } // ignore any regular expressions errors -> return false

    return result;


In my case I’m not interested in handling exceptions. If a technical error occurs I will accept the input. Notice that I needed to put a “\” before the $ sign, since the $ is a reserved character marking the end of a line.
I don’t need to put each character in “( )” brackets, but for personal preference I just find it easer to read.

#    Comments [0] |
# Friday, 29 May 2009

ASCII table

Whenever I need one I always need search for a good ASII table.

So here is one:

Decimal Hex Unicode Description Character Entity Name Key
000 00 0000 null [nul] Ctrl-@
001 01 0001 start of heading [soh] Ctrl-A
002 02 0002 start of text [stx] Ctrl-B
003 03 0003 end of text [etx] Ctrl-C
004 04 0004 end of transmission [eot] Ctrl-D
005 05 0005 enquiry [enq] Ctrl-E
006 06 0006 acknowledge [ack] Ctrl-F
007 07 0007 bell [bel] Ctrl-G
008 08 0008 backspace [bs] Ctrl-H
009 09 0009 horizontal tab [ht] Ctrl-I
010 0A 000A new line, line feed [nl] Ctrl-J
011 0B 000B vertical tab [vt] Ctrl-K
012 0C 000C form feed, new page [ff] Ctrl-L
013 0D 000D carriage return [cr] Ctrl-M
014 0E 000E shift out [so] Ctrl-N
015 0F 000F shift in [si] Ctrl-O
016 10 0010 data link escape [dle] Ctrl-P
017 11 0011 device control 1 [dc1] Ctrl-Q
018 12 0012 device control 2 [dc2] Ctrl-R
019 13 0013 device control 3 [dc3] Ctrl-S
020 14 0014 device control 4 [dc4] Ctrl-T
021 15 0015 negative acknowledge [nak] Ctrl-U
022 16 0016 synchronous idle [syn] Ctrl-V
023 17 0017 end of trans. block [etb] Ctrl-W
024 18 0018 cancel [can] Ctrl-X
025 19 0019 end of medium [em] Ctrl-Y
026 1A 001A substitute [sub] Ctrl-Z
027 1B 001B escape [esc] Ctrl-[
028 1C 001C file separator [fs] Ctrl-\
029 1D 001D group separator [gs] Ctrl-]
030 1E 001E record separator [rs] Ctrl-^
031 1F 001F unit separator [us] Ctrl-_
032 20 0020 Space Space
033 21 0021 Exclamation mark !
034 22 0022 quotation mark " &quot;
035 23 0023 Number sign #
036 24 0024 Dollar sign $
037 25 0025 Percent sign %
038 26 0026 Ampersand & &amp;
039 27 0027 Apostrophe '
040 28 0028 Left parenthesis (
041 29 0029 Right parenthesis )
042 2A 002A Asterisk *
043 2B 002B Plus sign +
044 2C 002C Comma ,
045 2D 002D Hyphen -
046 2E 002E Period (fullstop) .
047 2F 002F Solidus (slash) /
048 30 0030 0 0
049 31 0031 1 1
050 32 0032 2 2
051 33 0033 3 3
052 34 0034 4 4
053 35 0035 5 5
054 36 0036 6 6
055 37 0037 7 7
056 38 0038 8 8
057 39 0039 9 9
058 3A 003A Colon :
059 3B 003B Semi-colon ;
060 3C 003C less-than sign < &lt;
061 3D 003D Equals sign; =
062 3E 003E greater-than sign > &gt;
063 3F 003F Question mark ?
064 40 0040 Commercial at @
065 41 0041 A A
066 42 0042 B B
067 43 0043 C C
068 44 0044 D D
069 45 0045 E E
070 46 0046 F F
071 47 0047 G G
072 48 0048 H H
073 49 0049 I I
074 4A 004A J J
075 4B 004B K K
076 4C 004C L L
077 4D 004D M M
078 4E 004E N N
079 4F 004F O O
080 50 0050 P P
081 51 0051 Q Q
082 52 0052 R R
083 53 0053 S S
084 54 0054 T T
085 55 0055 U U
086 56 0056 V V
087 57 0057 W W
088 58 0058 X X
089 59 0059 Y Y
090 5A 005A Z Z
091 5B 005B Left square bracket [
092 5C 005C Reverse solidus (backslash) \
093 5D 005D Right square bracket ]
094 5E 005E Caret ^
095 5F 005F Horizontal bar (underscore) _
096 60 0060 Acute accent `
097 61 0061 a a
098 62 0062 b b
099 63 0063 c c
100 64 0064 d d
101 65 0065 e e
102 66 0066 f f
103 67 0067 g g
104 68 0068 h h
105 69 0069 i i
106 6A 006A j j
107 6B 006B k k
108 6C 006C l l
109 6D 006D m m
110 6E 006E n n
111 6F 006F o o
112 70 0070 p p
113 71 0071 q q
114 72 0072 r r
115 73 0073 s s
116 74 0074 t t
117 75 0075 u u
118 76 0076 v v
119 77 0077 w w
120 78 0078 x x
121 79 0079 y y
122 7A 007A z z
123 7B 007B Left curly brace {
124 7C 007C Vertical bar |
125 7D 007D Right curly brace }
126 7E 007E Tilde ~
127 7F 007F delete [del]
#    Comments [0] |
# Thursday, 28 May 2009

Software Development Event on June 26th in Hotel Houten te Houten (Netherlands)

On June 26th the SDN will organize it’s quarterly Software Development Event in Hotel Houten (te Houten) in the Netherlands.

The speaker line-up is awesome (as usual), don’t miss it!


9:00 - 10:15

iPhone Development for .NET Developers

Kevin McNeish



Agile anti-patterns. Yes, agile projects can fail too.

Sander Hoogendoorn



10 Tips to make your Delphi Win32 App .NET Ready

Michael Li



Advanced DotNetNuke Module Development

Mitchel Sellers



MythBusters – debunking common SharePoint Farm Misconceptions

Spencer Harbar



Van concept naar productie met Expression Blend 3

Martin Tirion


10:45 - 12:00

Design by Contract in .NET

Pieter Joost van de Sande



Working with Expression Blend to Build World Class User Interfaces

Kevin McNeish



HYPER V/SharePoint How to create a proper lab

Bob Fox



ASP.NET Development met Delphi Prism

Bob Swart



Creating a DotNetNuke Authentication Provider

Mitchel Sellers



Waarom SharePoint Application Pages?

Robin Meuré


13:00 - 14:15

Windows Azure

Dennis van der Stelt



Sessie nog onbekend

Spreker Onbekend



De toekomst van hardware

Dick van Es



ER/Studio for Delphi Developers

Michael Li



Kerberos Part 1: no ticket touting here. Does SharePoint add another head?

Spencer Harbar



Wat is Silverlight 3?

Koen Zwikstra


14:30 - 15:45

A Lap Around VSTS 2010

Hassan Fadili



Learning from the iPhone: Building World-Class .NET User Interfaces

Kevin McNeish



Model driven development for the cloud

Erik van de Ven



Reduce, re-use, recycle

Gert Hekkenberg



SQL Server Performance en Tuning

Peter ter Braake



Building a Silverlight module

Stefan Kamphuis


16:15 - 17:30

SQL Data Services & Silveright 3

Dennis van der Stelt



Unix/Linux vs NonStop

Diederick de Buck



Spatial Data Types: SQL Server 2008 als navigator.

Henk van Galen



Delphi 2009 IDE for Delphi 5-6-7.x developers

Michael Li



Creating a DotNetNuke Membership Provider

Mitchel Sellers



Kerberos Part 2: Advanced Scenarios and additional considerations.

Spencer Harbar



Sign up here: www.sdn.nl/sde

#    Comments [5] |

Maine Quality Forum

As owner of Develop-One I’m proud to announce that the Maine Quality Forum is now being hosted and serviced by Develop-One.

Visit the Maine Quality Forum site here.

#    Comments [0] |
# Wednesday, 27 May 2009

Rounding decimals to X positions

Another little extension method. This one allows easy rounding to a specific number of decimals:

double d = 0.66782423;
string s = d.ToString(3);  // s = “0.668”

This is done by the following method:


public static class DoubleExtension


    public static string ToString( this double value, int decimals )


        StringBuilder format = new StringBuilder( "0" );

        if ( decimals > 0 )


            format.Append( "." );


        for ( int i = 0; i < decimals; i++ )


            format.Append( "0" );


        return value.ToString( format.ToString() );



#    Comments [0] |

ReportViewer Control in Visual Studio 2008

I’ve been working a lot with the ReportViewer Control in Visual Studio 2008. The greatest part of the control is that you can implement reporting without using a database!

ReportViewer Control in Visual Studio 2008

ReportViewer is a freely redistributable control that enables embedding reports in applications developed using the .NET Framework. Reports are designed with drag-and-drop simplicity using Report Designer included in Visual Studio 2008 (Standard editon and above.)

See screenshots of some applications that have ReportViewer control embedded in them.

The ReportViewer control offers the following benefits:

  • Processes data efficiently. The reporting engine built into ReportViewer can perform operations such as filtering, sorting, grouping and aggregation.
  • Supports a variety of ways in which to present data. You can present data as lists, tables, charts and matrices (also known as crosstabs.)
  • Adds visual appeal. You can specify fonts, colors, border styles, background images etc to make your report visually appealing.
  • Enables interactivity in reports. You can have collapsible sections, document map, bookmarks, interactive sorting etc in your report.
  • Supports conditional formatting. You can embed expressions in the report to change display style dynamically based on data values.
  • Supports printing and print preview.
  • Supports export to Excel and PDF.

The control can process and render reports independently using a built-in engine ('local mode') or it can display reports that are processed and rendered on a Report Server ('remote mode').

There is a WinForms and a WebForms version of the control.


Excellent tutorials on ReportViewer can be found at: http://www.gotreportviewer.com/

#    Comments [0] |

Convert DateTime to DateTime?

Back when .NET 1.1 was cool people would often use DateTime.MinValue to indicate that a date was actually empty. With .NET 2.0 can the Nullable<T> which allows you to create a nullable datetime. Ofcourse there is still plenty of old code out there, so when adding new code you may need to convert DateTime.MinValue to null. With extensions methods (.NET 3.5) you can implement an elegant solution.

The code below will allow you to write this:

DateTime old = DateTime.MinValue;

DateTime? current = old.ToNullable();

This is achieved with the following extension method:

public static class DateTimeExtension
    /// <summary>
    /// Examine the value of the DateTime, if the value is equal to DateTime.MinValue
    /// then the result is null, otherwise the supplied value is returned.
    /// </summary>
    /// <param name="value"></param>
    /// <returns></returns>
    public static DateTime? ToNullableDateTime( this DateTime value )
        if ( value == DateTime.MinValue )
            return null;
            return value;

#    Comments [0] |