2008年8月8日 星期五

原來,DataGridView(WinForm) 與 GridView(Asp.net) 是如此的不同

一直都在實作 asp.net,很少寫 window form 的程式。
現在才發現,這兩個是如此的不同。

在 Asp.Net 的 GridView,簡單的程式如下是可以運作的

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="GridViewDataBid_AspNet._Default" %>


  
code behind
protected void Page_Load(object sender, EventArgs e)
    {
      string[] ary = { "A", "B", "C" };
      GridView1.DataSource = ary;
      GridView1.DataBind();
    }

執行結果如下圖
image
寫起來實在容易。而在 Windows Form這麼做的話,得到的結果是一片空白

private void Form1_Load(object sender, EventArgs e)
    {
      string[] ary = { "A", "B", "C" };
      dataGridView1.DataSource = from s in ary
                                  select new
                                  {
                                    Name = s
                                  };
    }
記得在Form 上的 DataGridView ,要新增一個 Name 的 column

這一段不成功的原因是,DataGridView.DataSource 必須是 IList 介面,包括一維陣列。 IListSource 介面,例如 DataTable 和 DataSet 類別。 IBindingList 介面,例如 BindingList 類別。 IBindingListView 介面,例如 BindingSource 類別。 ( see here )

上一段的程式,只會造成 IEnumable<T>。因此,GridView.DataSource 可以吃,而DataGridView.DataSource 不行。 改一下程式,就可以看到結果了
private void Form1_Load(object sender, EventArgs e)
    {
      string[] ary = { "A", "B", "C" };
      dataGridView1.DataSource = (from s in ary
                                  select new
                                  {
                                    Name = s
                                  }).ToList();
    }
code sample download

沒有留言:

Share with Facebook