I have generated a GridView that looks something like:
SportName| CompanyNameX |CompanyNameY |CompanyNameZ
Hockey.....| Shipping------------ |Accounting-------- |Shipping------------
BaseBall...| Receiving-----------|Shipping------------|Accounting---------
Etc............| Accounting----------|Receiving---------- |Receiving-----------
Where there are an unknown number of Company Names and an unknown number of Sport Names....these are dynamically generated based on a database.
I've added link buttons to each of the Department Names.
When these are clicked I need to be able to pull up details on the department based on the Company Name and the Sport Name and display them in a panel below the GridView.
My problem is that I have no idea how to handle the link button clicks.
I've created a Template Class to convert the data to be displayed in the GridView into Link buttons...here's a quick snippet
Expand|Select|Wrap|Line Numbers
- Private Sub DisplayGV()
- Dim dv As DataView = CreateDataSource()
- myGV.DataSource= dv
- For i As Integer = 0 To dv.Table.Columns.Count -1
- Dim tf As New TemplateField
- tf.ItemTemplate = New GridViewClickableTemplate(DataControlRowType.DataRow, _
- _dv.Table.Columns(i).ColumnName)
- tf.HeaderTemplate = New GridViewClickableTemplate(DataControlRowType.Header, _dv.Table.Columns(i).ColumnName)
- myGV.Columns.Add(tf)
- Next
- myGV.DataBind()
- End Sub
- Private Class GridViewClickableTemplate
- Implements ITemplate
- Private _templateType As DataControlRowType
- Private _columnName As String
- Sub New(ByVal type As DataControlRowType, ByVal colname As String)
- _templateType = type
- _columnName = colname
- End Sub
- Public Sub InstantiateIn(ByVal container As System.Web.UI.Control) Implements System.Web.UI.ITemplate.InstantiateIn
- Select Case _templateType
- Case DataControlRowType.Header
- Dim headerText As New Label
- headerText.Text = _columnName
- container.Controls.Add(headerText)
- Case DataControlRowType.DataRow
- Dim lnkBtn As New LinkButton
- AddHandler lnkBtn.DataBinding, AddressOf Me.BindLinkButtons
- container.Controls.Add(lnkBtn)
- Case Else
- End Select
- End Sub
- Private Sub BindLinkButtons(ByVal sender As Object, ByVal e As EventArgs)
- Dim lnkBtn As LinkButton = CType(sender, LinkButton)
- Dim row As GridViewRow = CType(lnkBtn.NamingContainer, GridViewRow)
- Dim content As String = DataBinder.Eval(row.DataItem, _columnName).ToString
- lnkBtn.Text = content
- If String.Compare(content, "Shipping") = 0 Then
- lnkBtn.CssClass = "red"
- lnkBtn.CommandName = "DisplayInfo"
- lnkBtn.CommandArgument = 1
- ElseIf String.Compare(content, "Accounting") = 0 Then
- lnkBtn.CssClass = "green"
- lnkBtn.CommandName = "DisplayInfo"
- lnkBtn.CommandArgument = 2
- ElseIf content.StartsWith("Receiving") Then
- lnkBtn.CssClass = "blue"
- lnkBtn.CommandName = "DisplayInfo"
- lnkBtn.CommandArgument = 3
- End If
- End Sub
- End Class
Expand|Select|Wrap|Line Numbers
- Protected Sub DisplayInfo (ByVal sender As Object, ByVal e As EventArgs)
- Dim lnkBtn As LinkButton = CType(sender, LinkButton)
- DisplayTheStuff(lnkBtn.CommandArgument)
- End Sub
How do you handle dynamically created link buttons in a GridView through one event handler?
Thanks
-LilOlMe