一直都在實作 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(); }
執行結果如下圖
寫起來實在容易。而在 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
沒有留言:
張貼留言