VB.Net/Database ADO.net/DataColumn

Материал из VB Эксперт
Перейти к: навигация, поиск

Create primary key DataColumn

<source lang="vbnet"> Imports System.Data Imports System.Windows.Forms Public Class Form1

   Inherits System.Windows.Forms.Form
   Public Shared Sub Main()
       Application.Run(New Form1())
   End Sub
   Public Sub New()
       MyBase.New()
       Me.DataGrid1 = New System.Windows.Forms.DataGrid()
       CType(Me.DataGrid1, System.ruponentModel.ISupportInitialize).BeginInit()
       Me.SuspendLayout()
       "
       Me.DataGrid1.DataMember = ""
       Me.DataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText
       Me.DataGrid1.Location = New System.Drawing.Point(0, 8)
       Me.DataGrid1.Size = New System.Drawing.Size(432, 256)
       Me.DataGrid1.TabIndex = 0
       "
       Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
       Me.ClientSize = New System.Drawing.Size(440, 273)
       Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.DataGrid1})
       CType(Me.DataGrid1, System.ruponentModel.ISupportInitialize).EndInit()
       Me.ResumeLayout(False)
   End Sub
   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       CreateCustomersTable()
   End Sub
   Private Sub dcConstructorsTest()
       Dim custTable As DataTable = New DataTable("Customers")
       Dim dtSet As DataSet = New DataSet()
       Dim myDataType As System.Type
       myDataType = System.Type.GetType("System.Int32")
       Dim priceCol As DataColumn = New DataColumn("Price", myDataType)
       priceCol.Caption = "Price"
       custTable.Columns.Add(priceCol)
       Dim qtCol As DataColumn = New DataColumn()
       qtCol.ColumnName = "Quantity"
       qtCol.DataType = System.Type.GetType("System.Int32")
       qtCol.Caption = "Quantity"
       custTable.Columns.Add(qtCol)
       Dim strExpr As String = "Price * Quantity"
       Dim totCol As DataColumn = New DataColumn("Total", myDataType, strExpr, MappingType.Attribute)
       totCol.Caption = "Total"
       custTable.Columns.Add(totCol)
       dtSet.Tables.Add(custTable)
       DataGrid1.SetDataBinding(dtSet, "Customers")
   End Sub
   Private Sub CreateCustTable()
       Dim custTable As DataTable = New DataTable("Customers")
       Dim IdCol As DataColumn = New DataColumn()
       IdCol.ColumnName = "ID"
       IdCol.DataType = Type.GetType("System.Int32")
       IdCol.ReadOnly = True
       IdCol.AllowDBNull = False
       IdCol.Unique = True
       IdCol.AutoIncrement = True
       IdCol.AutoIncrementSeed = 1
       IdCol.AutoIncrementStep = 1
       custTable.Columns.Add(IdCol)
       Dim nameCol As DataColumn = New DataColumn()
       nameCol.ColumnName = "Name"
       nameCol.DataType = Type.GetType("System.String")
       custTable.Columns.Add(nameCol)
       Dim addCol As DataColumn = New DataColumn()
       addCol.ColumnName = "Address"
       addCol.DataType = Type.GetType("System.String")
       custTable.Columns.Add(addCol)
       Dim dobCol As DataColumn = New DataColumn()
       dobCol.ColumnName = "DOB"
       dobCol.DataType = Type.GetType("System.DateTime")
       custTable.Columns.Add(dobCol)
       Dim fullTimeCol As DataColumn = New DataColumn()
       fullTimeCol.ColumnName = "VAR"
       fullTimeCol.DataType = Type.GetType("System.Boolean")
       custTable.Columns.Add(fullTimeCol)
       Dim PrimaryKeyColumns() As DataColumn = New DataColumn(1) {}
       PrimaryKeyColumns(0) = custTable.Columns("ID")
       custTable.PrimaryKey = PrimaryKeyColumns
       Dim ds As DataSet = New DataSet("Customers")
       ds.Tables.Add(custTable)
       dataGrid1.DataSource = ds.DefaultViewManager
   End Sub
   Private Sub CreateCustomersTable()
       Dim custTable As System.Data.DataTable = New DataTable("Customers")
       Dim dtColumn As DataColumn
       dtColumn = New DataColumn()
       dtColumn.DataType = System.Type.GetType("System.Int32")
       dtColumn.ColumnName = "id"
       dtColumn.Caption = "Cust ID"
       dtColumn.ReadOnly = True
       dtColumn.Unique = True
       custTable.Columns.Add(dtColumn)
       dtColumn = New DataColumn()
       dtColumn.DataType = System.Type.GetType("System.String")
       dtColumn.ColumnName = "Name"
       dtColumn.Caption = "Cust Name"
       dtColumn.AutoIncrement = False
       dtColumn.ReadOnly = False
       dtColumn.Unique = False
       custTable.Columns.Add(dtColumn)
       dtColumn = New DataColumn()
       dtColumn.DataType = System.Type.GetType("System.String")
       dtColumn.ColumnName = "Address"
       dtColumn.Caption = "Address"
       dtColumn.ReadOnly = False
       dtColumn.Unique = False
       custTable.Columns.Add(dtColumn)
       Dim PrimaryKeyColumns() As DataColumn = New DataColumn(1) {}
       PrimaryKeyColumns(0) = custTable.Columns("id")
       custTable.PrimaryKey = PrimaryKeyColumns
       Dim ds As DataSet = New DataSet("Customers")
       ds.Tables.Add(custTable)
       Dim row1 As DataRow = custTable.NewRow()
       row1("id") = 1001
       row1("Address") = "CA"
       row1("Name") = "A"
       custTable.Rows.Add(row1)
       Dim row2 As DataRow = custTable.NewRow()
       row2("id") = 1002
       row2("Name") = "R"
       row2("Address") = "CA"
       custTable.Rows.Add(row2)
       Dim row3 As DataRow = custTable.NewRow()
       row3("id") = 1003
       row3("Name") = "M "
       row3("Address") = "CA"
       custTable.Rows.Add(row3)
       MessageBox.Show(row2.RowState.ToString())
       row2.Delete()
       MessageBox.Show(row3.RowState.ToString())
       DataGrid1.DataSource = ds.DefaultViewManager
   End Sub
   Friend WithEvents DataGrid1 As System.Windows.Forms.DataGrid

End Class


 </source>


DataColumn Collection demo

<source lang="vbnet"> Imports System.Data Imports System.Windows.Forms Public Class Form1

   Inherits System.Windows.Forms.Form
   Private custTable As DataTable
   Private dtSet As DataSet
   Public Shared Sub Main()
       Application.Run(New Form1())
   End Sub
   Public Sub New()
       MyBase.New()
       InitializeComponent()
   End Sub
   Friend WithEvents DataGrid1 As System.Windows.Forms.DataGrid
   <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
       Me.DataGrid1 = New System.Windows.Forms.DataGrid()
       CType(Me.DataGrid1, System.ruponentModel.ISupportInitialize).BeginInit()
       Me.SuspendLayout()
       Me.DataGrid1.DataMember = ""
       Me.DataGrid1.Location = New System.Drawing.Point(16, 8)
       Me.DataGrid1.Size = New System.Drawing.Size(264, 256)
       Me.DataGrid1.TabIndex = 0
       "
       "Form1
       "
       Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
       Me.ClientSize = New System.Drawing.Size(292, 273)
       Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.DataGrid1})
       CType(Me.DataGrid1, System.ruponentModel.ISupportInitialize).EndInit()
       Me.ResumeLayout(False)
   End Sub
   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       custTable = New DataTable("Customers")
       Dim dtColumn As DataColumn
       Dim myDataRow As DataRow
       dtColumn = New DataColumn()
       dtColumn.DataType = System.Type.GetType("System.Int32")
       dtColumn.ColumnName = "id"
       dtColumn.Caption = "Cust ID"
       dtColumn.ReadOnly = False
       dtColumn.Unique = True
       custTable.Columns.Add(dtColumn)
       " Create Name column.
       dtColumn = New DataColumn()
       dtColumn.DataType = System.Type.GetType("System.String")
       dtColumn.ColumnName = "Name"
       dtColumn.Caption = "Cust Name"
       dtColumn.AutoIncrement = False
       dtColumn.ReadOnly = False
       dtColumn.Unique = False
       custTable.Columns.Add(dtColumn)
       dtColumn = New DataColumn()
       dtColumn.DataType = System.Type.GetType("System.String")
       dtColumn.ColumnName = "Address"
       dtColumn.Caption = "Address"
       dtColumn.ReadOnly = False
       dtColumn.Unique = False
       custTable.Columns.Add(dtColumn)
       Dim PrimaryKeyColumns() As DataColumn = New DataColumn(1) {}
       PrimaryKeyColumns(0) = custTable.Columns("id")
       custTable.PrimaryKey = PrimaryKeyColumns
       dtSet = New DataSet("Customers")
       dtSet.Tables.Add(custTable)
       myDataRow = custTable.NewRow()
       myDataRow("id") = 1001
       myDataRow("Address") = "CA"
       myDataRow("Name") = "A"
       custTable.Rows.Add(myDataRow)
       myDataRow = custTable.NewRow()
       myDataRow("id") = 1002
       myDataRow("Name") = "Jack "
       myDataRow("Address") = "CA"
       custTable.Rows.Add(myDataRow)
       myDataRow = custTable.NewRow()
       myDataRow("id") = 1003
       myDataRow("Name") = "M"
       myDataRow("Address") = "BC"
       custTable.Rows.Add(myDataRow)
       Dim cols As DataColumnCollection = custTable.Columns
       Dim str As String
       str = cols.Count.ToString()
       MessageBox.Show(str)
       If cols.Contains("Name") Then
           If cols.CanRemove(cols("Name")) Then
               cols.Remove("Name")
           End If
       End If
       DataGrid1.DataSource = dtSet.DefaultViewManager
   End Sub

End Class


 </source>