2011年10月16日 星期日

ADO.NET範例(AdoNet02.aspx):詳解DataTable裡建立DataColumn方式

 

◎以上程式範例AdoNet02.aspx,如在頁框下不能操作,請開新視窗操作
◎如果有問題歡迎您提出,dnowba很需要有人和我一起討論

'===自已寫的=====
Imports System.Data
'================
Partial Class AdoNet02
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Me.Label1.Text = "ADO.NET範例(AdoNet02.aspx):詳解DataTable裡建立DataColumn方式"
        Me.Button1.Text = "輸入完後按一下就會新增欄位(DataColumn)並建立第一筆資料(DataRow),並用GridView的方式檢視"
        ' ===== 後記:這個程式範例不能實際應用的,因為每按下一次按鈕PostBack時,這些緩存資料就被重新定義了一次  =====
        ' ===== 另外因為他在產生DataSet到新增DataRow資料,都是在客戶端上的記憶體上運作,不過這也再次說明了ADO.NET 的好處 =====
    End Sub

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' ===== 詳解DataTable裡建立DataColumn方式 =====
        ' 在建立了DataSet、DataTable二個物件後,我們還要進一步的建立資料表的結構(Schema)-DataColumn

        ' ===== 建立DataSet和DataTable =====
        Dim dsPOS As New DataSet
        Dim dtProduct As DataTable = dsPOS.Tables.Add("Product")

        ' ===== 建立第1個DataColumn(資料欄位):ProductName =====
        ' 定義新的DataColumn:在建立資料欄位的時候,我們要設定好欄位名稱、資料型態、是否允許null空值、預設值…等,
        ' 下面設定DataTable中的第一個欄位「dcProductName」

        ' 設定欄位名稱
        Dim dcProductName As New DataColumn("ProductName")
        ' 設定資料型別
        dcProductName.DataType = GetType(System.String)
        ' 設定資料最大字元,因為型態是sring,所以要再設定他的字元限制
        dcProductName.MaxLength = 40
        ' 設定是否允許空值,如下設false表示不允許空值,也就是一定要填入(空白鍵輸入的空白字串也算填入喔)
        dcProductName.AllowDBNull = False
        ' 把DataColumn塞回DataTable裡
        dtProduct.Columns.Add(dcProductName)


        ' ===== 建立第2個DataColumn:ProductID =====
        ' 這裡把不NEW了,直接用該屬性下提供的方法,把dcProductID的指定名稱、資料型別寫在一行,
        ' 也順道塞到了DataTable裡)
        Dim dcProductID As DataColumn = dtProduct.Columns.Add("ProductID", GetType(System.String))
        ' 用With...End With 陳述式,讓他重複參考DataColumn下提供的屬性來作設定
        With dcProductID
            ' 其中unique的意思是該欄位的值是唯一值。
            .Unique = True
            .MaxLength = 10
            .AllowDBNull = False
        End With
        ' 最後再上一個主索引鍵,這個key的設定不是在DataColumn裡,而是在DataTable下
        ' 而定義索引鍵和把某欄位設成Unique = True有點不同,索引鍵當然名稱不能重複,
        ' 不過也有些欄位是只要不重複名稱就可以的…
        ' 像是摸彩系統中,彩卷號碼是主索引值,在中獎清單中,我們可以把中獎員工ID設為UNIQUE,
        ' 這樣員工就不可能重複中獎…(當然員工ID在員工清單中是主索引值)
        dtProduct.PrimaryKey = New DataColumn() {dcProductID}


        ' ===== 建立第3個DataColumn:訂單統計 =====
        Dim dc訂單統計 As DataColumn = dtProduct.Columns.Add("訂單統計", GetType(System.Int32))
        With dc訂單統計
            .DefaultValue = 0
            .AllowDBNull = False
        End With


        ' ===== 建立完DataTable裡的DataColumn後,用GridView控制項來顯示 =====
        ' 這裡是直接把GridView控制項拉到設計頁面上,在程式碼部分指定他的來源

        ' 如果在不新增欄位值的情形下,GridView是不會顯示每個欄位標頭的。
        ' 所以我們這裡小小的新增一下資料。
        Dim drNewProduct As DataRow
        drNewProduct = dtProduct.NewRow
        drNewProduct("ProductID") = Me.TextBox1.Text
        drNewProduct("ProductName") = Me.TextBox2.Text
        dtProduct.Rows.Add(drNewProduct)

        ' 指定GridView的來源和成員
        Me.GridView1.DataSource = dsPOS
        ' 成員的指定我下面可以直接指定,當然用返回值的方式來找也可以,我喜歡用第二種。
        'Me.GridView1.DataMember = "Product"
        Me.GridView1.DataMember = dtProduct.TableName
        Me.GridView1.DataBind()
    End Sub
End Class

沒有留言:

張貼留言

Related Posts Plugin for WordPress, Blogger...
// Dnow Function