technical notes

Tháng Ba 31, 2008

Late-init MaskEditExtender or CalendarExtender for speed up loading page.

Chuyên mục: webform — ngduy @ 7:33 chiều

When we uses MaskEditExtender or CalendarExtender in a GridView, List or Repeater. Loading time will be very slow, specially after the page loaded, IE (or FF) will be stop responding in a long time. The reason is AjaxControlToolkit init many MaskEditExtenders.

To improve loading speed of GridView which contains MaskEditExtenders or CalendarExtenders, Mask and Calendar control will be init only when user focus on control. Follow example as below:

1. Step 1: Create pre-render Mask or Calendar control.

2. Step 2: Create javascript control to create Mask or Calendar.

3. Step 3: Put into control.

Tháng Ba 9, 2008

.NET 2.0 Cast operator vs. As operator

Chuyên mục: NET — ngduy @ 6:23 chiều

Khi chuyển từ untyped data values từ SQL database vào 1 biến, sẽ có tình huống xảy ra, khi cast từ DBNull sang một kiểu nào đó, ta sẽ bị InvalidCastException. Tuy nhiên, có một cách để gán thoải mái mà không lo lắng gì. Bắt đầu xem ví dụ dưới đây:

object objstr = DBNull.Value;
string str1 = objstr; //Cast throws an Exception
string str2 = objstr as string //No exception thrown and str2 == null

Có thể dùng as để viết code cho gọn như vd dưới:

if ( objstr == DBNull.Value )
{
    strResult = "Default";
}
else
{
    strResult = (string)objstr;
}
//Is equivalent to
strResult = objstr as string ?? "Default";

Như vậy, as operator giống như cast operator, nhưng khi gặp null value, as sẽ chuyển giá trị thành null chứ không thrown exception như là cast.

Tham khảo MSDN C# Programmer’s Reference tại http://msdn2.microsoft.com/en-us/library/cscsdfbt(vs.71).aspx thì được giải thích như sau:

expression <span class="kwrd">as</span> type</pre>
<pre><span class="rem">//is equivalent to</span></pre>
<pre>expression <span class="kwrd">is</span> type ? (type)expression : (type)null

Fix wrong position of CalendarExtender

Chuyên mục: NET, webform — ngduy @ 5:59 chiều

Khi thêm CalendarExtender vào một số DataBound controls, thì xảy ra hiện tượng calendar hiển thị không đúng, tức là không hiển thị ngay phía dưới của Textbox. Sau đây là cách fix lỗi này:

Trang aspx:

<asp:TextBox ID="txtStartDate" runat="server"></asp:TextBox>
<asp:ImageButton ID="imgStartDate" ImageUrl="../images/calendar.gif" runat="server" CausesValidation="False" />
<ajaxToolkit:CalendarExtender id="CalendarExtender1" runat="server" TargetControlID="txtStartDate"
PopupButtonID="imgStartDate" CssClass="datePicker"></ajaxToolkit:CalendarExtender> 

Sau đó định nghĩa css này trong file stylesheet:

.datePicker

{
    position:relative;
    left:5px;
}

.datePicker .ajax__calendar_container
{
background-color:White!important;
border:1px solid blue!important;
z-index:50000;
}
.datePicker .ajax__calendar_hover .ajax__calendar_day
{background-color:#edf9ff;border-color:#daf2fc;color:#0066cc!important;}
.datePicker .ajax__calendar_hover .ajax__calendar_month
{background-color:#edf9ff;border-color:#daf2fc;color:#0066cc!important;}
.datePicker .ajax__calendar_hover .ajax__calendar_year
{background-color:#edf9ff;border-color:#daf2fc;color:#0066cc!important;}
.datePicker .ajax__calendar_hover .ajax__calendar_title
{color:#0066cc!important;}
.datePicker .ajax__calendar_hover .ajax__calendar_today
{color:#0066cc!important;}

Các style ở phía dưới có thể không có cũng được. Chủ yếu cho đẹp.

Blog at WordPress.com.