<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msdnvietnam.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>SharePoint Fan</title><link>http://msdnvietnam.net/blogs/quang/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Building batch approval ribbon in SharePoint 2010</title><link>http://msdnvietnam.net/blogs/quang/archive/2010/10/19/building-batch-approval-ribbon-in-sharepoint-2010.aspx</link><pubDate>Tue, 19 Oct 2010 03:33:53 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:7166</guid><dc:creator>Nguyen Ba Quang</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/quang/rsscomments.aspx?PostID=7166</wfw:commentRss><comments>http://msdnvietnam.net/blogs/quang/archive/2010/10/19/building-batch-approval-ribbon-in-sharepoint-2010.aspx#comments</comments><description>&lt;p&gt;In SharePoint 2010, We can delete multiple items but cannot with approve/reject items. So, how can user approve/reject multiple items in one time? For example TimeSheet application in SharePoint. We can create custom Ribbon then using Application page as dialog and SharePoint Server-Side object model to solve that problem. To complete your function, you have to resolve following things:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1. How we pass the selected items and list to dialog page&lt;/strong&gt;? We use ECMAScript as following script in CommanAction funtion of the ribbon button&lt;/p&gt;  &lt;pre class="brush: js; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 2; toolbar: true;"&gt;// Shows custom dialog using SharePoint Client JS OM
function RibbonButtonHandler() {
    var ctx = SP.ClientContext.get_current();
    var items = SP.ListOperation.Selection.getSelectedItems(ctx);
    var myItems = &amp;#39;&amp;#39;;
    var k;

    for (k in items) {
        myItems += &amp;#39;|&amp;#39; + items[k].id;
    }
    var options = {       
        url: &amp;quot;/_layouts/BatchApprovalRibbon/UI/ApproveRejectPage.aspx?items=&amp;quot; + myItems + &amp;quot;&amp;amp;list=&amp;quot; + SP.ListOperation.Selection.getSelectedList(),
        width: 600,
        height: 400,
        dialogReturnValueCallback: demoCallback
    };

    SP.UI.ModalDialog.showModalDialog(options);
}&lt;/pre&gt;

&lt;p&gt;By passing selected items and list as text in url parameter, we can easy to get those in application page by Request.QueryString&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. In Application Page dialog, how can We approve/reject item programmatically?&lt;/strong&gt; We cannot use item[“Approval Status”] = “approved”, we must use following scripts instead.&lt;/p&gt;

&lt;pre class="brush: csharp; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 2; toolbar: true;"&gt;SPListItem item = currentList.GetItemById(Int32.Parse(id));               SPModerationInformation approvalStatus = item.ModerationInformation; approvalStatus.Status = status;                        
approvalStatus.Comment = comments;                        
item.Update();&lt;/pre&gt;

&lt;p&gt;with status is SPModerationStatusType.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. After approve/reject Items, how can we close dialog page and refresh parent page?&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;First we must close&amp;#160; the dialog page in server-side code:&lt;/p&gt;

&lt;pre class="brush: csharp; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 2; toolbar: true;"&gt;protected void CloseDialogPage()
        {
            Context.Response.Write(&amp;quot;&amp;lt;script type=&amp;#39;text/javascript&amp;#39;&amp;gt;window.frameElement.commitPopup();&amp;lt;/script&amp;gt;&amp;quot;);
            Context.Response.Flush();
            Context.Response.End();
        }&lt;/pre&gt;

&lt;p&gt;Then we call SP.UI.ModalDialog.RefreshPage(SP.UI.DialogResult.OK) in dialogReturnValueCallback function as following&lt;/p&gt;

&lt;pre class="brush: js; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 2; toolbar: true;"&gt;function demoCallback(dialogResult, returnValue) {
    SP.UI.Notify.addNotification(&amp;#39;Operation Successful!&amp;#39;);
    SP.UI.ModalDialog.RefreshPage(SP.UI.DialogResult.OK);
}&lt;/pre&gt;

&lt;p&gt;Now You can use your ribbon to process batch approve/reject items.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/clip_5F00_image002_5F00_669E6568.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="clip_image002" border="0" alt="clip_image002" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/clip_5F00_image002_5F00_thumb_5F00_4CCA2F39.jpg" width="244" height="162" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. But I think we should consider how to enable/disable your ribbon by condition or context.&lt;/strong&gt; To Enable/Disable ribbon button, we use EnabledScript attribute in CommandUIHandler element in you ribbon custom action &lt;/p&gt;

&lt;pre class="brush: xml; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 2; toolbar: true;"&gt;&amp;lt;CommandUIHandler
          Command=&amp;quot;Ribbon.Approval.Batch Approval.Button_CMD&amp;quot;
          EnabledScript=&amp;quot;BLOCKED SCRIPTEnableRibbonButton();&amp;quot;
          CommandAction=&amp;quot;BLOCKED SCRIPTRibbonButtonHandler();&amp;quot; /&amp;gt;  	&lt;/pre&gt;

&lt;p&gt;And in javascript funtion, in my scenario, we want to disable the button when there isn’t any items has selected and will enable for special list only. We use following script&lt;/p&gt;

&lt;pre class="brush: js; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 2; toolbar: true;"&gt;function EnableRibbonButton() {
    var items = SP.ListOperation.Selection.getSelectedItems();
    var ci = CountDictionary(items);   
    var listId = SP.ListOperation.Selection.getSelectedList();
    if (ci &amp;gt; 0 &amp;amp;&amp;amp; listId == &amp;#39;{A32BC151-5396-4377-AFB3-B769668C3A83}&amp;#39;) {
        return true;
    }
    return false;
}&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Finally: NOTE&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Keep in mind that we pass url: &amp;quot;/_layouts/BatchApprovalRibbon/UI/ApproveRejectPage.aspx…. It mean dialog page will called under top level sie context. So SPContext.Current always return top level site. So if You use this ribbon in subsite, You should get error message “the list does not exist”. To resolve it, We can&lt;/p&gt;

&lt;p&gt;- change the url to: &lt;strong&gt;url: &amp;quot;/[your subsite]/_layouts/…&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;- In Code behind, does not use SPContext.Current.Web directly, we must find the exactly the web of the list instead. We was use&lt;/p&gt;

&lt;pre class="brush: csharp; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 2; toolbar: true;"&gt;SPSite site = SPContext.Current.Site;           
foreach (SPWeb web in site.AllWebs)           
{                
        currentList = SearchListById(web, listGuid);               
        .................            
}        &lt;/pre&gt;

&lt;pre class="brush: csharp; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 2; toolbar: true;"&gt;SPList SearchListById(SPWeb web, Guid listId)
        {                        
            foreach (SPList list in web.Lists)
            {
                if (list.ID.Equals(listGuid))
                {
                    return list;
                }
            }
            return null;
        }&lt;/pre&gt;

&lt;p&gt;Hope this help!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=7166" width="1" height="1"&gt;</description><category domain="http://msdnvietnam.net/blogs/quang/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://msdnvietnam.net/blogs/quang/archive/tags/ECMAScript/default.aspx">ECMAScript</category><category domain="http://msdnvietnam.net/blogs/quang/archive/tags/jQuery/default.aspx">jQuery</category></item><item><title>SPServices: Cascading Drop-Down List in SharePoint 2010 List using jQuery</title><link>http://msdnvietnam.net/blogs/quang/archive/2010/09/21/spservices-cascading-drop-down-list-in-sharepoint-2010-list-using-jquery.aspx</link><pubDate>Tue, 21 Sep 2010 03:18:45 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:7058</guid><dc:creator>Nguyen Ba Quang</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/quang/rsscomments.aspx?PostID=7058</wfw:commentRss><comments>http://msdnvietnam.net/blogs/quang/archive/2010/09/21/spservices-cascading-drop-down-list-in-sharepoint-2010-list-using-jquery.aspx#comments</comments><description>&lt;p&gt;1. Create Cities custom list:&lt;/p&gt;  &lt;p&gt;2. Create Districts Custom list: with City lookup column&lt;/p&gt;  &lt;p&gt;3. Create Ward custom list: with District lookup column&lt;/p&gt;  &lt;p&gt;4. Create Addresses list: with City, District, Ward lookup columns&lt;/p&gt;  &lt;p&gt;Using following scripts in the NewForm.aspx of Addresses&lt;/p&gt;  &lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;lt;script src=&lt;span style="color:#006080;"&gt;&amp;quot;/TimeSheet/jQuery%20Libraries/jquery-1.4.2.min.js&amp;quot;&lt;/span&gt; type=&lt;span style="color:#006080;"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;lt;script src=&lt;span style="color:#006080;"&gt;&amp;quot;/TimeSheet/jQuery%20Libraries/jquery.SPServices-0.5.4.min.js&amp;quot;&lt;/span&gt; type=&lt;span style="color:#006080;"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;lt;script language=&lt;span style="color:#006080;"&gt;&amp;quot;javascript&amp;quot;&lt;/span&gt; type=&lt;span style="color:#006080;"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        $(document).ready(function() {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            $().SPServices.SPCascadeDropdowns({&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                relationshipList: &lt;span style="color:#006080;"&gt;&amp;quot;Districts&amp;quot;&lt;/span&gt;,&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                relationshipListParentColumn: &lt;span style="color:#006080;"&gt;&amp;quot;City&amp;quot;&lt;/span&gt;,&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                relationshipListChildColumn: &lt;span style="color:#006080;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;,&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                relationshipListSortColumn: &lt;span style="color:#006080;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;,&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                parentColumn: &lt;span style="color:#006080;"&gt;&amp;quot;City&amp;quot;&lt;/span&gt;,&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                childColumn: &lt;span style="color:#006080;"&gt;&amp;quot;District&amp;quot;&lt;/span&gt;,&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                promptText: &lt;span style="color:#006080;"&gt;&amp;quot;Choose District...&amp;quot;&lt;/span&gt;,&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                debug: &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            });&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            $().SPServices.SPCascadeDropdowns({&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                relationshipList: &lt;span style="color:#006080;"&gt;&amp;quot;Ward&amp;quot;&lt;/span&gt;,&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                relationshipListParentColumn: &lt;span style="color:#006080;"&gt;&amp;quot;District&amp;quot;&lt;/span&gt;,&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                relationshipListChildColumn: &lt;span style="color:#006080;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;,&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                relationshipListSortColumn: &lt;span style="color:#006080;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;,&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                parentColumn: &lt;span style="color:#006080;"&gt;&amp;quot;District&amp;quot;&lt;/span&gt;,&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                childColumn: &lt;span style="color:#006080;"&gt;&amp;quot;Ward&amp;quot;&lt;/span&gt;,&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                promptText: &lt;span style="color:#006080;"&gt;&amp;quot;Choose Ward...&amp;quot;&lt;/span&gt;,&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                debug: &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            });&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        });&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Hope this help!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=7058" width="1" height="1"&gt;</description></item><item><title>SPServices: Using jQuery to auto fill current user information in SharePoint 2010</title><link>http://msdnvietnam.net/blogs/quang/archive/2010/09/21/spservices-using-jquery-to-auto-fill-current-user-information-in-sharepoint-2010.aspx</link><pubDate>Tue, 21 Sep 2010 03:18:13 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:7057</guid><dc:creator>Nguyen Ba Quang</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/quang/rsscomments.aspx?PostID=7057</wfw:commentRss><comments>http://msdnvietnam.net/blogs/quang/archive/2010/09/21/spservices-using-jquery-to-auto-fill-current-user-information-in-sharepoint-2010.aspx#comments</comments><description>&lt;p&gt;Using following script in your page by SharePoint Designer or Content Editor WP&lt;/p&gt;  &lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;lt;script language=&lt;span style="color:#006080;"&gt;&amp;quot;javascript&amp;quot;&lt;/span&gt; src=&lt;span style="color:#006080;"&gt;&amp;quot;/TimeSheet/jQuery%20Libraries/jquery-1.4.2.min.js&amp;quot;&lt;/span&gt; type=&lt;span style="color:#006080;"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;lt;script language=&lt;span style="color:#006080;"&gt;&amp;quot;javascript&amp;quot;&lt;/span&gt; src=&lt;span style="color:#006080;"&gt;&amp;quot;/TimeSheet/jQuery%20Libraries/jquery.SPServices-0.5.4.min.js&amp;quot;&lt;/span&gt; type=&lt;span style="color:#006080;"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;lt;script language=&lt;span style="color:#006080;"&gt;&amp;quot;javascript&amp;quot;&lt;/span&gt; type=&lt;span style="color:#006080;"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;$(document).ready(function() {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    var userDepartment = $().SPServices.SPGetCurrentUser({&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        fieldName: &lt;span style="color:#006080;"&gt;&amp;quot;Department&amp;quot;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    });&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    $(&lt;span style="color:#006080;"&gt;&amp;quot;input[Title=&amp;#39;Department&amp;#39;]&amp;quot;&lt;/span&gt;).val(userDepartment);    &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;});&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;In this script, we auto fill Department textbox by department of current user.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://sympmarc.com/2010/04/29/populating-a-sharepoint-list-form-with-the-current-user-information/"&gt;Reference&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=7057" width="1" height="1"&gt;</description></item><item><title>Lập trình động trong .NET 4.0 và WPF 4.0</title><link>http://msdnvietnam.net/blogs/quang/archive/2010/05/13/l-p-tr-236-nh-ng-trong-net-4-0-v-224-wpf-4-0.aspx</link><pubDate>Thu, 13 May 2010 04:36:15 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:6242</guid><dc:creator>Nguyen Ba Quang</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/quang/rsscomments.aspx?PostID=6242</wfw:commentRss><comments>http://msdnvietnam.net/blogs/quang/archive/2010/05/13/l-p-tr-236-nh-ng-trong-net-4-0-v-224-wpf-4-0.aspx#comments</comments><description>&lt;p&gt;Năm 2010 là thời điểm mà Microsoft sẽ công bố hàng loạt các sản phẩm công nghệ mới. Trong đó phải kết đến như Microsoft Office 2010, SharePoint 2010 và đặc biệt là bộ công cụ phát triển cho các lập trình viên, Visual Studio 2010. Đi kèm với Visual Studio 2010 là nền tảng phát triển mới .NET 4.0 mạnh mẽ. NET 4.0 hứa hẹn sẽ mở ra một cuộc cách mạng trong phát triển ứng dựng dựa trên nền tảng Microsoft. Nó thúc đẩy quá trình phát triển phần mềm, trở nên linh hoạt hơn và nhanh chóng hơn. &lt;/p&gt;  &lt;h3&gt;Lập trình động (Dynamic programming)&lt;/h3&gt;  &lt;p&gt;Có thể nói nét chủ đạo trong .NET 4.0 đó là lập trình động (dynamic programming). Các đối tượng (object) ngày nay trở nên động (dynamic) theo ý nghĩa là cấu trúc và hành vi của nó không bị bó buộc bởi kiểu dữ liệu tĩnh (static) như trước đó, đồng thời trình biên dịch không cần biết kiểu dữ liệu của đối tượng trong quá trình biên dịch chương trình. Điều này sẽ rất có ích khi chương trình cần phải tương tác với các đối tượng từ các ngôn ngữ lập trình động giống như Python hoặc Ruby, hay là làm việc với các đối tượng mà có sự thay đổi về mặt cấu trúc như HTML hoặc DOM. Qua đó chúng ta có thể sử dụng nhiều ngôn ngữ khác nhau trên cùng một ứng dụng. Các đoạn mã của C#, VB.NET, IronPython,Javascripts… có thể hòa trộn với nhau để tạo ra một chương trình hoàn chỉnh. &lt;/p&gt;  &lt;p&gt;Với dynamic trong .NET 4.0, khi lập nhận được một đối tượng, chúng ta không cần phải quan tâm đối tượng đó đến từ COM, IronPython hay HTML DOM hoặc Reflection. Chúng ta có thể sẵn sàng áp dụng các phép toán cho nó và để cho môi trường thực thi quyết định phép toán nào sẽ áp dụng cho đối tượng nào. &lt;/p&gt;  &lt;p&gt;Lấy ví dụ: &lt;/p&gt;  &lt;p&gt;&lt;u&gt;Gọi phương thức từ lớp C#&lt;/u&gt;&lt;/p&gt;  &lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;Calculator calc = GetCalculator();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; sum = calc.Add(10, 20);&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;u&gt;Gọi thông qua Reflection:&lt;/u&gt;&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; calc = GetCalculator();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;Type calcType = calc.GetType();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; res = calcType.InvokeMember(&lt;span style="color:#006080;"&gt;&amp;quot;Add&amp;quot;&lt;/span&gt;,&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    BindingFlags.InvokeMethod, &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;,&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt;[] { 10, 20 });&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; sum = Convert.ToInt32(res);&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;u&gt;Gọi thông qua DOM:&lt;/u&gt;&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;ScriptObject calc = GetCalculator();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; res = calc.Invoke(&lt;span style="color:#006080;"&gt;&amp;quot;Add&amp;quot;&lt;/span&gt;, 10, 20);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; sum = Convert.ToInt32(res);&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;u&gt;Với dynamic C# 4&lt;/u&gt;: Chúng ta không cần quan tâm đối tượng trả về từ phương phương thức GetCalculator() thuộc lớp C#, Reflection hay DOM. Trong khi chúng ta vẫn có thể tiến hành gọi phương thức Add của nó. Rõ ràng doạn mã này ngắn gọn và dễ hiểu hơn rất nhiều trước đó.&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;dynamic calc = GetCalculator();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; sum = calc.Add(10, 20);&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;System.Dynamic.DynamicObject&lt;/h3&gt;

&lt;p&gt;. NET 4.0 giới thiệu một lớp mới gọi là DynamicObject cho phép định nghĩa các hành vi có thể được thực thi trong quá trình chạy. Đây là một đặc trưng rất mới trong .NET 4.0. Chúng ta biết rằng các đối tượng trong .NET 3.5 và trước đó đều phải xác định cấu trúc và các hành vi trong quá trình biên dịch. Với DynamicObject cho phép các lập trình viên xây dựng các đối tượng một cách linh hoạt hơn. Việc lấy giữ liệu hay xác định hành vi cho đối tượng có thể được quyết định và thực thi trong quá runtime. Lập trình viên sẽ viết mã để điều khiển quá trình lấy và thao tác giữ liệu cho đối tượng. Điều này sẽ rất có ích khi chúng ta làm việc các đối tượng có sự thay đổi về mặt cấu trúc như XML hay ADO object. &lt;/p&gt;

&lt;p&gt;&lt;u&gt;Lấy ví dụ: Bài toán đọc một đối tượng XML&lt;/u&gt; &lt;/p&gt;

&lt;p&gt;Trước hết chúng ta khai báo một lớp kế thừa từ DynamicObject&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; EasierXML : DynamicObject&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; XDocument _xml = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; XDocument();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; EasierXML(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Xml)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;._xml = XDocument.Parse(Xml);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; TryGetMember(GetMemberBinder binder,&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; result)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; nodeName = binder.Name;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            result = _xml.Element(&lt;span style="color:#006080;"&gt;&amp;quot;test&amp;quot;&lt;/span&gt;).Element(nodeName).Value;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    }  &lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Chúng ta sử dụng đối tượng này để đọc cấu trúc XML như sau:&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;dynamic easierXML =&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; EasierXML(&lt;span style="color:#006080;"&gt;@&amp;quot;&amp;lt;test&amp;gt;&amp;lt;node1&amp;gt;Alpha&amp;lt;/node1&amp;gt;&amp;lt;node2&amp;gt;Beta&amp;lt;/node2&amp;gt;&amp;lt;/test&amp;gt;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;Console.WriteLine(easierXML.node1);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;Console.WriteLine(easierXML.node2);  &lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Trong ví dụ này, phương thức TryGetMember() được gọi đến cho node1, node2, do đó cho phép 
  &lt;br /&gt;truy vấn tài liệu XML và trả lại các nút riêng lẻ. Trong trường hợp cấu trúc XML có sự thay đổi, có một số node nào đó được thêm, chúng ta chỉ việc gọi đến easierXML.node3, easierXML.node4,.. mà không cần phải thay đổi đến lớp EasierXML &lt;/p&gt;

&lt;p&gt;Một ví dụ khác, sử dụng DynamicObject còn giúp chương trình giảm thiểu được các lỗi phát sinh trong quá trình ép kiểu giữ liệu khi chúng ta làm việc với các đối tượng ADO. &lt;/p&gt;

&lt;p&gt;&lt;u&gt;Theo cách lập trình thông thường:&lt;/u&gt; chúng ta phải tiến hành ép kiểu mỗi khi đọc giá trị từ database&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;com.CommandText = &lt;span style="color:#006080;"&gt;&amp;quot;SELECT * FROM Employees&amp;quot;&lt;/span&gt;;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (IDataReader reader = com.ExecuteReader())&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                {                    &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                    &lt;span style="color:#0000ff;"&gt;while&lt;/span&gt; (reader.Read())&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                    {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                        &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; id = Int32.Parse(reader[&lt;span style="color:#006080;"&gt;&amp;quot;EmployeeID&amp;quot;&lt;/span&gt;].ToString());&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                        &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; firstName = reader[&lt;span style="color:#006080;"&gt;&amp;quot;FirstName&amp;quot;&lt;/span&gt;].ToString();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                        DateTime dob = DateTime.Parse(reader[&lt;span style="color:#006080;"&gt;&amp;quot;BirthDate&amp;quot;&lt;/span&gt;].ToString());&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                    }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;u&gt;Sử dụng dynamic:&lt;/u&gt; kiểu dữ liệu được tự động xác định trong quá trình thực thi&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;com.CommandText = &lt;span style="color:#006080;"&gt;&amp;quot;SELECT * FROM Employees&amp;quot;&lt;/span&gt;;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (IDataReader reader = com.ExecuteReader())&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                    dynamic dr = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; DynamicReader(reader);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                    &lt;span style="color:#0000ff;"&gt;while&lt;/span&gt; (reader.Read())&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                    {                        &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                        &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; id = dr.EmployeeID;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                        &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; firstName = dr.FirstName;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                        DateTime dob = dr.BirthDate;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                    }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Ứng dụng dynamic cho WPF 4 trong quá trình gắn kết giữ liệu động (dynamic binding)&lt;/h3&gt;

&lt;p&gt;Trên đây là nét đặc trưng trong nền tảng ngôn ngữ .NET 4.0 đó là dynamic programming. Vậy chúng ta có thể ứng dụng nó vào các bài toán thực tế như thế nào? Lấy một ví dụ cho một ứng dụng desktop client sử dụng WPF. Như chúng ta biết rằng WPF tách biệt phần hiển thị của ứng dụng với các đoạn mã logic. Điều đó giúp cho các lập trình viên và các nhà thiết kế có thể làm việc độc lập mà vẫn không ảnh hưởng tới quá trình phát triển của ứng dụng. Các ứng dụng ngày nay thường được phát triển thông qua kiến trúc nhiều tầng. Một kiến trúc căn bản bao gồm tầng thể hiện, tầng logic nghiệp vụ và tầng thao tác dữ liệu. Thông thường, tầng thể hiện sẽ phát sinh nhiều yêu cầu thay đổi nhất từ phía khách hàng, trong khi tầng thao tác giữ liệu phải đảm bảo tính ổn định về mặt kiến trúc. Dó đó một kiến trúc tốt cần đảm bảo những yêu cầu thay đổi từ phía khach hàng không làm ảnh hưởng quá nhiều đến thiết kệ hiện có của ứng dụng, đặc biệt là các thiết kế liên quan đến thao tác giữ liệu.&lt;/p&gt;

&lt;p&gt;&lt;u&gt;Xét một ví dụ sau&lt;/u&gt;: Quản lý thông tin cá nhân &lt;/p&gt;

&lt;p&gt;Giữ liệu được lưu trong 1 file XML có cấu trúc:&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;lt;?xml version=&lt;span style="color:#006080;"&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt; encoding=&lt;span style="color:#006080;"&gt;&amp;quot;utf-8&amp;quot;&lt;/span&gt; ?&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;lt;People&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &amp;lt;Person&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &amp;lt;FirstName&amp;gt;Quang&amp;lt;/FirstName&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &amp;lt;LastName&amp;gt;Nguyễn Bá&amp;lt;/LastName&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &amp;lt;/Person&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;  &amp;lt;Person&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &amp;lt;FirstName&amp;gt;Cường&amp;lt;/FirstName&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &amp;lt;LastName&amp;gt;Trịnh Minh&amp;lt;/LastName&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;lt;/Person&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;h4&gt;Các tiếp cận trước đây (chưa có dynamic)&lt;/h4&gt;

&lt;h5&gt;Thực thể (Business Entity)&lt;/h5&gt;

&lt;p&gt;Khai báo một lớp Person&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Person&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; FirstName { get; set; }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; LastName { get; set; }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;h5&gt;Thao tác giữ liệu (Data access)&lt;/h5&gt;

&lt;p&gt;Lấy giữ liệu từ nguồn (trong ví dụ này sử dụng XML là nguồn lưu trữ giữ liệu, tương tự chúng ta có thể thay thế XML bằng CSDL có cấu trúc như SQL Server, Oracle)&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; IEnumerable&amp;lt;Person&amp;gt; GetData()&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            XDocument oDoc = XDocument.Load(&lt;span style="color:#006080;"&gt;&amp;quot;People.xml&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            var myData = from info &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; oDoc.Descendants(&lt;span style="color:#006080;"&gt;&amp;quot;Person&amp;quot;&lt;/span&gt;)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                         select &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Person&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                         {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                            FirstName = info.Element(&lt;span style="color:#006080;"&gt;&amp;quot;FirstName&amp;quot;&lt;/span&gt;).Value,&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                            LastName = info.Element(&lt;span style="color:#006080;"&gt;&amp;quot;LastName&amp;quot;&lt;/span&gt;).Value,                             &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                         };&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; myData.ToList&amp;lt;Person&amp;gt;();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;h5&gt;Hiển thị (Presentation)&lt;/h5&gt;

&lt;p&gt;Gắn kết giữ liệu và hiển thị lên controls:&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;lt;DataGrid Name=&lt;span style="color:#006080;"&gt;&amp;quot;myDataGrid&amp;quot;&lt;/span&gt; VerticalAlignment=&lt;span style="color:#006080;"&gt;&amp;quot;Top&amp;quot;&lt;/span&gt; ItemsSource=&lt;span style="color:#006080;"&gt;&amp;quot;{Binding}&amp;quot;&lt;/span&gt; AutoGenerateColumns=&lt;span style="color:#006080;"&gt;&amp;quot;False&amp;quot;&lt;/span&gt; &amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        &amp;lt;DataGrid.Columns&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            &amp;lt;DataGridTextColumn x:Name=&lt;span style="color:#006080;"&gt;&amp;quot;firstNameColumn&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;              Binding=&lt;span style="color:#006080;"&gt;&amp;quot;{Binding Path=FirstName}&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;              Header=&lt;span style="color:#006080;"&gt;&amp;quot;First Name&amp;quot;&lt;/span&gt; Width=&lt;span style="color:#006080;"&gt;&amp;quot;SizeToHeader&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            &amp;lt;DataGridTextColumn x:Name=&lt;span style="color:#006080;"&gt;&amp;quot;lastNameColumn&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;              Binding=&lt;span style="color:#006080;"&gt;&amp;quot;{Binding Path=LastName}&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;              Header=&lt;span style="color:#006080;"&gt;&amp;quot;Last Name&amp;quot;&lt;/span&gt; Width=&lt;span style="color:#006080;"&gt;&amp;quot;SizeToHeader&amp;quot;&lt;/span&gt; /&amp;gt;            &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        &amp;lt;/DataGrid.Columns&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;lt;/DataGrid&amp;gt;   &lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Điều gì sẽ xảy ra nếu khách hàng yêu cầu quản lý thêm thông tin về tuổi (Age) và giới tính (isMale). Rõ ràng với cách thiết kế trên chúng ta phải thay đổi tất cả các tầng trong kiến trúc của ứng dụng. Điều đó làm tăng chi phí cho việc nâng cấp ứng dụng, điều mà cả khách hang và nhà phát triển đều không mong muốn. &lt;/p&gt;

&lt;p&gt;Vậy làm sao để giải quyết vấn đề trên? &lt;/p&gt;

&lt;h4&gt;Sử dụng dynamic binding (gắn kết động)&lt;/h4&gt;

&lt;h5&gt;Thực thể (Business Entity)&lt;/h5&gt;

&lt;p&gt;Triển khai DynamicObject. Lớp này có thể sử dụng cho tất cả các nguồn giữ liệu là XML mà không phân biệt cấu trúc của nó. Nhiệm vụ của nó là lấy ra một cách chính xác giá trị trong các thẻ XML&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; DynamicXML : DynamicObject&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        XElement _element;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; ReadXML(XElement e) { _element = e; }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; TryGetMember(GetMemberBinder binder,&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; result)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            &lt;span style="color:#008000;"&gt;//Triển khai phương thức lấy giá trị của đối tượng           &lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;h5&gt;Thao tác giữ liệu (Data access)&lt;/h5&gt;

&lt;p&gt;Lấy giữ liệu từ nguồn và trả về đối tượng dynamic&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;dynamic GetPersonData()&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            var root = XElement.Load(&lt;span style="color:#006080;"&gt;&amp;quot;People.xml&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            dynamic xml = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; DynamicXML(root);           &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; xml.Person;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;h5&gt;Hiển thị (Presentation)&lt;/h5&gt;

&lt;p&gt;Gắn kết giữ liệu và hiển thị lên controls&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;lt;DataGrid Name=&lt;span style="color:#006080;"&gt;&amp;quot;myDataGrid&amp;quot;&lt;/span&gt; VerticalAlignment=&lt;span style="color:#006080;"&gt;&amp;quot;Top&amp;quot;&lt;/span&gt; ItemsSource=&lt;span style="color:#006080;"&gt;&amp;quot;{Binding}&amp;quot;&lt;/span&gt; AutoGenerateColumns=&lt;span style="color:#006080;"&gt;&amp;quot;False&amp;quot;&lt;/span&gt; &amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        &amp;lt;DataGrid.Columns&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            &amp;lt;DataGridTextColumn x:Name=&lt;span style="color:#006080;"&gt;&amp;quot;firstNameColumn&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;              Binding=&lt;span style="color:#006080;"&gt;&amp;quot;{Binding Path=FirstName}&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;              Header=&lt;span style="color:#006080;"&gt;&amp;quot;First Name&amp;quot;&lt;/span&gt; Width=&lt;span style="color:#006080;"&gt;&amp;quot;SizeToHeader&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            &amp;lt;DataGridTextColumn x:Name=&lt;span style="color:#006080;"&gt;&amp;quot;lastNameColumn&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;              Binding=&lt;span style="color:#006080;"&gt;&amp;quot;{Binding Path=LastName}&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;              Header=&lt;span style="color:#006080;"&gt;&amp;quot;Last Name&amp;quot;&lt;/span&gt; Width=&lt;span style="color:#006080;"&gt;&amp;quot;SizeToHeader&amp;quot;&lt;/span&gt; /&amp;gt;            &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        &amp;lt;/DataGrid.Columns&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;lt;/DataGrid&amp;gt;   &lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Trong trường hợp khách hàng yêu cầu quản lý thêm thông tin về tuổi (Age) và giới tính (isMale). Điều duy nhất mà chúng ta phải làm đó là yêu cầu người thiết kế ứng dụng thêm đoạn mã sau vào phần hiển thị, trong khi không phải thay đổi hay biên dịch lại các tầng khác của ứng dụng. Qua đó đảm bảo tính vững chắc của kiến trúc chương trình cũng như giảm thiểu chi phí cho nâng cấp ứng dụng rất nhiều mỗi khi có yêu cầu thay đổi từ phía khách hàng.&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;lt;DataGridTextColumn x:Name=&lt;span style="color:#006080;"&gt;&amp;quot;ageColumn&amp;quot;&lt;/span&gt; Binding=&lt;span style="color:#006080;"&gt;&amp;quot;{Binding Path=Age}&amp;quot;&lt;/span&gt; Header=&lt;span style="color:#006080;"&gt;&amp;quot;Age&amp;quot;&lt;/span&gt; Width=&lt;span style="color:#006080;"&gt;&amp;quot;SizeToHeader&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;lt;DataGridTextColumn x:Name=&lt;span style="color:#006080;"&gt;&amp;quot;isMaleColumn&amp;quot;&lt;/span&gt; Binding=&lt;span style="color:#006080;"&gt;&amp;quot;{Binding Path=IsMale}&amp;quot;&lt;/span&gt; Header=&lt;span style="color:#006080;"&gt;&amp;quot;Is Male&amp;quot;&lt;/span&gt; Width=&lt;span style="color:#006080;"&gt;&amp;quot;SizeToHeader&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Rõ ràng, với cách tiếp cận sử dụng dynamic, chúng ta thấy rằng số lượng mã cần thiết để viết và thay đổi cho một chức năng của chương trình ít hơn rất nhiều cách trước đó. &lt;/p&gt;

&lt;h3&gt;Kết luận&lt;/h3&gt;

&lt;p&gt;Trong tháng 4/2001 Microsoft sẽ chính thức ra mắt bộ công cụ Visual Studio 2010 và nền tảng phát triển .NET 4.0. Sự kiện này đã và đang mở ra hướng mới trong ngành công nghiệp phần mềm, với sự linh hoạt và khả năng xây dựng ứng dụng một cách nhanh chóng mà vẫn đáp ứng được những yêu cầu ngày các khắt khe của người dùng. &lt;/p&gt;

&lt;p&gt;&lt;a href="mailto:basquang@hotmail.com"&gt;&lt;strong&gt;basquang@hotmail.com&lt;/strong&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://cid-a21319952f68e79e.skydrive.live.com/self.aspx/.Public/WPF4.rar"&gt;source code&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=6242" width="1" height="1"&gt;</description></item><item><title>MoneyManagement: Phần mềm quản lý thu chi cá nhân trên PocketPC và PC</title><link>http://msdnvietnam.net/blogs/quang/archive/2010/04/03/moneymanagement-ph-n-m-m-qu-n-l-253-thu-chi-c-225-nh-226-n-tr-234-n-pocketpc-v-224-pc.aspx</link><pubDate>Fri, 02 Apr 2010 22:44:49 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:5917</guid><dc:creator>Nguyen Ba Quang</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/quang/rsscomments.aspx?PostID=5917</wfw:commentRss><comments>http://msdnvietnam.net/blogs/quang/archive/2010/04/03/moneymanagement-ph-n-m-m-qu-n-l-253-thu-chi-c-225-nh-226-n-tr-234-n-pocketpc-v-224-pc.aspx#comments</comments><description>&lt;p&gt;Phần mềm này tôi viết ra để giúp vợ tôi dễ dàng hơn trong việc quản lý chi tiêu trong gia đình. Bằng cách sử dụng điện thoại di động là một chiếc smartphone O2 mini S, người dùng có thể dễ dàng quản lý thông tin thu/chi theo thời gian, qua đó xác định được kế hoạch cho việc chi tiêu sắp tới.&lt;/p&gt;  &lt;p&gt;Các chức năng chính bao gồm:&lt;/p&gt;  &lt;p&gt;1. Nhập thông tin Thu/Chi&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_1E198E7F.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_440F3ED5.png" width="185" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;2. Xem báo cáo: Cho phép người dùng lọc thông tin báo cáo theo ngày tháng và loại thay đổi Thu/Chi&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_0E2A49BB.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_4668C0D3.png" width="184" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;3. Thao tác trên máy tính: Chức năng này cho phép đồng bộ dữ liệu giữa điện thoại và máy tính. Cho phép người dùng có thể thao tác dữ liệu trên máy tính bằng công cụ Microsoft Office InfoPath&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_51B1D510.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_19CF6B20.png" width="244" height="189" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Phần mềm tương thích với Windows Mobile 5, 6, 7. Các bạn download tại địa chỉ sau: &lt;a title="http://cid-a21319952f68e79e.skydrive.live.com/self.aspx/.Public/MoneyManagement/MoneyManagement.rar" href="http://cid-a21319952f68e79e.skydrive.live.com/self.aspx/.Public/MoneyManagement/MoneyManagement.rar"&gt;http://cid-a21319952f68e79e.skydrive.live.com/self.aspx/.Public/MoneyManagement/MoneyManagement.rar&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Đây là một phần mềm hết sức đơn giản. Các bạn có thể tự tạo những phần mềm hữu ích cho mình trên nền Windows Mobile cũng như Windows sử dụng công cụ Visual Studio. Với ứng dụng cho Windows Phone 7, các bạn có thể xem các bài hướng dẫn rất hay tại địa chỉ&lt;/p&gt;  &lt;p&gt;&lt;a title="http://channel9.msdn.com/learn/courses/WP7TrainingKit/" href="http://channel9.msdn.com/learn/courses/WP7TrainingKit/"&gt;http://channel9.msdn.com/learn/courses/WP7TrainingKit/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;img alt="" src="http://ecn.channel9.msdn.com/o9/learn/WP7TrainingKit/Labs/HelloPhone/HelloPhone.html/html/images/c6f209eb-8387-431d-a654-918fc36b6cd8.png" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=5917" width="1" height="1"&gt;</description></item><item><title>Cascading Drop-Down List in SharePoint 2010 using InfoPath 2010</title><link>http://msdnvietnam.net/blogs/quang/archive/2010/03/30/cascading-drop-down-list-in-sharepoint-2010-using-infopath-2010.aspx</link><pubDate>Tue, 30 Mar 2010 05:27:39 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:5873</guid><dc:creator>Nguyen Ba Quang</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/quang/rsscomments.aspx?PostID=5873</wfw:commentRss><comments>http://msdnvietnam.net/blogs/quang/archive/2010/03/30/cascading-drop-down-list-in-sharepoint-2010-using-infopath-2010.aspx#comments</comments><description>&lt;p&gt;Cascading drop-down is a common business requirement. SharePoint 2007 does not support cascading drop-down list by default. User have to write custom SharePoint field and it’s not easy to implement. With SharePoint 2010, User able to customize SharePoint form in easy way by using the powerful of InfoPath Designer. Following is the step guides to create a cascading drop-down list solution in SharePoint 2010 without require a lot of IT knowledge. &lt;/p&gt;  &lt;p&gt;Scenario: We build a cascading for Address List. We have three list: City, District and Ward&lt;/p&gt;  &lt;p&gt;1. Create City List&lt;/p&gt;  &lt;p&gt;- In SharePoint 2010, create a custom List and named as “City”&lt;/p&gt;  &lt;p&gt;- Add Two Item to this list: Hanoi and TP HCM&lt;/p&gt;  &lt;p&gt;2. Create District List&lt;/p&gt;  &lt;p&gt;- In SharePoint 2010, create a custom List and named as “District”&lt;/p&gt;  &lt;p&gt;- Create a Lookup column named as “City”. This column get information from City List in the column Title.&lt;/p&gt;  &lt;p&gt;- Add 4 items to District list&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_0F2C06D3.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_139261CD.png" width="244" height="151" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;3. Create Ward List&lt;/p&gt;  &lt;p&gt;- In SharePoint 2010, create a custom List and named as “Ward”.&lt;/p&gt;  &lt;p&gt;- Create a Lookup column named as “City”. This column get information from City List in the column Title.&lt;/p&gt;  &lt;p&gt;- Create a Lookup column named as “District”. This column get information from District List in the column Title.&lt;/p&gt;  &lt;p&gt;- Create on Add new Item link you will see. When we choose City, District still have 4 item. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_5F118F84.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_63A79A3E.png" width="244" height="143" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;4. Customize Ward form to meet cascading requirement&lt;/p&gt;  &lt;p&gt;- In Ward List, click on Customize Form ribbon button&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_3A505240.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_3EE65CFA.png" width="244" height="171" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;- System will automatically open the form template of Ward list in InfoPath Designer&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_4DCD8C14.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_25AAB728.png" width="244" height="164" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;- Right click on District drop-down list control then select Drop-Down List box Properties from menu to open the properties windows&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_62EB6BEF.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_6AD2E884.png" width="202" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;- In Data Source. Click on Add button&lt;/p&gt;  &lt;p&gt;- In Data Connection Wizard, click on Next button&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_60BE4759.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_4F3DC0B4.png" width="244" height="173" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;- In Select the source of your data, choose SharePoint library of list then click Next button&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_1088C34E.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_2A4CD3B0.png" width="244" height="173" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;- In SharePoint Site details screen, click on Next button&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_0E5B9EB8.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_6855C894.png" width="244" height="173" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;- In Select a list of library, choose District the click on Next button&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_05E7A394.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_4C546DCF.png" width="244" height="173" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;- In select fields: Choose Title, City, ID then click on Next button&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_786144F3.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_32406213.png" width="244" height="173" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;- In next screen, choose Next button&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_13C5FB5D.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_17DFAD55.png" width="244" height="173" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;- Leave the default name for the connection as “District1” then click Finish button&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_4D94F2AF.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_66ECD01C.png" width="244" height="173" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;- Now, You will see the Data Source of Drop-Down list box is District1&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_7CF33BAE.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_2AD0689A.png" width="202" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;- In Entries section, click on the tree button to select XPath&lt;/p&gt;  &lt;p&gt;- In Select a Field or Group dialog, click on Filter Data… button&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_60F1E0E9.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_768C1986.png" width="213" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;- In Filter Data click on Add… button&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_7AB5F14B.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_05FF0589.png" width="244" height="136" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;- In specify Filter Conditions, in the first drop-down list choose Select a field or group&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_47B63B17.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_79CD6594.png" width="244" height="62" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;- Select a Field or Group opened. Select District1 as Data Source, choose City in dataFields then click OK&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_7ECFA343.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_4DECEBD8.png" width="213" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;- In specify Filter Conditions, in the last drop-down list choose Select a field or group&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_242970E5.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_1D29BE60.png" width="244" height="61" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;- Select a Field or Group opened. Select Main as Data Source then choose City in dataFields then click OK&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_45E523A9.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_5B132951.png" width="213" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;- Click on OK to close specify Filter Conditions dialog&lt;/p&gt;  &lt;p&gt;- Click on OK to close Filter Data dialog&lt;/p&gt;  &lt;p&gt;- Click on OK to close Select a Field or Group &lt;/p&gt;  &lt;p&gt;- In Drop Down List box properties, choose d:ID in Value: section then click OK to close this&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_566CF8CA.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_580D9ED1.png" width="202" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;- In InfoPath Designer, close the Windows then choose the Save and Publish button&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_29677022.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_46F94B21.png" width="244" height="65" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;- After Publishing complete, back to Ward list then click on Add new item link. You will see the result&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_5725131A.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_12B4FC0E.png" width="244" height="168" /&gt;&lt;/a&gt; &lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_18236CB2.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_0C5DFFB3.png" width="244" height="164" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Two drop-down list has been cascading.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Conclusion&lt;/p&gt;  &lt;p&gt;SharePoint 2010 provides a easy way for none IT to customize the look and feel of SharePoint by using InfoPath Designer, SharePoint Designer. Customize form by using InfoPath Designer 2010 is a great new feature of SharePoint 2010. It’s very cool!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=5873" width="1" height="1"&gt;</description><category domain="http://msdnvietnam.net/blogs/quang/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Không còn nỗi lo tiếng Việt đối với người dùng SharePoint</title><link>http://msdnvietnam.net/blogs/quang/archive/2009/12/11/kh-244-ng-c-242-n-n-i-lo-ti-ng-vi-t-i-v-i-ng-i-d-249-ng-sharepoint.aspx</link><pubDate>Thu, 10 Dec 2009 23:13:38 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:4331</guid><dc:creator>Nguyen Ba Quang</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/quang/rsscomments.aspx?PostID=4331</wfw:commentRss><comments>http://msdnvietnam.net/blogs/quang/archive/2009/12/11/kh-244-ng-c-242-n-n-i-lo-ti-ng-vi-t-i-v-i-ng-i-d-249-ng-sharepoint.aspx#comments</comments><description>&lt;p&gt;Phiên bản SharePoint 2007 đã có bản Language Pack hỗ trợ tiếng Việt từ ngày 20/07/2009. Người dùng Việt Nam chưa cài đặt bản ngôn ngữ tiếng Việt cho SharePoint có thể tải về tại địa chỉ&lt;/p&gt;  &lt;p&gt;&lt;b&gt;SharePoint Server 2007 Language Pack&amp;#160; (X86) &lt;/b&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=vi&amp;amp;FamilyID=430dabac-146e-4c8b-9338-37569ad373d2"&gt;&lt;u&gt;http://www.microsoft.com/downloads/details.aspx?displaylang=vi&amp;amp;FamilyID=430dabac-146e-4c8b-9338-37569ad373d2&lt;/u&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;SharePoint Server 2007 Language Pack&amp;#160; (X64) &lt;/b&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=vi&amp;amp;FamilyID=0c498ce5-47c2-47ad-9ae7-5a2cd2a81fc7"&gt;&lt;u&gt;http://www.microsoft.com/downloads/details.aspx?displaylang=vi&amp;amp;FamilyID=0c498ce5-47c2-47ad-9ae7-5a2cd2a81fc7&lt;/u&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Windows SharePoint Services 3.0 Language Pack&amp;#160; &lt;/b&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=vi&amp;amp;FamilyID=36ee1bf0-652c-4e38-b247-f29b3eefa048"&gt;&lt;u&gt;http://www.microsoft.com/downloads/details.aspx?displaylang=vi&amp;amp;FamilyID=36ee1bf0-652c-4e38-b247-f29b3eefa048&lt;/u&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Windows SharePoint Services 3.0 Language Pack (X64) &lt;/b&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=vi&amp;amp;FamilyID=45fa2637-efc0-4ed6-8f47-8a013e9ce9d9"&gt;&lt;u&gt;http://www.microsoft.com/downloads/details.aspx?displaylang=vi&amp;amp;FamilyID=45fa2637-efc0-4ed6-8f47-8a013e9ce9d9&lt;/u&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Gói ngôn ngữ tiếng Việt thật sự hữu ích đối với sự phát triển của SharePoint tại Việt Nam, càng mang lại ấn tượng tốt đối với người dùng về sản phẩm này.&lt;/p&gt;  &lt;p&gt;Hy vọng phiên bản SharePoint 2010 tới có bản language pack cho tiếng Việt đi kèm luôn trong ngày ra mắt để người dùng SharePoint ở Việt Nam khỏi phải mong mỏi lâu.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=4331" width="1" height="1"&gt;</description><category domain="http://msdnvietnam.net/blogs/quang/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Cài đặt SharePoint 2010 trên Windows 7</title><link>http://msdnvietnam.net/blogs/quang/archive/2009/11/30/c-224-i-t-sharepoint-2010-tr-234-n-windows-7.aspx</link><pubDate>Mon, 30 Nov 2009 01:15:00 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:3963</guid><dc:creator>Nguyen Ba Quang</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/quang/rsscomments.aspx?PostID=3963</wfw:commentRss><comments>http://msdnvietnam.net/blogs/quang/archive/2009/11/30/c-224-i-t-sharepoint-2010-tr-234-n-windows-7.aspx#comments</comments><description>&lt;p&gt;Phi&amp;ecirc;n bản SharePoint 2010 Beta đ&amp;atilde; được c&amp;ocirc;ng bố v&amp;agrave; c&amp;oacute; thể t&amp;agrave;i về từ Microsoft Website. Kh&amp;ocirc;ng giống như c&amp;aacute;c phi&amp;ecirc;n bản trước đ&amp;oacute;, y&amp;ecirc;u cầu m&amp;ocirc;i trường Windows Server. Phi&amp;ecirc;n bản 2010 n&amp;agrave;y c&amp;aacute;c bạn c&amp;oacute; thể c&amp;agrave;i đặt tr&amp;ecirc;n nền Windows 7 hiện c&amp;oacute; m&amp;agrave; kh&amp;ocirc;ng cần phải c&amp;agrave;i th&amp;ecirc;m bất cứ c&amp;ocirc;ng cụ hỗ trợ n&amp;agrave;o (baamboo solution tr&amp;ecirc;n V3). Điều đ&amp;oacute; đ&amp;atilde; tạo điều kiện thuận tiện hơn cho c&amp;aacute;c lập tr&amp;igrave;nh vi&amp;ecirc;n ph&amp;aacute;t triển v&amp;agrave; t&amp;ugrave;y biến SharePoint m&amp;agrave; kh&amp;ocirc;ng cần c&amp;agrave;i đặt Windows Server hoặc sử dụng m&amp;aacute;y ảo.&lt;/p&gt;
&lt;p&gt;Hướng dẫn chi tiết qu&amp;aacute; tr&amp;igrave;nh c&amp;agrave;i đặt c&amp;aacute;c bạn tham khảo tại địa chỉ&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee554869(office.14).aspx"&gt;http://msdn.microsoft.com/en-us/library/ee554869(office.14).aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Quang&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=3963" width="1" height="1"&gt;</description><category domain="http://msdnvietnam.net/blogs/quang/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>SharePoint 2010, Office 2010 đã sẵn sàng</title><link>http://msdnvietnam.net/blogs/quang/archive/2009/11/17/sharepoint-2010-office-2010-227-s-n-s-224-ng.aspx</link><pubDate>Tue, 17 Nov 2009 01:19:34 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:2861</guid><dc:creator>Nguyen Ba Quang</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/quang/rsscomments.aspx?PostID=2861</wfw:commentRss><comments>http://msdnvietnam.net/blogs/quang/archive/2009/11/17/sharepoint-2010-office-2010-227-s-n-s-224-ng.aspx#comments</comments><description>&lt;p&gt;Microsoft đã chính thức công bố phiên bản beta cho SharePoint 2010 và Office 2010. Có rất nhiều cải tiến đối với phiên bản này, đặc biệt với SharePoint. Đó là Office Web Access, giao diện Ribbon, tích hợp chuyên sâu, hỗ trợ Lotus Notes,…dễ dàng tùy biến và phát triển với VS 2010, SharePoint Designer 2010&lt;/p&gt;  &lt;p&gt;Chúng ta hãy download và dùng thử phiên bản này nhé!&lt;/p&gt;  &lt;p&gt;Resource: &lt;a title="http://msdn.microsoft.com/en-us/sharepoint/ee514561.aspx" href="http://msdn.microsoft.com/en-us/sharepoint/ee514561.aspx"&gt;http://msdn.microsoft.com/en-us/sharepoint/ee514561.aspx&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=2861" width="1" height="1"&gt;</description></item><item><title>Visual Studio 2010 Tools for SharePoint Development</title><link>http://msdnvietnam.net/blogs/quang/archive/2009/10/10/visual-studio-2010-tools-for-sharepoint-development.aspx</link><pubDate>Sat, 10 Oct 2009 01:08:00 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:2229</guid><dc:creator>Nguyen Ba Quang</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/quang/rsscomments.aspx?PostID=2229</wfw:commentRss><comments>http://msdnvietnam.net/blogs/quang/archive/2009/10/10/visual-studio-2010-tools-for-sharepoint-development.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;span style="font-size:small;"&gt;This article provides a first look at tools in Visual Studio 2010 designed to support development and deployment of SharePoint 2010 solutions. The article provides an example of designing and deploying a visual Web part.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;font-size:12pt;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;Steve Fox&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/magazine/ee309510.aspx"&gt;http://msdn.microsoft.com/en-us/magazine/ee309510.aspx&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=2229" width="1" height="1"&gt;</description><category domain="http://msdnvietnam.net/blogs/quang/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Vocabulary Reminder: Phần mềm học từ vựng miễn phí, nhỏ gọn của người Việt</title><link>http://msdnvietnam.net/blogs/quang/archive/2009/09/27/vocabulary-reminder-ph-n-m-m-h-c-t-v-ng-mi-n-ph-237-nh-g-n-c-a-ng-i-vi-t.aspx</link><pubDate>Sun, 27 Sep 2009 03:14:39 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:2135</guid><dc:creator>Nguyen Ba Quang</dc:creator><slash:comments>29</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/quang/rsscomments.aspx?PostID=2135</wfw:commentRss><comments>http://msdnvietnam.net/blogs/quang/archive/2009/09/27/vocabulary-reminder-ph-n-m-m-h-c-t-v-ng-mi-n-ph-237-nh-g-n-c-a-ng-i-vi-t.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_3A277DED.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_4DB41BE7.png" width="179" height="244" /&gt;&lt;/a&gt;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;Vocabulary Reminder là một phần mềm trợ giúp cho việc học ngoại ngữ của mỗi người.&lt;/p&gt;  &lt;p&gt;- Xuất phát từ yêu cầu thực tế là nhu cầu học ngoại ngữ, trong đó có từ vựng. Chúng ta thường học từ vựng bằng cách viết ra những mẩu giấy nhỏ hoặc viết lên bảng. Hoặc với những người hay sử dụng máy tính thì sử dụng sticknote trên Desktop. Tuy nhiên điều đó đem lại khá nhiều bất tiện.&lt;/p&gt;  &lt;p&gt;- Từ yêu trên, tôi đã có ý tưởng thiết kế một phần mềm phục vụ cho việc học từ vựng này. Xét thấy các thông báo trên thanh trạng thái của Windows rất hữu hiệu cho việc ghi nhớ. Chẳng hạn như khi Laptop của chúng ta hết pin, hệ thống sẽ có một thông báo nhỏ trên khay hệ thống để nhắc nhở. Tôi đã tận dụng ý tưởng này để thiết kế ra phần mềm học ngoại ngữ nhọn gọn mà tiện dụng.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_2E319F87.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_3F1581D0.png" width="244" height="63" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;- Các chức năng chính của phần mềm bao gồm:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;+ Cho phép người sử dụng quản lý từ cần học (Thêm, sửa xóa.&lt;/p&gt;    &lt;p&gt;+ Cho phép người dùng phóng to thu nhỏ ứng dụng tùy thuộc vào kích cỡ và độ phân giả màn hình&lt;/p&gt;    &lt;p&gt;+ Hệ thống xuất hiện các từ vựng trên khay hệ thống một cách tuần tự.&lt;/p&gt;    &lt;p&gt;+ Hệ thống lưu giữ những từ đang học cho những lần sử dụng tiếp theo &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;- Ngoài chức năng học từ vựng, mọi người có thể sử dụng phần mềm này để ghi nhớ những việc cần làm, hoặc mọi thứ có nhu cầu ghi nhớ, nhắc nhở.&lt;/p&gt;  &lt;p&gt;- Phần mềm được phát triển trên nền tảng .NET Framework do đó, để sử dụng được phần mềm, các bạn cần cài đặt .NET Framework 3.5 SP1. Đây là một ứng dụng thực tế nho nhỏ mà tôi đã tận dụng các công nghệ hiện có của Microsoft .NET. Các kỹ thuật được sử dụng chủ yếu trong phần mềm này là WPF XAML, WPF Data Binding, LINQ to XML và ClickOnce. Các bạn có thể tự phát triển phần mềm tương tự theo mục đích sử dụng của bạn mà không mất quá nhiều thời gian. Thời gian để tôi hoàn thiện ứng dụng này là trọn một ngày cuối tuần. Tuy vậy tôi rất happy vì nó mang lại hiệu quả đáng kể. &lt;/p&gt;  &lt;p&gt;Cài đặt và sử dụng:&lt;/p&gt;  &lt;p&gt;Các bạn có thể download phần mềm để cài đặt tại địa chỉ &lt;a title="http://cid-a21319952f68e79e.skydrive.live.com/self.aspx/.Public/WPF/EnglishVocabularyReminder%5E_v1.0.rar" href="http://cid-a21319952f68e79e.skydrive.live.com/self.aspx/.Public/WPF/EnglishVocabularyReminder%5E_v1.0.rar"&gt;http://cid-a21319952f68e79e.skydrive.live.com/self.aspx/.Public/WPF/EnglishVocabularyReminder%5E_v1.0.rar&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Chương trình tương thích với Windows 7, Windows Vista, Windows XP.&lt;/p&gt;  &lt;p&gt;Sau khi download các bạn giải nén, và sử dụng file Setup.exe để cài đặt&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_47C53E82.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_37E20B8C.png" width="244" height="140" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Sau khi quá trình cài đặt hoàn tất các bạn có thể sử dụng phần mềm trong Start Menu&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_42429412.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_72D55023.png" width="244" height="133" /&gt;&lt;/a&gt; &lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_37619ECB.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_7C0D7765.png" width="243" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Sau đó các bạn click vào biểu tượng của ứng dụng trên khay hệ thống để cập nhật từ vựng. Sau khi cập nhật xong đóng cửa xổ lại để Reminder bắt đầu hoạt động&lt;/p&gt;  &lt;p&gt;Để thoát chương trình chúng ta phải chuột vào biểu tượng của chương trình trên khay hệ thống và chọn Exit&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_781F612E.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_307A0FE2.png" width="244" height="142" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Chúc các bạn vui với chương trình và không quên phản hồi nếu có bất cứ ý kiến gì về chương trình.&lt;/p&gt;  &lt;p&gt;Mọi ý kiến xin liên hệ&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_6E72DEF9.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/quang/image_5F00_thumb_5F00_0D658A73.png" width="244" height="185" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=2135" width="1" height="1"&gt;</description></item><item><title>New SharePoint 2007 Video</title><link>http://msdnvietnam.net/blogs/quang/archive/2009/08/15/new-sharepoint-2007-video.aspx</link><pubDate>Sat, 15 Aug 2009 01:20:24 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:1848</guid><dc:creator>Nguyen Ba Quang</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/quang/rsscomments.aspx?PostID=1848</wfw:commentRss><comments>http://msdnvietnam.net/blogs/quang/archive/2009/08/15/new-sharepoint-2007-video.aspx#comments</comments><description>&lt;p&gt;If you&amp;#39;re new to SharePoint, or working with people who are new to SharePoint and have a hard time explaining what it is, you might find the &lt;em&gt;SharePoint in Plain English&lt;/em&gt; video to be helpful.&lt;/p&gt;  &lt;p&gt;This video takes a friendly approach to show how SharePoint can help you work together with others in more efficient ways. For example, SharePoint can help you plan and work on a project online instead of sending files back and forth in e-mail.&lt;/p&gt;  &lt;p&gt;Link to the video: &lt;a href="http://www.microsoft.com/video/en/us/details/76e8d3af-c2bd-42a6-bb12-befcbd041bf1"&gt;http://www.microsoft.com/video/en/us/details/76e8d3af-c2bd-42a6-bb12-befcbd041bf1&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;source: &lt;a title="MSSharePoint" href="http://www.facebook.com/MSSharePoint"&gt;MSSharePoint&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=1848" width="1" height="1"&gt;</description></item><item><title>SharePoint 14: Một số hình ảnh mới nhất về SharePoint 2010</title><link>http://msdnvietnam.net/blogs/quang/archive/2009/07/25/sharepoint-14-m-t-s-h-236-nh-nh-m-i-nh-t-v-sharepoint-2010.aspx</link><pubDate>Sat, 25 Jul 2009 12:36:48 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:1607</guid><dc:creator>Nguyen Ba Quang</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/quang/rsscomments.aspx?PostID=1607</wfw:commentRss><comments>http://msdnvietnam.net/blogs/quang/archive/2009/07/25/sharepoint-14-m-t-s-h-236-nh-nh-m-i-nh-t-v-sharepoint-2010.aspx#comments</comments><description>&lt;p&gt;Trước hết đó là giao diện cài đặt mới. Với sự hỗ trợ của Microsoft SharePoint Products and Technologies 14 Preparation Tool, hầu như chúng ta không phải mất công để chuẩn bị môi trường cài SharePoint 14. Chỉ cần OS (có thể SQL Server nếu cài Farm). Tool sẽ tự động cài đặt và cấu hình các yêu cầu cần thiết.&lt;/p&gt; &lt;p&gt;&lt;a href="https://58pa2a.bay.livefilestore.com/y1mJ3erRoxtaL-u2TG4W_BK4k5hWx7c0vH4J2zFUCRD-9XjswjSo8OtdefDUzjCKVlp0a-bppTKNfol4cgVWEEVSsuV-TwuNVtnErJdL6JtXyE9JttS5J4PJiypH_EYbhF1tB7jNqaIhcLhdLSEeNvp1Q/image2.png" rel="WLPP"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="https://58pa2a.bay.livefilestore.com/y1mbE6lWHDyNha8aMMDMmjybGl5E5o3XYmzSkfO5YUQJNG8LjDS-cubtgeauyYqo_wsM3Yh1QrbUaKXsjnSEQPiQDZcgUALeb-gipXGlqKlUiX36jUnKRh7aLZq_-WaWyBZkJ9ahHm2xPGraOjLYu09kQ/image_thumb%201743F78F.png" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="https://58pa2a.bay.livefilestore.com/y1m0EfsC0qDkYzJYxZSBoIGZPj7HNSVEYXIriAhLFaxVR3D-S5tEyxnt0Voiz9eaPHsOrPOI69ijhLlf15cEitS1_rgctU4QEMpc-hSGiy5g9dlx-dAC4t4pbbZ1rfOmSoUGnr935anWqYbpxblTjyJeQ/image5.png" rel="WLPP"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="https://58pa2a.bay.livefilestore.com/y1mLFvNwpe_UtS8j2PjZbApt4hpsWuoC0bQQRGjYGT3B-yn7MDoUWs9gnsKpDt1DiX-lS2aep6dsv2OMMDB37OXvmE5DPLs3foyl1iPLi-AB5sTdh_q6JeZk_nimdU83zshAcwD1cbA6YwQdKtLr1tW_Q/image_thumb1[1].png" width="244" height="171" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;Sau khi quá trình cài đặt hoàn tất. Đó là sự xuất hiện của Central Admin hoàn toàn mới để cấu hình.&lt;/p&gt; &lt;p&gt;Một giao diện mới, hỗ trợ thêm các Tabs: Browse, Edit….Kiểu giao diện tương đối đồng nhất với Office 2007&lt;/p&gt; &lt;p&gt;&lt;a href="https://58pa2a.bay.livefilestore.com/y1mNC63mCmk07ChxWFP0_RdEDj_FhAEDlV-EypPzFkegwpkzCyfDXgd2H_NR1IJxqmGqOuslH3bu03Oxt04YXuLAHu35AyGrLpP3ckn4z1N3Z8Y6OrigW90G9sUyYAoEGK7mu4QeO9dK5XZU-lKx2IIyg/image3.png" rel="WLPP"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="https://58pa2a.bay.livefilestore.com/y1mqJ7yVzmhA-JRH4qMDjPwL71k7wim-2Z02dhPj0VcOY92xkhkhuGPZbZqo-eUSDNzdaiq7RzEhN7wVpI6xgbNSSetPDfaIxIhHXntlGp7kjSKEPVibyEXmupH33lXf5oA5SCiUECEOjEZ1IqBUl-gLg/image_thumb1.png" width="244" height="154" /&gt;&lt;/a&gt; &lt;a href="https://58pa2a.bay.livefilestore.com/y1mbjoq28kRUOdnVX5jiVXCi35yDyU0VyWbhbuDYHJrSdMMQnJACwCju8wmNPUx_RwjBEKYPmU9Rms3iVp76KldrjgzwXphTVgbULWs0gLUbUDKMLbcPbKH3lo9jXHMYvF36Qsl8Qfxn_OmTTUp95WUdw/image9.png" rel="WLPP"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="https://58pa2a.bay.livefilestore.com/y1mxaA_VTp-P2XSGrwdRGOQPacf3ax7JcRvp46Fo7ubWutCKZkGZCJxfVvosSPsd2Eo2QHkzzVgGFsHtmsXWRw-qLjQB7LLwXF0tmgI7P4v29pVZwt-EEFr6nrVGxBl_WCEtnqAhXRC1E8IzyHEaqjdPQ/image_thumb3.png" width="244" height="154" /&gt;&lt;/a&gt; &lt;a href="https://58pa2a.bay.livefilestore.com/y1moRWj_8v086eVPLv81bh9sgxW6oo1V-mEpScbPs-4CcbfcAiOrJ2sL8I-5nhPdelgO8RPwGAJpPI8aMGgy15UoJ5yyZKuFLovYpeoL6lAV0E_MKfto_yl6_Ccuo-CJoJ149g6xHDsrp0sDci6gryTag/image6.png" rel="WLPP"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="https://58pa2a.bay.livefilestore.com/y1mJ7J6qgmfkkuU9xse39sdDNIvS4hcNR7o_ctMACzTu87uCSPzDpe7HBGYcmYk_AYOUZnbZ_yAueBYWe7ls6lUVsC4t2MeHJAm-JXcPHa7wsL0yXhrg_QNBkW8XoxPdErpAXB2RmPrtDgrzEqQ9_gQWA/image_thumb2.png" width="244" height="154" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Rất nhiều services đi kèm: Visio, Lotus Note, Business Data Catalog….&lt;/p&gt; &lt;p&gt;&lt;a href="https://58pa2a.bay.livefilestore.com/y1mchWYkGDuToGztUMcq4ASvX6NXcjs_19ekWweaim54e1j0NmokM4-9HkJ3uFUDoiO_lPzP09CPM5kMiSgRi1eCWJBzRXf5IFKCGiP0BsWO0Wkflh6lnrgIP5THkh26DNtaQppu4Arm6YriFH9Hk2YLA/image18.png" rel="WLPP"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="https://58pa2a.bay.livefilestore.com/y1mLxJ5v6ypRbI2GXiTWBMuEiTJrev2g39ozbLgviM22SQJfcJClvG8chHWAwrXr3FGhuu4r2J3uiS3SWlk0uwCvMX14GRvjNwWfZKENd2Kcl9JsPwkXixUppUAJ0msKidXgYr-oH3DdYKvgIwkZZQEew/image_thumb6.png" width="244" height="154" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Application Management&lt;/p&gt; &lt;p&gt;&lt;a href="https://58pa2a.bay.livefilestore.com/y1mFLL8oNq1RXDNZAe_vFsNs8NaJRKvv_-VcDxPLCGMy_qkN0BhawoeP5lYcULjPvvuj6OLiPCjWcfqunlHRA-X7EjOaLNFgQi4vTpsz-BXryCoy9mHE5utQw2_tuj2gPdh7zngx8qUVGYopTyy_mrRig/image12.png" rel="WLPP"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="https://58pa2a.bay.livefilestore.com/y1md94joM66r43dQ6HMW_soECb6MakemBzoDzDbB68XyYFoZX5Oli9LaJVRU0okltxx9cHh2MTGToxKX6tREYPPNDfKhiLiwcgxHno7k76N-rNjINoOtz8KEjvx0NyhDMZyZR6YjHzdhsp2eRzYAjopeg/image_thumb4.png" width="244" height="154" /&gt;&lt;/a&gt; &lt;a href="https://58pa2a.bay.livefilestore.com/y1m_pA_2wRTRjC0vspLd2BeW5uUOhtPswSy0esyy0TFwWnk6_ybA-kBdkzRrdQ08ixb5t6T0qdDvcLmYbUlM18WgDi1TTCI_M0pUURAVLrDy57lE2gZjY7CiglCo10RaKole1dn_EDe4xs3HcXKgGdtrA/image21.png" rel="WLPP"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="https://58pa2a.bay.livefilestore.com/y1m2oCHA5n3dwNVuatAnVBAzof27nJ3xR7TOPWOnsYOaUkQK736faTPq1sH46wXqpZgSKo8lo6ojeecAJH8B91D0QwISGbra9JuMnibt-AewhSMuMbjh5m8RoZzm1HvTKQd3enSB9NqKPCDrTMZjcf40g/image_thumb7.png" width="244" height="154" /&gt;&lt;/a&gt; &lt;a href="https://58pa2a.bay.livefilestore.com/y1m6MdgYKri7vwpcHKgRtAUG7nZAfs1JCE5-FgD7hwGo3ADTgxyZhztV3KlxEdYNIhPpmMTegxZLPxR_94IKfkLwx0aiqNU9MWrF1wInLcSCEh9LSAXE8z1xVdN3__qTMt6i-2cdpxAgZkeRIi-YzJFdA/image24.png" rel="WLPP"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="https://58pa2a.bay.livefilestore.com/y1masZYPFs8pisBtM_7M10rnXLsf3AIqClL3IxfBhxg_gDf9M7s0f5m88jF7nQc6Fbzxx7bCgvi5SYKd1WPZTLpkoAxtwMH4D3cOgzFtPmjEqyx7j8J2zY5kF3aWcNYkcArwtKrtzdhgydXDmiXnDvSVA/image_thumb8.png" width="244" height="154" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Tạo Site Collections&lt;/p&gt; &lt;p&gt;&lt;a href="https://58pa2a.bay.livefilestore.com/y1mV4gsS356c0YO1vpalPrBbPCchWCYUAcVBvhHSDIqms73mWfGQXjXeeYzeJQ4pmJ3A4fNfolFhpkhEoxG2bPmhfE3ikSjvauzkY6nw5VwpYdSzPzWJVJVrJGloOl4WTpDzd_agP8CovnMtGQQHlLvDg/image30.png" rel="WLPP"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="https://58pa2a.bay.livefilestore.com/y1mMiFmcA0axbIoxOuoXJAZnWfCpkby4eIlyUzJFdfqcmUQzZzY5lEyzKHx39xubVvf-2Rjg-pKDfDWBTe6D07p2fa1Wl6wnPA-vOLNOpW1jULQz1UGSvwS6FZwSxwnWoIvTQ_4oMU5nZA4PNHBZoFMOw/image_thumb10.png" width="242" height="244" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Đây là bản SharePoint Server 2010 (SharePoint 14) Technical Review , chưa phải chính thức.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=1607" width="1" height="1"&gt;</description></item><item><title>Custom Current User Field</title><link>http://msdnvietnam.net/blogs/quang/archive/2009/07/03/custom-current-user-field.aspx</link><pubDate>Fri, 03 Jul 2009 02:00:52 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:1086</guid><dc:creator>Nguyen Ba Quang</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/quang/rsscomments.aspx?PostID=1086</wfw:commentRss><comments>http://msdnvietnam.net/blogs/quang/archive/2009/07/03/custom-current-user-field.aspx#comments</comments><description>&lt;p&gt;In MOSS 2007 and WSS 3, we have “People and Group” field to specify User or Group. Some time we need to set default value for this. But It’s not default function of “People and Group”. You must create one custom field using Visual Studio 2008 Extensions for WSS 3 and Custom Field template. The code is very easy to write and understand:&lt;/p&gt; &lt;div&gt; &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; CurrentUserFieldField : SPFieldUser&lt;/pre&gt;&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    {&lt;/pre&gt;&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; CurrentUserFieldField(SPFieldCollection fields, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; fieldName)&lt;/pre&gt;&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            : &lt;span style="color:#0000ff;"&gt;base&lt;/span&gt;(fields, fieldName)&lt;/pre&gt;&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        {&lt;/pre&gt;&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        }&lt;/pre&gt;&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        &lt;/pre&gt;&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; CurrentUserFieldField(SPFieldCollection fields, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; typeName, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; displayName)&lt;/pre&gt;&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            : &lt;span style="color:#0000ff;"&gt;base&lt;/span&gt;(fields, typeName, displayName)&lt;/pre&gt;&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        {&lt;/pre&gt;&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        }&lt;/pre&gt;&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; DefaultValue&lt;/pre&gt;&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        {&lt;/pre&gt;&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            get&lt;/pre&gt;&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            {&lt;/pre&gt;&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                SPWeb web = SPContext.Current.Web;&lt;/pre&gt;&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                SPUser currentUser = web.CurrentUser;&lt;/pre&gt;&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;{0};#{1}&amp;quot;&lt;/span&gt;, currentUser.ID.ToString(), currentUser.Name);&lt;/pre&gt;&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            }&lt;/pre&gt;&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            set&lt;/pre&gt;&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            {&lt;/pre&gt;&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                &lt;span style="color:#0000ff;"&gt;base&lt;/span&gt;.DefaultValue = &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            }&lt;/pre&gt;&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        }        &lt;/pre&gt;&lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=1086" width="1" height="1"&gt;</description></item><item><title>SharePoint EventHandler: Set Item Level Permission</title><link>http://msdnvietnam.net/blogs/quang/archive/2009/07/02/sharepoint-eventhandler-set-item-level-permission.aspx</link><pubDate>Thu, 02 Jul 2009 02:40:41 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:1076</guid><dc:creator>Nguyen Ba Quang</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/quang/rsscomments.aspx?PostID=1076</wfw:commentRss><comments>http://msdnvietnam.net/blogs/quang/archive/2009/07/02/sharepoint-eventhandler-set-item-level-permission.aspx#comments</comments><description>&lt;p&gt;Sometime, we need to set item permission dynamically for SharePoint List item or SharePoint Document. To do that, we create Item event handler then implement extension method for setting permission to the item.&lt;/p&gt; &lt;p&gt;the code as following:&lt;/p&gt; &lt;table border="0" cellspacing="0" cellpadding="2" width="800"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="800"&gt; &lt;p&gt;&lt;font face="Courier New"&gt;public static SPListItem SetItemLevelPermission(this SPListItem listItem, SPPrincipal userOrGroup, SPRoleType roleType)&lt;br /&gt;        {&lt;br /&gt;            SPListItem item = listItem;&lt;br /&gt;            Guid listId = listItem.ParentList.ID;&lt;br /&gt;            Guid itemId = listItem.UniqueId;&lt;br /&gt;            SPUserToken token = item.Web.Site.SystemAccount.UserToken;&lt;br /&gt;            SPSecurity.RunWithElevatedPrivileges(&lt;br /&gt;                delegate()&lt;br /&gt;                {&lt;br /&gt;                    using (SPSite site = new SPSite(item.Web.Site.ID, token))&lt;br /&gt;                    {&lt;br /&gt;                        site.AllowUnsafeUpdates = true;&lt;br /&gt;                        using (SPWeb web = site.OpenWeb(item.Web.ID))&lt;br /&gt;                        {&lt;br /&gt;                            web.AllowUnsafeUpdates = true;&lt;br /&gt;                            SPWebApplication webApp = web.Site.WebApplication;&lt;br /&gt;                            webApp.FormDigestSettings.Enabled = false;&lt;br /&gt;                            item = web.Lists[listId].Items[itemId];&lt;br /&gt;                            item.BreakRoleInheritance(false);&lt;br /&gt;                            web.AllowUnsafeUpdates = true; &lt;/font&gt; &lt;p&gt;&lt;font face="Courier New"&gt;                            SPRoleDefinition roleDefinition = web.RoleDefinitions.GetByType(roleType);&lt;br /&gt;                            SPRoleAssignment roleAssignment; &lt;/font&gt; &lt;p&gt;&lt;font face="Courier New"&gt;                            roleAssignment = new SPRoleAssignment(userOrGroup);&lt;br /&gt;                            roleAssignment.RoleDefinitionBindings.Add(roleDefinition);&lt;br /&gt;                            item.RoleAssignments.Add(roleAssignment); &lt;/font&gt; &lt;p&gt;&lt;font face="Courier New"&gt;                            item.Update(); // call this function before finished &lt;br /&gt;                            webApp.FormDigestSettings.Enabled = true;&lt;br /&gt;                            web.AllowUnsafeUpdates = false;&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;                );&lt;br /&gt;            return item;&lt;br /&gt;        }&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;In the ItemAdding or ItemAdded Event, We use:&lt;/p&gt; &lt;table border="0" cellspacing="0" cellpadding="2" width="800"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="800"&gt; &lt;p&gt;&lt;font face="Courier New"&gt;public override void ItemAdded(SPItemEventProperties properties)&lt;br /&gt;       {&lt;br /&gt;           SPWeb currentWeb = properties.ListItem.Web;&lt;br /&gt;           SPUser currentUser = currentWeb.CurrentUser;&lt;br /&gt;           properties.ListItem.SetItemLevelPermission(currentUser, SPRoleType.Contributor);&lt;br /&gt;       }&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=1076" width="1" height="1"&gt;</description></item></channel></rss>
