📄 defaultvb.aspx.vb
字号:
Imports System
Imports System.Data
Imports System.Data.Common
Imports System.Data.OleDb
Imports System.Globalization
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports Telerik.WebControls
Imports Telerik.QuickStart
Imports System.Collections
Namespace Telerik.GridExamplesVBNET.DataEditing.ExtractValues
Public Class DefaultVB
Inherits XhtmlPage
Protected Button1 As System.Web.UI.WebControls.Button
Protected Linkbutton2 As System.Web.UI.WebControls.LinkButton
Protected Linkbutton1 As System.Web.UI.WebControls.LinkButton
Protected Linkbutton4 As System.Web.UI.WebControls.LinkButton
Protected Button2 As System.Web.UI.WebControls.LinkButton
Protected Label1 As System.Web.UI.WebControls.Label
Protected WithEvents CheckBox1 As System.Web.UI.WebControls.CheckBox
Protected CustomValidator1 As System.Web.UI.WebControls.CustomValidator
Protected TextBox1 As System.Web.UI.WebControls.TextBox
Protected WithEvents CheckBox2 As System.Web.UI.WebControls.CheckBox
Protected WithEvents RadGrid1 As Telerik.WebControls.RadGrid
Private Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
Label1.Text = String.Empty
If Not (IsPostBack) Then
Me.Session("OrdersData") = Nothing
End If
End Sub
Public ReadOnly Property OrdersData() As DataSet
Get
Dim obj As Object = Me.Session("OrdersData")
If Not obj Is Nothing Then
Return CType(obj, DataSet)
End If
Dim MyOrdersData As DataSet = New DataSet
Dim conn As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Server.MapPath("~/Grid/Data/Access/Nwind.mdb"))
Dim adapter As OleDbDataAdapter = New OleDbDataAdapter
adapter.SelectCommand = New OleDbCommand("SELECT CustomerID, CompanyName, ContactName, ContactTitle, Address, PostalCode, Bool FROM Customers", conn)
adapter.Fill(MyOrdersData, "Customers")
adapter.SelectCommand = New OleDbCommand("SELECT Orders.*, (E.FirstName + ' ' + E.LastName) AS EmployeeName " & _
"FROM Orders, Employees E Where Orders.EmployeeID = E.EmployeeID", conn)
adapter.Fill(MyOrdersData, "Orders")
adapter.SelectCommand = New OleDbCommand("SELECT EmployeeID, (FirstName + ' ' + LastName) AS FullName FROM Employees", conn)
adapter.Fill(MyOrdersData, "Employees")
Me.Session("OrdersData") = MyOrdersData
Return MyOrdersData
End Get
End Property
Private Sub RadGrid1_ItemCommand(ByVal source As Object, ByVal e As GridCommandEventArgs) Handles RadGrid1.ItemCommand
If (e.CommandName = "Update") Then
Page.Validate()
If Not (Page.IsValid) Then
'UpdateCommand event will not fire
e.Canceled = True
Return
End If
End If
End Sub
Private Sub RadGrid1_NeedDataSource(ByVal source As Object, ByVal e As GridNeedDataSourceEventArgs) Handles RadGrid1.NeedDataSource
RadGrid1.DataSource = Me.OrdersData
End Sub
Private Sub RadGrid1_PreRender(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.PreRender
If Not IsPostBack Then
Me.RadGrid1.MasterTableView.Items(1).Edit = True
Me.RadGrid1.MasterTableView.Rebind()
End If
End Sub
Private Sub CheckBox1_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
If (CheckBox1.Checked) Then
RadGrid1.MasterTableView.EditMode = GridEditMode.EditForms
Else
RadGrid1.MasterTableView.EditMode = GridEditMode.InPlace
End If
RadGrid1.Rebind()
End Sub
Private Sub CheckBox2_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckBox2.CheckedChanged
Me.RadGrid1.AllowMultiRowEdit = CheckBox2.Checked
End Sub
Private Sub RadGrid1_CreateColumnEditor(ByVal sender As Object, ByVal e As Telerik.WebControls.GridCreateColumnEditorEventArgs)
If (TypeOf e.Column Is GridBoundColumn) Then
If (CType(e.Column, GridBoundColumn).DataField = "ShipAddress") Then
e.ColumnEditor = New MultiLineTextBoxColumnEditor
ElseIf (CType(e.Column, GridBoundColumn).DataField = "OrderDate") Then
e.ColumnEditor = New DateColumnEditor
End If
End If
End Sub
Private Sub RadGrid1_UpdateCommand(ByVal source As System.Object, ByVal e As Telerik.WebControls.GridCommandEventArgs) Handles RadGrid1.UpdateCommand
Dim editedItem As GridEditableItem = CType(e.Item, GridEditableItem)
Dim ordersTable As DataTable = Me.OrdersData.Tables("Orders")
'Locate the changed row in the DataSource
Dim changedRows As DataRow() = ordersTable.Select("OrderID = " + editedItem("OrderID").Text)
If changedRows.Length <> 1 Then
Me.Label1.Text += "Unbale to locate the Order for updating."
e.Canceled = True
Return
End If
'Update new values
Dim newValues As Hashtable = New Hashtable
'The GridTableView will fill the values from all editable columns in the hash
e.Item.OwnerTableView.ExtractValuesFromItem(newValues, editedItem)
Dim changedRow As DataRow = changedRows(0)
changedRow.BeginEdit()
Try
Dim entry As DictionaryEntry
For Each entry In newValues
changedRow(CStr(entry.Key)) = entry.Value
Next
changedRow.EndEdit()
Catch ex As Exception
changedRow.CancelEdit()
Label1.Text += "Unable to update Orders. Reason: " + ex.Message
e.Canceled = True
End Try
'Code for updating the database can go here...
Label1.Text += "Order " + CStr(changedRow("OrderID")) + " updated"
End Sub
Private Sub RadGrid1_InsertCommand(ByVal source As Object, ByVal e As WebControls.GridCommandEventArgs) Handles RadGrid1.InsertCommand
Dim editedItem As GridEditableItem = CType(e.Item, GridEditableItem)
Dim ordersTable As DataTable = Me.OrdersData.Tables("Orders")
Dim newRow As DataRow = ordersTable.NewRow()
'As this example demonstrates only in-memory editing, a new primery key value should be generated
'This should not be applied when updating directly the database
Dim allValues As DataRow() = ordersTable.Select("", "OrderID", DataViewRowState.CurrentRows)
If (allValues.Length > 0) Then
newRow("OrderID") = CInt(allValues(allValues.Length - 1)("OrderID") + 1)
Else
newRow("OrderID") = 1 'the table is empty
End If
'Set new values
Dim newValues As Hashtable = New Hashtable
'The GridTableView will fill the values from all editable columns in the hash
e.Item.OwnerTableView.ExtractValuesFromItem(newValues, editedItem)
Try
Dim entry As DictionaryEntry
For Each entry In newValues
newRow(CStr(entry.Key)) = entry.Value
Next
Catch ex As Exception
Label1.Text += "Unable to insert into Orders. Reason: " + ex.Message
e.Canceled = True
End Try
ordersTable.Rows.Add(newRow)
'Code for updating the database ca go here...
Label1.Text = Label1.Text + "Order " + CStr(newRow("OrderID")) + " inserted"
End Sub
Private Class MultiLineTextBoxColumnEditor
Inherits GridTextColumnEditor
Private MyTextBox As TextBox
Protected Overrides Sub LoadControlsFromContainer()
Me.MyTextBox = CType(Me.ContainerControl.Controls(1), TextBox)
End Sub
Public Overrides ReadOnly Property IsInitialized() As Boolean
Get
If Not Me.MyTextBox Is Nothing Then
Return True
Else
Return False
End If
End Get
End Property
Public Overrides Property Text() As String
Get
Return Me.MyTextBox.Text()
End Get
Set(ByVal Value As String)
Me.MyTextBox.Text = Value
End Set
End Property
Protected Overrides Sub AddControlsToContainer()
Me.ContainerControl.Controls.Add(New LiteralControl("<b>Custom multi-line text editor</b><br />"))
Me.MyTextBox = New TextBox
Me.MyTextBox.TextMode = TextBoxMode.MultiLine
Me.MyTextBox.Rows = 4
Me.MyTextBox.Columns = 40
Me.MyTextBox.BackColor = (CType(New WebColorConverter().ConvertFromString("#EDEDED"), Color))
Me.ContainerControl.Controls.Add(Me.MyTextBox)
End Sub
End Class
Private Class DateColumnEditor
Inherits GridTextColumnEditor
Private MyTextBox As TextBox
Private WithEvents MyValidator As CustomValidator
Private reqValidator As RequiredFieldValidator
Protected Overrides Sub LoadControlsFromContainer()
Me.MyTextBox = CType(Me.ContainerControl.Controls(1), TextBox)
End Sub
Public Overrides ReadOnly Property IsInitialized() As Boolean
Get
If Not Me.MyTextBox Is Nothing Then
Return True
Else
Return False
End If
End Get
End Property
Public Overrides Property Text() As String
Get
Return Me.MyTextBox.Text()
End Get
Set(ByVal Value As String)
Me.MyTextBox.Text = Value
End Set
End Property
Protected Overrides Sub AddControlsToContainer()
Me.ContainerControl.Controls.Add(New LiteralControl("<b>Custom date column editor with validator</b><br />"))
Me.MyTextBox = New TextBox
Me.ContainerControl.Controls.Add(Me.MyTextBox)
Me.MyValidator = New CustomValidator
Me.MyTextBox.ID = "tbDate"
Me.MyValidator.ControlToValidate = Me.MyTextBox.ID
Me.MyValidator.ErrorMessage = " Please, enter a valid date"
Me.reqValidator = New RequiredFieldValidator
Me.reqValidator.ErrorMessage = "This field is required."
Me.reqValidator.ControlToValidate = Me.MyTextBox.ID
Me.ContainerControl.Controls.Add(Me.MyValidator)
Me.ContainerControl.Controls.Add(Me.reqValidator)
End Sub
Private Sub ValidateDate(ByVal source As System.Object, ByVal args As ServerValidateEventArgs) Handles MyValidator.ServerValidate
Try
Dim expectedFormats As String() = {"d", "D", "f", "F", "G", "g"}
DateTime.ParseExact(args.Value, expectedFormats, Nothing, DateTimeStyles.AllowWhiteSpaces)
args.IsValid = True
Catch ex As Exception
args.IsValid = False
Me.MyValidator.Attributes("title") = ex.Message
End Try
End Sub
End Class
End Class
End Namespace
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -