⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 superdatagrid.vb

📁 asp.net技术内幕的书配源码
💻 VB
📖 第 1 页 / 共 3 页
字号:
    '
    '*********************************************************************
    Public Function LoadPostData(postDataKey As String, values As NameValueCollection) As Boolean Implements IPostBackDataHandler.LoadPostData
        Dim key As String
        For Each key In  values.Keys
            colEditValues(key) = values(key)
        Next key
        Return False
    End Function 'LoadPostData
    
    
    
    '*********************************************************************
    '
    ' RaisePostDataChangedEvent Method
    '
    ' Required by the PostBackDataHandler interface.
    '
    '*********************************************************************
    Public Sub RaisePostDataChangedEvent() Implements IPostBackDataHandler.RaisePostDataChangedEvent
    End Sub 'RaisePostDataChangedEvent
    
    
    
    
    '*********************************************************************
    '
    ' RaisePostBackEvent Method
    '
    ' When a link is clicked (for sorting, paging, editing), this
    ' method launches off the right action.
    '
    '*********************************************************************
    Public Sub RaisePostBackEvent(eventArgument As String) Implements IPostBackEventHandler.RaisePostBackEvent
        Dim parts As String() = eventArgument.Split(New [Char]() {"_"c}, 2)
        
        Select Case parts(0)
            Case "edit"
                _editClicked = True
                EditItemIndex = Int32.Parse(parts(1))
            Case "cancel"
                EditItemIndex = - 1
            Case "update"
                _updateClicked = True
            Case "sort"
                UpdateSort(parts(1))
            Case "page"
                UpdatePage(Int32.Parse(parts(1)))
            Case "delete"
                _deleteClicked = True
                _deleteItemIndex = Int32.Parse(parts(1))
        End Select
    End Sub 'RaisePostBackEvent
    
    
    
    
    '*********************************************************************
    '
    ' UpdatePage Method
    '
    ' Change the current page when paging is enabled.
    '
    '*********************************************************************
    Private Sub UpdatePage(newPageIndex As Integer)
        CurrentPageIndex = newPageIndex
    End Sub 'UpdatePage
    
    
    
    
    '*********************************************************************
    '
    ' UpdateDatabase Method
    '
    ' Perform the update to the database table.
    '
    '*********************************************************************
    Private Sub UpdateDatabase()
        ' Start by updating the data table
        Dim row As DataRow = _dataGridView(EditItemIndex).Row
        Dim col As DataColumn
        For Each col In  _dataGridData.Columns
            If colEditValues.Contains("txt" & col.ColumnName) Then
                Try
                    row(col.ColumnName) = colEditValues(("txt" & col.ColumnName))
                Catch 
                    _errorMessage = "Could not update column " & col.ColumnName
                    Return
                End Try
            End If
        Next col 
        ' Create a command builder
        Dim dad As New SqlDataAdapter(_commandText, ConnectionString)
        Dim builder As New SqlCommandBuilder(dad)
        Try
            dad.Update(_dataGridData)
        Catch ex As Exception
            _errorMessage = ex.Message
            Return
        End Try
        
        ' Deselect any row for editing
        EditItemIndex = - 1
    End Sub 'UpdateDatabase
    
    
    
    Private Sub DeleteRow(rowIndex As Integer)
        ' Delete row from datatable
        Dim row As DataRow = _dataGridView(rowIndex).Row
        row.Delete()
        
        ' Create a command builder
        Dim dad As New SqlDataAdapter(_commandText, ConnectionString)
        Dim builder As New SqlCommandBuilder(dad)
        Try
            dad.Update(_dataGridData)
        Catch ex As Exception
            _errorMessage = ex.Message
        End Try
    End Sub 'DeleteRow
    
    
    
    '*********************************************************************
    '
    ' UpdateSort Method
    '
    ' When a new column is clicked for sorting, update the SortColumn
    ' and SortOrder.
    '
    '*********************************************************************
    Private Sub UpdateSort(sortExpression As String)
        EditItemIndex = - 1
        CurrentPageIndex = 1
        If sortExpression = SortColumn Then
            If SortOrder = "DESC" Then
                SortOrder = "ASC"
            Else
                SortOrder = "DESC"
            End If
        Else
            SortOrder = "ASC"
        End If 
        SortColumn = sortExpression
    End Sub 'UpdateSort
    
    
    
    
    '*********************************************************************
    '
    ' InitDatabaseObjects Method
    '
    ' Initialize the connection string and the command text.
    '
    '*********************************************************************
    Private Sub InitDatabaseObjects()
        ' Check connection string
        If ConnectionString = String.Empty Then
            Throw New ArgumentException("You must set the ConnectionString property!")
        End If 
        ' Check table name
        If TableName = String.Empty AndAlso CommandText = String.Empty Then
            Throw New ArgumentException("You must set the TableName or CommandText property!")
        End If 
        ' Calculate SELECT statement
        If CommandText = String.Empty Then
            _commandText = String.Format("SELECT * FROM {0}", TableName)
        Else
            _commandText = CommandText
        End If
    End Sub 'InitDatabaseObjects
     
    
    
    '*********************************************************************
    '
    ' LoadDatabaseData Method
    '
    ' Load the database data and schema.
    '
    '*********************************************************************
    Private Sub LoadDatabaseData()
        InitDatabaseObjects()
        
        ' Get datagrid table
        Dim con As New SqlConnection(ConnectionString)
        con.Open()
        Dim dad As New SqlDataAdapter(_commandText, con)
        dad.Fill(_dataGridData)
        
        
        ' Get datagrid schema
        Dim cmd As New SqlCommand(_commandText, con)
        _dataGridSchema = cmd.ExecuteReader(CommandBehavior.SchemaOnly).GetSchemaTable()
        
        con.Close()
    End Sub 'LoadDatabaseData
    
    
    
    
    
    '*********************************************************************
    '
    ' RenderTable Method
    '
    ' Display the main HTML table to display the database data.
    '
    '*********************************************************************
    Private Sub RenderTable(writer As HtmlTextWriter)
        
        ' Calculate Alternating Item Style
        _alternatingItemStyle.MergeWith(_itemStyle)
        
        
        
        ' Calculate Start Index
        Dim startIndex As Integer = 0
        If _enablePaging Then
            startIndex =(CurrentPageIndex - 1) * _pageSize
        End If 
        ' Calculate End Index
        Dim endIndex As Integer = _dataGridData.Rows.Count
        If _enablePaging Then
            endIndex = startIndex + _pageSize
            If endIndex > _dataGridData.Rows.Count Then
                endIndex = _dataGridData.Rows.Count
            End If
        End If 
        
        ' Render rows        
        Dim i As Integer
        For i = startIndex To endIndex - 1
            If i Mod 2 = 0 Then
                _itemStyle.AddAttributesToRender(writer)
            Else
                _alternatingItemStyle.AddAttributesToRender(writer)
            End If 
            
            If _enableEditing AndAlso EditItemIndex = i Then
                RenderEditRow(writer, i)
            Else
                RenderRow(writer, i)
            End If
        Next i
    End Sub 'RenderTable
     
    
    
    '*********************************************************************
    '
    ' RenderRow Method
    '
    ' Display a particular row in the HTML table.
    '
    '*********************************************************************
    Private Sub RenderRow(writer As HtmlTextWriter, itemIndex As Integer)
        writer.RenderBeginTag(HtmlTextWriterTag.Tr)
        If _enableEditing Then
            writer.RenderBeginTag(HtmlTextWriterTag.Td)
            RenderLink(writer, "Edit", "edit_" & itemIndex.ToString())
            
            If _enableDeleting Then
                writer.Write(" | ")
                writer.AddAttribute(HtmlTextWriterAttribute.Onclick, "return confirm('Are you sure you want to delete this row?')")
                
                RenderLink(writer, "Delete", "delete_" & itemIndex.ToString())
            End If
            
            writer.RenderEndTag()
        End If
        
        Dim i As Integer
        For i = 0 To _dataGridData.Columns.Count - 1
            writer.RenderBeginTag(HtmlTextWriterTag.Td)
            RenderColumn(writer, itemIndex, i)
            writer.RenderEndTag()
        Next i
        writer.RenderEndTag()
    End Sub 'RenderRow
    
    
    
    
    '*********************************************************************
    '
    ' RenderEditRow Method
    '
    ' Render a row for editing.
    '
    '*********************************************************************
    Private Sub RenderEditRow(writer As HtmlTextWriter, itemIndex As Integer)
        writer.RenderBeginTag(HtmlTextWriterTag.Tr)
        writer.RenderBeginTag(HtmlTextWriterTag.Td)
        
        ' Render update link
        RenderLink(writer, "Update", "update_" & itemIndex.ToString())
        
        writer.Write(" | ")
        
        ' Render Cancel link
        RenderLink(writer, "Cancel", "cancel_" & itemIndex.ToString())
        
        writer.RenderEndTag()
        
        Dim i As Integer
        For i = 0 To _dataGridData.Columns.Count - 1
            writer.AddAttribute(HtmlTextWriterAttribute.Valign, "top")
            writer.RenderBeginTag(HtmlTextWriterTag.Td)
            RenderEditColumn(writer, itemIndex, i)
            writer.RenderEndTag()
        Next i
        writer.RenderEndTag()
    End Sub 'RenderEditRow
    
    
    
    
    '*********************************************************************
    '
    ' RenderColumn Method
    '
    ' Render the value of a column. For money columns, we'll apply 
    ' some formatting.
    '
    '*********************************************************************
    Private Sub RenderColumn(writer As HtmlTextWriter, rowIndex As Integer, colIndex As Integer)
        Dim colValue As Object = _dataGridView(rowIndex)(colIndex)
        Dim providerType As SqlDbType = CType(_dataGridSchema.Rows(colIndex)("ProviderType"), SqlDbType)
        
        Select Case providerType
            Case SqlDbType.Money
                writer.Write(System.Convert.ToDecimal(colValue).ToString("c"))
            Case SqlDbType.Image
                writer.Write("[Image]")
            Case SqlDbType.DateTime
                Dim dtm As DateTime = CType(colValue, DateTime)
                If dtm.Date = dtm Then
                    writer.Write(dtm.ToString("d"))
                Else
                    writer.Write(dtm.ToString("g"))
                End If
            Case Else
                writer.Write(colValue.ToString())
        End Select
    End Sub 'RenderColumn
    
    
    
    
    '*********************************************************************
    '
    ' RenderEditColumn Method
    '
    ' Render a column with the right UI for editing its contents.
    '
    '*********************************************************************
    Private Sub RenderEditColumn(writer As HtmlTextWriter, rowIndex As Integer, colIndex As Integer)
        Dim colName As String = _dataGridData.Columns(colIndex).ColumnName
        Dim colValue As Object = _dataGridView(rowIndex)(colIndex)
        If colEditValues.Contains(colName) Then
            colValue = colEditValues(colName)
        End If
        Dim providerType As SqlDbType = CType(_dataGridSchema.Rows(colIndex)("ProviderType"), SqlDbType)
        Dim columnSize As Integer = _dataGridSchema.Rows(colIndex)("ColumnSize")
        Dim colIsIdentity As Boolean = CBool(_dataGridSchema.Rows(colIndex)("IsIdentity"))
        
        If colIsIdentity Then
            writer.Write(colValue.ToString())
        Else
            Select Case providerType
                Case SqlDbType.VarChar, SqlDbType.NVarChar, SqlDbType.NText, SqlDbType.Text
                    If columnSize > 100 Then
                        RenderTextBox(writer, colName, colValue, 30, 3, columnSize)
                    ElseIf columnSize > 30 Then
                        RenderTextBox(writer, colName, colValue, 30, 1, columnSize)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -