If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below.

 
Go Back  dBforums > Data Access, Manipulation & Batch Languages > ASP > Gridview header template

Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #16 (permalink)  
Old 11-09-09, 00:18
Access Junkie Access Junkie is offline
Registered User
 
Join Date: Jun 2006
Posts: 72
[post broken into two due to max post length restrictions (please start reading from the last post)]

Code:
Imports System.Data.SqlClient
Imports agric.wa.gov.au.AnnualDB.BusinessEntities
Imports agric.wa.gov.au.AnnualDB.BusinessLogic
Imports agric.wa.gov.au.AnnualDB.WebApp
Imports System
Imports System.Collections
Imports System.ComponentModel
Imports System.Data
Imports System.Web
Imports System.Web.SessionState
Imports System.Web.UI
Imports System.Web.UI.WebControls.Button
Imports System.Web.UI.HtmlControls
Imports System.Text
Imports System.Configuration
Imports System.Configuration.ConfigurationManager

Public Class MyHeaderTemplate
    Implements ITemplate
    'Expose the command event handler - when the command event handler is trapped internally this event is raised to inform the container 
    Public Event LinkButtonCommand As CommandEventHandler
    'Public Event LinkButtonClick As EventHandler 
    Private m_sMPTVID As String
    Private m_sHeadingText As String
    Private AR As String

    Public Property MPTVID() As String
        Get
            Return m_sMPTVID
        End Get
        Set(ByVal value As String)
            m_sMPTVID = value
        End Set
    End Property

    Public Property HeadingText() As String
        Get
            Return m_sHeadingText
        End Get
        Set(ByVal value As String)
            m_sHeadingText = value
        End Set
    End Property


    Public Sub InstantiateIn(ByVal container As System.Web.UI.Control) Implements System.Web.UI.ITemplate.InstantiateIn
        Dim text As New Label
        'Dim lblNewLine As New Label
        text.Style.Add("display", "block")
        'text.Style.Add("width", "4px")
        text.Style.Add("float", "left")

        AddHandler text.DataBinding, AddressOf Me.BindText
        container.Controls.Add(text)

        Dim lnkBtn As New LinkButton
        Dim lnkBtn2 As New LinkButton
        lnkBtn.Style.Add("float", "left")
        lnkBtn2.Style.Add("float", "left")
        lnkBtn.CommandArgument = "Add" + MPTVID
        lnkBtn2.CommandArgument = "Rem" + MPTVID
        lnkBtn.CommandName = "Add" + MPTVID
        lnkBtn2.CommandName = "Rem" + MPTVID
        lnkBtn.Text = "AddCol"
        lnkBtn2.Text = "RemCol"

        AddHandler lnkBtn.DataBinding, AddressOf Me.BindLinkButtons
        AddHandler lnkBtn2.DataBinding, AddressOf Me.BindLinkButtons
        'AddHandler lnkBtn.Click, New EventHandler(AddressOf Click)
        AddHandler lnkBtn.Command, New CommandEventHandler(AddressOf Command)
        AddHandler lnkBtn2.Command, New CommandEventHandler(AddressOf Command)
        container.Controls.Add(lnkBtn)
        container.Controls.Add(lnkBtn2)
    End Sub

    Private Sub BindLinkButtons(ByVal sender As Object, ByVal e As EventArgs)
        Dim lnkBtn As LinkButton = CType(sender, LinkButton)
        Dim container As GridViewRow = CType(lnkBtn.NamingContainer, GridViewRow)
        'Dim cellContent As String '= DataBinder.Eval(container.DataItem, "Content").ToString
        'lnkBtn.Text = "Add"
        'lnkBtn.CommandArgument = AR
        'lnkBtn.CommandName = "h" + MPTVID
    End Sub
    Private Sub BindText(ByVal sender As Object, ByVal e As EventArgs)
        Dim txt As Label = CType(sender, Label)
        Dim row As GridViewRow = CType(txt.NamingContainer, GridViewRow)
        'Dim cellContent As String = DataBinder.Eval(row.DataItem, "Title").ToString
        txt.Text = HeadingText + "<br />"
    End Sub

    ''This will crash because the only event that's bubbled up is the Command Event....which takes a parameter of CommandEventArgs 
    'Private Sub Click(ByVal sender As Object, ByVal e As EventArgs) 
    '    RaiseEvent LinkButtonClick(Me, e) 
    'End Sub 

    'Handles the Command Event:  
    'When the link button is clicked the Command event is bubbled up to the container, which happens to be this class. 
    'This method bubbles the event up to the next level so that the event can be 
    'handled in the Page. 
    Private Sub Command(ByVal sender As Object, ByVal e As CommandEventArgs)
        RaiseEvent LinkButtonCommand(Me, e)
    End Sub
End Class
Unlike the example that I found and gave a link to earlier, I have handled the events with the gvTestGrid.RowCommand. The code for which is below...

Code:
    Private Sub gvTestGrid_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles gvTestGrid.RowCommand
        Dim index As String = e.CommandArgument.ToString
        Dim SQL As String
        Dim sqlConn As New SqlConnection
        Dim SampleID As String

        If Not IsNumeric(index) Then
            Dim row As GridViewRow = gvTestGrid.Rows(0)
            Dim MPTVID As String

            MPTVID = Right(e.CommandArgument, Len(e.CommandArgument) - 3)
            RepID = Int(gvTestGrid.DataKeys(0).Item(0).ToString)

            sqlConn.ConnectionString = SQLConnString
            sqlConn.Open()

            Select Case Left(e.CommandName, 3)
                Case "ite"
                    SampleID = Right(e.CommandName, Len(e.CommandName) - 3)
                    SQL = "UPDATE [AnnualDB].[dbo].[TempPlanningTables] " _
                        + "SET Planned=CASE WHEN Planned=-1 THEN 0 ELSE -1 END " _
                        + "WHERE Planned<1 AND RepID=" + RepID.ToString + " AND SampleBarcode='" + SampleID + "' AND MPTVID=" + MPTVID

                    Dim sqlCommSP As New SqlCommand(SQL, sqlConn)
                    sqlCommSP.ExecuteNonQuery()
                Case "Add"
                    SQL = "UPDATE [AnnualDB].[dbo].[TempPlanningTables] " _
                        + "SET Planned=0 " _
                        + "WHERE RepID=" + RepID.ToString + " AND MPTVID=" + MPTVID

                    Dim sqlCommSP As New SqlCommand(SQL, sqlConn)
                    sqlCommSP.ExecuteNonQuery()
                Case "Rem"
                    SQL = "UPDATE [AnnualDB].[dbo].[TempPlanningTables] " _
                        + "SET Planned=-1 " _
                        + "WHERE RepID=" + RepID.ToString + " AND MPTVID=" + MPTVID

                    Dim sqlCommSP As New SqlCommand(SQL, sqlConn)
                    sqlCommSP.ExecuteNonQuery()
            End Select
            sdsPlanningTable.ConnectionString = SQLConnString
            sdsPlanningTable.SelectCommand = ViewState("SQL")

            gvTestGrid.DataSource = sdsPlanningTable
            gvTestGrid.DataBind()
        Else
            Dim row As GridViewRow = gvTestGrid.Rows(index)

            SampleID = row.Cells(6).Text
            RepID = Int(gvTestGrid.DataKeys(0).Item(0).ToString)

            sqlConn.ConnectionString = SQLConnString
            sqlConn.Open()

            Select Case e.CommandName
                Case "RemAll"
                    SQL = "UPDATE [AnnualDB].[dbo].[TempPlanningTables] " _
                        + "SET Planned=-1 " _
                        + "WHERE Planned=0 AND RepID=" + RepID.ToString + " AND SampleBarcode='" + SampleID + "'"

                    Dim sqlCommSP As New SqlCommand(SQL, sqlConn)
                    sqlCommSP.ExecuteNonQuery()
                Case "AddAll"
                    SQL = "UPDATE [AnnualDB].[dbo].[TempPlanningTables] " _
                        + "SET Planned=0 " _
                        + "WHERE Planned=-1 AND RepID=" + RepID.ToString + " AND SampleBarcode='" + SampleID + "'"

                    Dim sqlCommSP As New SqlCommand(SQL, sqlConn)
                    sqlCommSP.ExecuteNonQuery()
                Case "SampleExists"
                    SQL = "UPDATE [AnnualDB].[dbo].[TempPlanningTables] " _
                        + "SET SampleExists=CASE WHEN SampleExists='Yes' THEN 'No' ELSE 'Yes' END " _
                        + "WHERE RepID=" + RepID.ToString + " AND SampleBarcode='" + SampleID + "'"

                    Dim sqlCommSP As New SqlCommand(SQL, sqlConn)
                    sqlCommSP.ExecuteNonQuery()
            End Select
            sdsPlanningTable.ConnectionString = SQLConnString
            sdsPlanningTable.SelectCommand = ViewState("SQL")

            gvTestGrid.DataSource = sdsPlanningTable
            gvTestGrid.DataBind()
        End If
    End Sub
My current solution is not a tidy one but it works so I hope this thread might help others that have the same or similar problem .
Reply With Quote
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On