[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

.