• C# 4.0: Đặt giá trị mặc nhiên cho tham số

    Trong C# 4.0, bạn có thể khai báo và sử dụng các tham số tùy chọn, giống như trong ví dụ sau:

    public static class OptionalDemoLib
    {
       public static void SayHello(string s = “Hello World!”)
       {
          Console.WriteLine(s);
       }
    }

    Trong đó, tham số s có một giá trị mặc nhiên, khi đó bạn có thể gọi hàm SayHello mà có thể truyền giá trị cho nó hoặc không, trong trường hợp không truyền tham số, giá trị mặc nhiên sẽ được dùng:

    public static class OptionalDemo
    {
       public static void Main()
       {
          OptionalDemoLib.SayHello();
          OptionalDemoLib.SayHello(“Hello Bart!”);
       }
    }

    Nhớ rằng các tham số tùy chọn phải được đặt cuối danh sách tham số, nếu không bạn sẽ nhận được thông báo lỗi sau:

    optlib.cs(3,58): error CS1737: Optional parameters must appear after all required parameters

    Khai báo như trong ví dụ sau là không hợp lệ:

    public static void SayHello(string s1 = “Hello World!”, string s2)

    Khái niệm giá trị mặc nhiên này đã có từ lâu trong VB, nay cũng sẽ xuất hiện trong C#, điều này sẽ giúp chúng ta viết code một cách nhanh chóng hơn.

  • WPF ListView – Lấy đối tượng được click

    Trong WPF, để lấy được đối tượng mà người dùng vừa click chuột trong một ListView, các bạn có thể làm như sau:

    Đầu tiên bạn cần đăng ký hàm xử lý cho sự kiện nhấn chuột:

    MyListView.MouseDoubleClick += new MouseButtonEventHandler(MyListView_MouseDoubleClick);
    chú ý là bạn có thể đăng ký cho các hàm nhấn chuột khác như MouseLeftButtonDown, MouseRightButtonDown… và sau đó viết hàm xử lý sự kiện giống như sau:
    void MyListView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
       DependencyObject dep = (DependencyObject)e.OriginalSource;
    
       while ((dep != null) && !(dep is ListViewItem))
       {
           dep = VisualTreeHelper.GetParent(dep);
       }
    
       if (dep == null)
            return;
    
       MyDataItemType item = (MyDataItemType)MyListView.ItemContainerGenerator.ItemFromContainer(dep);
    
       // Do something with the item...
    }
    Cách chúng ta làm là đầu tiên, ta phải xác định đối tượng trực quan mà người dùng vừa nhấn chuột lên, từ đó chúng ta lần theo các đối tượng chứa nó cho đến khi tìm được một ListViewItem, và nhờ đó ta có thể tìm được đối tượng dữ liệu tương ứng. Nếu muốn lấy chỉ số thay vì đối tượng, dùng hàm IndexFromContainer().
    Đoạn mã trên được viết trong VB.NET như sau:
    Dim dep As DependencyObject = CType(e.OriginalSource, DependencyObject)
    While ((dep IsNot Nothing) AndAlso Not (TypeOf (dep) Is System.Windows.Controls.ListViewItem))
        dep = VisualTreeHelper.GetParent(dep)
    End While
    If (dep Is Nothing) Then
        Return
    End If
    Dim item As MyDataItemType = CType(MyListView.ItemContainerGenerator.ItemFromContainer(dep), MyDataItemType)
    Theo http://mikescodeblog.blogspot.com
  • Lấy các dòng ngẫu nhiên (LINQ tip #3)

    Trong SQL Server, để lấy về một tập kết quả ngẫu nhiên, bạn có thể viết:

    SELECT TOP 5 * FROM myTable ORDER BY NEWID()

    Trong LINQ, nếu muốn lấy về một tập kết quả ngẫu nhiên kiểu như trên, bạn cần tạo một hàm ngẫu nhiên, sau đó thêm nó vào LINQ designer, và dùng hàm đã tạo để sắp xếp. Các bước cụ thể như sau:

    (more…)

  • Sử dụng thư viện LINQ Dynamic Query

    LINQ (language integrated query) là một trong những tính năng mới được cung cấp cùng với VS 2008 và .NET 3.5. LINQ làm cho khái niệm truy vấn dữ liệu trở thành một trong những khái niệm cơ bản của lập trình .NET, và cho phép bạn sử dụng các câu truy vấn một cách hiệu quả trong ngôn ngữ lập trình bạn chọn.
  • Mục lục

    Để tiện theo dõi, tôi xin giới thiệu danh mục các chủ đề và bài viết quan trọng

    Và còn nhiều clip đi sâu về kỹ thuật khác.

    Các chủ đề cũ hơn:

  • LINQ tip #2

    Khi thực hiện gắn nối dữ liệu vào DataSource của một DataGridView, đừng gắn nối trực tiếp đối tượng Table vào DataSource kiểu như sau:

    MyDbContext db = new MyDbContext(); myGridView.DataSource = db.Products;

    Nếu bạn viết như trên, trong trường hợp bạn thêm dữ liệu vào, dữ liệu trong DataGridView sẽ không tự động hiển thị dòng mới, thay vì vậy hãy dùng hàm GetNewBindingList():


    myGridView.DataSource = db.Products.GetNewBindingList(); 

     
    Để thêm một dòng mới, bạn có thể viết: ((IBindingList)myGridView.DataSource).Add(new MyData()); 
     

    Dòng dữ liệu mới này sẽ được hiển thị trên DataGridView mà bạn không cần phải làm thêm bất kỳ thao tác nào.
  • LINQ tip #1

    Để thực hiện một phép kiểm tra kiểu như “SELECT * FROM mytable WHERE col1 IN (1, 2, 3)”, các bạn có thể viết như sau:

    int[] departments = {1, 2, 3};
    var products = from p in db.Products where departments.Contains(p.dept_no) select p;
  • Truy vấn Cơ sở dữ liệu (LINQ to SQL phần 3)

    Tháng trước tôi bắt đầu viết loạt bài về LINQ to SQL. LINQ to SQL là một bộ khung (framework) có sẵn cho O/RM (object relational mapping) trong .NET 3.5, nó cho phép bạn dễ dàng mô hình hóa các CSDL quan hệ dùng các lớp .NET. Bạn có thể dùng các biểu thức LINQ để truy vấn CSDL, cũng như có thể cập nhật/thêm/xóa dữ liệu từ đó.

    Dưới đây là hai bài đầu tiên trong loạt bài LINQ to SQL:

    Trong bài viết này, tôi sẽ đi sâu hơn vào cách chúng ta dùng mô hình dữ liệu đã tạo trong phần 2, và cách dùng nó để truy vấn dữ liệu bên trong một dự án ASP.NET.

    (more…)

  • Silverlight 3

    Theo ScottGu, phiên bản kế tiếp của Silverlight sẽ ra mắt trong năm tới. Trong phiên bản này sẽ có một số cập nhật mới như hỗ trợ các tính năng multimedia cao cấp (bao gồm H.264), các tính năng đồ họa nâng cao (bao gồm đồ họa 3D và sử dụng GPU), cũng như các tính năng tiên tiến trong việc phát triển ứng dụng (thêm các control mới và hỗ trợ data-binding tốt hơn). Nhớ rằng đó chỉ là một vài nâng cấp tiêu biểu – còn một số tính năng khác sẽ được công bố sau.

    Năm tới Visual Studio và Visual Web Developer Express cũng sẽ hỗ trợ việc chỉnh sửa và tương tác một cách đầy đủ với Silverlight, và thêm các công cụ cho gắn kết dữ liệu:

    Với những ưu điểm này, hi vọng Silverlight sẽ ngày càng mạnh mẽ và phổ biến.

  • Định nghĩa các lớp mô hình dữ liệu (LINQ to SQL phần 2)

    Trong phần một, tôi đã thảo luận về “LINQ to SQL là gì” và cung cấp một cái nhìn cơ bản về những trường hợp chúng ta có thể sử dụng nó.

    Trong bài viết đầu tiên, tôi cũng đã cung cấp các đoạn code mẫu để biểu diễn cách xử lý dữ liệu dùng LINQ to SQL, bao gồm:

    • Cách truy vấn dữ liệu
    • Các cập nhật dữ liệu
    • Cách chèn và tạo quan hệ các dòng trong một CSDL
    • Cách xóa các dòng trong một CSDL
    • Cách gọi một thủ tục
    • Cách lấy dữ liệu và phân trang trên server

    (more…)