Create Dynamic Hyperlink to GridView VB \ ASP.NET

remya1000

Well-known member
Joined
Mar 29, 2007
Messages
122
Programming Experience
Beginner
i'm using VB \ ASP.NET.

i'm trying to display some values in Gridview. but i don't know how many columns i need to display. at run time only i will come to know how many columns i need to display. it depends up on the values from Database. so i'm creating columns dynamically and adding to gridview. till that it works fine. but i want some columns value to be hyperlink. so i need to create some columns hyperlink dynamically.

Database table looks like this
Index-------Name--------------Date-----------------Description
1------------John----------------12/1/2010---------- Work
2------------Peter---------------12/2/2010---------- Out
3------------John----------------12/3/2010---------- Off

depends upon the "Distinct Date", the number of columns in gridview is created dynamically.

Gridview looks like this
Index-----Name----------12/1/2010-------12/2/2010----------12/3/2010
1----------John-----------Work--------------ADD NEW----------Off
2----------Peter----------ADD NEW---------Out-----------------ADD NEW

for all the date columns i want to create dynamic hyperlink.
for example : if i need to make any chnage for 12/1/2010 john, i can click hyperlink "Work" and update the information. and if i need to add some description for 12/2/2010 John, i can click hyperlink "Add New" and add description for that date.

Codes
VB.NET:
Sub Display_Table
        Dim Table_MAINPAGE As DataTable
        Dim Row As DataRow
        Dim dcol As DataColumn
        Dim myConnection As SqlConnection
        Dim MySQL As String
        Dim myCommand As SqlCommand
        Dim myreader As SqlDataReader
        Dim pFirst As Boolean = True
        Dim Name_NotExist, Group_NotExist As Boolean

        aryDate.Clear()
        aryName.Clear()
        aryDate_Desc.Clear()
       
        Table_MAINPAGE = New DataTable()

        dcol = New DataColumn(" # ")
        Table_MAINPAGE.Columns.Add(dcol)

        dcol = New DataColumn("Name")
        Table_MAINPAGE.Columns.Add(dcol)

        myConnection = New SqlConnection(WebConfigurationManager.ConnectionStrings("cvConnectionString").ToString)
        MySQL = "select DISTINCT ondate from sList ORDER BY ondate"
        myConnection.Open()
        myCommand = New SqlCommand(MySQL, myConnection)
        myreader = myCommand.ExecuteReader
        While myreader.Read
            'Get distinct Date from database
            aryDate.Add(myreader(0))
            dcol = New DataColumn(Trim(myreader(0)))
            Table_MAINPAGE.Columns.Add(dcol)
        End While
        myreader.Close()

        pFirst = True
        MySQL = "Select fname, lname from Users ORDER BY fname"
        myCommand = New SqlCommand(MySQL, myConnection)
        myreader = myCommand.ExecuteReader
        While myreader.Read
            If pFirst = True Then
                pFirst = False
                'Get distinct Name from database
                aryName.Add(myreader(0) & " " & myreader(1))
                GoTo NextValue
            End If

            Name_NotExist = False
            Group_NotExist = False
            For q As Integer = 0 To aryName.Count - 1
                If myreader(0) & " " & myreader(1) <> aryName.Item(q) Then
                    Name_NotExist = True
                Else
                    Name_NotExist = False
                    GoTo NextValue
                End If
            Next
            If Name_NotExist = True Then
                aryName.Add(myreader(0) & " " & myreader(1))
            End If
NextValue:
        End While
        myreader.Close()


        Dim h As Integer = 0
        Dim gBool As Boolean = False
        'Now add data for dynamic columns
        'As first column is increment, as number of data in database
        'Let's add some data to the other columns
        For k As Integer = 0 To aryName.Count - 1
            aryDate_Desc.Clear()
            MySQL = "select ondate, description from sList where [name] = '" & Trim(aryName.Item(k).ToString) & "' order by ondate"
            myCommand = New SqlCommand(MySQL, myConnection)
            myreader = myCommand.ExecuteReader
            'Create a new row
            Row = Table_MAINPAGE.NewRow()
            h = h + 1
            Row(" # ") = h
            Row("Name") = aryName.Item(k).ToString
            While myreader.Read
                aryDate_Desc.Add(myreader(0) & " - " & myreader(1))
            End While
            For i As Integer = 0 To aryDate.Count - 1
                gBool = False
                For j As Integer = 0 To aryDate_Desc.Count - 1
                    If Trim(aryDate.Item(i)) = Trim(aryDate_Desc.Item(j).Split("-")(0)) Then
                        'Initialize the row data.
                        Row(Trim(aryDate.Item(i))) = Trim(aryDate_Desc.Item(j).Split("-")(1))
                        gBool = True
                        GoTo NextArrayValue
                    End If
                Next
NextArrayValue:
                If gBool <> True Then
                    Row(Trim(aryDate.Item(i))) = "Add New"
                End If
            Next
            'Add the row to the datatable.
            Table_MAINPAGE.Rows.Add(Row)
            myreader.Close()
        Next
       
        'Initialize the DataSource
        GridView1.DataSource = Table_MAINPAGE

        For i As Integer = 0 To GridView1.Columns.Count - 1
            GridView1.Columns(i).ItemStyle.Width = 500
        Next

        'Bind the datatable with the GridView
        GridView1.DataBind()

        myConnection.Close()
End Sub

How can i create dynamic hyperlinks for the date columns.....

if you have any idea, how to do this, please help me. if you can some example, that's will be great.

Thanks in advance.
 
created a small sample application of what i'm doing and i added that code here...

at run time only i will come to know how many columns i need to display. it depends up on the values from Database. so i'm creating columns dynamically and adding to gridview. till that it works fine. but i want some columns value to be hyperlink. so i need to create some columns hyperlink dynamically.


VB.NET:
<%@ Page Language="VB" MasterPageFile="~/Master/Clearview.master" AutoEventWireup="false" CodeFile="SList.aspx.vb" Inherits="Issues" title="List - Home Page" %>


<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <div style ="width:800px; overflow-x:scroll;">
     <asp:GridView ID="GridView1" runat="server" Width="800px" CellPadding="4" EnableTheming="True" ForeColor="#333333" GridLines="None" > 
        <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
        <RowStyle BackColor="#EFF3FB" />
        <FooterStyle BackColor="#507CD1" ForeColor="White" Font-Bold="True" />
        <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
        <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
         <EditRowStyle BackColor="#2461BF" />
         <AlternatingRowStyle BackColor="White" />
    </asp:GridView>
   </div>
</asp:Content>

VB.NET:
Imports System
Imports System.IO
Imports System.Data
Imports System.Data.SqlClient
Imports System.Web.Configuration


Partial Class Issues
    Inherits System.Web.UI.Page

    Dim aryDate, aryName, aryDate_Desc, aryDesc_Color_Date As New ArrayList


    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim Table_MAINPAGE As DataTable
        Dim Row As DataRow
        Dim dcol As DataColumn
        Dim myConnection As SqlConnection
        Dim MySQL As String
        Dim myCommand As SqlCommand
        Dim myreader As SqlDataReader
        Dim pFirst As Boolean = True
        Dim Name_NotExist, Group_NotExist As Boolean

        aryDate.Clear()
        aryName.Clear()
        aryDate_Desc.Clear()
        aryDesc_Color_Date.Clear()

        Table_MAINPAGE = New DataTable()

        dcol = New DataColumn(" # ")
        Table_MAINPAGE.Columns.Add(dcol)

        dcol = New DataColumn("Name")
        Table_MAINPAGE.Columns.Add(dcol)

        myConnection = New SqlConnection(WebConfigurationManager.ConnectionStrings("cvConnectionString").ToString)
        MySQL = "select DISTINCT ondate from sList ORDER BY ondate"
        myConnection.Open()
        myCommand = New SqlCommand(MySQL, myConnection)
        myreader = myCommand.ExecuteReader
        While myreader.Read
            aryDate.Add(myreader(0))
            dcol = New DataColumn(Trim(myreader(0)))
            Table_MAINPAGE.Columns.Add(dcol)
        End While
        myreader.Close()

        pFirst = True
        MySQL = "Select fname, lname from Users ORDER BY fname"
        myCommand = New SqlCommand(MySQL, myConnection)
        myreader = myCommand.ExecuteReader
        While myreader.Read
            If pFirst = True Then
                pFirst = False
                'Get distinct Name from database
                aryName.Add(myreader(0) & " " & myreader(1))
                GoTo NextValue
            End If

            Name_NotExist = False
            Group_NotExist = False
            For q As Integer = 0 To aryName.Count - 1
                If myreader(0) & " " & myreader(1) <> aryName.Item(q) Then
                    Name_NotExist = True
                Else
                    Name_NotExist = False
                    GoTo NextValue
                End If
            Next
            If Name_NotExist = True Then
                aryName.Add(myreader(0) & " " & myreader(1))
            End If
NextValue:
        End While
        myreader.Close()


        Dim h As Integer = 0
        Dim gBool As Boolean = False
        'Now add data for dynamic columns
        'As first column is increment, as number of data in database
        'Let's add some data to the other columns
        For k As Integer = 0 To aryName.Count - 1
            If Trim(aryName.Item(k).split("-")(1)) = Trim(aryGroup.Item(p)) Then
                aryDate_Desc.Clear()
                MySQL = "select ondate, description, color from sList where [name] = '" & Trim(aryName.Item(k).ToString) & "' order by ondate"
                myCommand = New SqlCommand(MySQL, myConnection)
                myreader = myCommand.ExecuteReader
                'Create a new row
                Row = Table_MAINPAGE.NewRow()
                h = h + 1
                Row(" # ") = h
                Row("Name") = aryName.Item(k).ToString
                While myreader.Read
                    aryDate_Desc.Add(myreader(0) & " - " & myreader(1))
                    aryDesc_Color_Date.Add(myreader(0) & " -" & myreader(1) & " - " & myreader(3))
                End While
                For i As Integer = 0 To aryDate.Count - 1
                    gBool = False
                    For j As Integer = 0 To aryDate_Desc.Count - 1
                        If Trim(aryDate.Item(i)) = Trim(aryDate_Desc.Item(j).Split("-")(0)) Then
                            'Initialize the row data.
                            Row(Trim(aryDate.Item(i))) = Trim(aryDate_Desc.Item(j).Split("-")(1))
                            gBool = True
                            GoTo NextArrayValue
                        End If
                    Next
NextArrayValue:
                    If gBool <> True Then
                        Row(Trim(aryDate.Item(i))) = "Add New"
                    End If
                Next
                'Add the row to the datatable.
                Table_MAINPAGE.Rows.Add(Row)
                myreader.Close()
            End If
        Next

        'Initialize the DataSource
        GridView1.DataSource = Table_MAINPAGE

        For i As Integer = 0 To GridView1.Columns.Count - 1
            GridView1.Columns(i).ItemStyle.Width = 500
        Next

        'Bind the datatable with the GridView
        GridView1.DataBind()

        myConnection.Close()
    End Sub

    Protected Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated
        Dim tCell As TableCell
        Dim drv As DataRowView
        Dim ob As Object
        Dim j As Integer = 1

        For i As Integer = 0 To aryDate.Count - 1
            j = j + 1
            If e.Row.RowType = DataControlRowType.DataRow Then
                drv = e.Row.DataItem
                ob = drv(aryDate.Item(i))
                If ob.ToString.Contains("Work") Then
                    tCell = e.Row.Cells(j)
                    tCell.BackColor = Drawing.Color.Blue
                ElseIf ob.ToString.Contains("Off") Then
                    tCell = e.Row.Cells(j)
                    tCell.BackColor = Drawing.Color.LightBlue
                ElseIf ob.ToString.Contains("Out") Then
                    tCell = e.Row.Cells(j)
                    tCell.BackColor = Drawing.Color.Gray
                ElseIf ob.ToString.Contains("Add New") Then
                    tCell = e.Row.Cells(j)
                    tCell.BackColor = Drawing.Color.White
                End If
            End If
        Next
    End Sub

    Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
        'If (e.Row.RowType = DataControlRowType.DataRow) Then
        '    Dim link As HyperLink = New HyperLink()
        '    link.Text = e.Row.DataItem
        '    link.NavigateUrl = "Update.aspx" + e.Row.DataItem
        '    ' link.NavigateUrl = "Navigate somewhere based on data: " + e.Row.DataItem
        '    e.Row.Cells(2).Controls.Add(link)
        'End If
    End Sub

End Class

my Database table looks like this

Index-------Name--------------Date-----------------Description
1------------John----------------12/1/2010---------- Work
2------------Peter---------------12/2/2010---------- Out
3------------John----------------12/3/2010---------- Off

when this code runs, gridview display like this

Index-----Name----------12/1/2010-----------12/2/2010------------12/3/2010
1----------John-----------Work------------------ADD NEW------------Off
2----------Peter----------ADD NEW-----------Out----------------------ADD NEW

that's the way i want it to be displayed....

but the next thing i want is to make all the Date coumns to displayed as hyperlink.


for example :
for Work (12/1/2010) - Update.aspx?id=1
for Off (12/3/2010) - Update.aspx?id=3
for Out (12/2/2010) - Update.aspx?id=2

How can i create dynamic hyperlinks for the date columns.....

if you have any idea, how to do this, please please please help me. if you have some example, that's will be great.

Thanks in advance.
 
when i try this code to display in DataTable Row, it's displaying this text inside textbox <a href=Update.aspx?id=81>" & "My Link Text" & "</a>
Row("Date") = String.Format("<a href=Update.aspx?id=81>" & "My Link Text" & "</a>")

Then i tried this code using TemplateFiled,
VB.NET:
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports system.IO


Public Class TemplateHandler
    Implements ITemplate

    Private columnID, columnText As String

    Public Sub New(ByVal colText As String)
        columnText = colText
    End Sub

    Private Sub ITemplate_InstantiateIn(ByVal container As Control) Implements ITemplate.InstantiateIn
        Dim lbl As New Label()
        lbl.Text = columnText
        container.Controls.Add(lbl)
    End Sub

End Class

VB.NET:
Imports System
Imports System.IO
Imports System.Data
Imports System.Data.SqlClient
Imports System.Web.Configuration


Partial Class Issues
    Inherits System.Web.UI.Page

    Dim aryDate, aryName, aryDate_Desc, aryDesc_Color_Date As New ArrayList


    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim Table_MAINPAGE As DataTable
        Dim Row As DataRow
        Dim dcol As DataColumn
        Dim myConnection As SqlConnection
        Dim MySQL As String
        Dim myCommand As SqlCommand
        Dim myreader As SqlDataReader
        Dim pFirst As Boolean = True
        Dim Name_NotExist, Group_NotExist As Boolean

        aryDate.Clear()
        aryName.Clear()
        aryDate_Desc.Clear()
        aryDesc_Color_Date.Clear()

        Table_MAINPAGE = New DataTable()

        dcol = New DataColumn(" # ")
        Table_MAINPAGE.Columns.Add(dcol)

        dcol = New DataColumn("Name")
        Table_MAINPAGE.Columns.Add(dcol)

        myConnection = New SqlConnection(WebConfigurationManager.ConnectionStrings("cvConnectionString").ToString)
        MySQL = "select DISTINCT ondate from sList ORDER BY ondate"
        myConnection.Open()
        myCommand = New SqlCommand(MySQL, myConnection)
        myreader = myCommand.ExecuteReader
        While myreader.Read
            aryDate.Add(myreader(0))
        End While
        myreader.Close()

        pFirst = True
        MySQL = "Select fname, lname from Users ORDER BY fname"
        myCommand = New SqlCommand(MySQL, myConnection)
        myreader = myCommand.ExecuteReader
        While myreader.Read
            If pFirst = True Then
                pFirst = False
                'Get distinct Name from database
                aryName.Add(myreader(0) & " " & myreader(1))
                GoTo NextValue
            End If

            Name_NotExist = False
            Group_NotExist = False
            For q As Integer = 0 To aryName.Count - 1
                If myreader(0) & " " & myreader(1) <> aryName.Item(q) Then
                    Name_NotExist = True
                Else
                    Name_NotExist = False
                    GoTo NextValue
                End If
            Next
            If Name_NotExist = True Then
                aryName.Add(myreader(0) & " " & myreader(1))
            End If
NextValue:
        End While
        myreader.Close()


        Dim h As Integer = 0
        Dim gBool As Boolean = False
        'Now add data for dynamic columns
        'As first column is increment, as number of data in database
        'Let's add some data to the other columns
        For k As Integer = 0 To aryName.Count - 1
            If Trim(aryName.Item(k).split("-")(1)) = Trim(aryGroup.Item(p)) Then
                aryDate_Desc.Clear()
                MySQL = "select ondate, description, color from sList where [name] = '" & Trim(aryName.Item(k).ToString) & "' order by ondate"
                myCommand = New SqlCommand(MySQL, myConnection)
                myreader = myCommand.ExecuteReader
                'Create a new row
                Row = Table_MAINPAGE.NewRow()
                h = h + 1
                Row(" # ") = h
                Row("Name") = aryName.Item(k).ToString
                While myreader.Read
                    aryDate_Desc.Add(myreader(0) & " - " & myreader(1))
                    aryDesc_Color_Date.Add(myreader(0) & " -" & myreader(1) & " - " & myreader(3))
                End While
                'Add the row to the datatable.
                Table_MAINPAGE.Rows.Add(Row)
                myreader.Close()
            End If
        Next

        GridView1.AutoGenerateColumns = False

        Dim NameColumn As New BoundField()
        NameColumn.DataField = " # "
        NameColumn.HeaderText = " # "
        GridView1.Columns.Add(NameColumn)

        NameColumn = New BoundField()
        NameColumn.DataField = "Name"
        NameColumn.HeaderText = "Name"
        GridView1.Columns.Add(NameColumn)

        ' Here is template column portion
        Dim TmpCol As New TemplateField()
        TmpCol.HeaderText = aryDate.Item(0).ToString
        GridView1.Columns.Add(TmpCol)
        TmpCol.ItemTemplate = New TemplateHandler(String.Format("<a href=Update.aspx?id=" & "81" & ">" & "work" & "</a>"))

        TmpCol = New TemplateField()
        TmpCol.HeaderText = aryDate.Item(1).ToString
        GridView1.Columns.Add(TmpCol)
        TmpCol.ItemTemplate = New TemplateHandler(String.Format("<a href=Update.aspx?id=" & "81" & ">" & "Off" & "</a>"))

        TmpCol = New TemplateField()
        TmpCol.HeaderText = aryDate.Item(2).ToString
        GridView1.Columns.Add(TmpCol)
        TmpCol.ItemTemplate = New TemplateHandler(String.Format("<a href=Update.aspx?id=" & "81" & ">" & "Out" & "</a>"))

        'Initialize the DataSource
        GridView1.DataSource = Table_MAINPAGE

        For i As Integer = 0 To GridView1.Columns.Count - 1
            GridView1.Columns(i).ItemStyle.Width = 500
        Next

        'Bind the datatable with the GridView
        GridView1.DataBind()

        myConnection.Close()
    End Sub

    Protected Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated
        Dim tCell As TableCell
        Dim drv As DataRowView
        Dim ob As Object
        Dim j As Integer = 1

        For i As Integer = 0 To aryDate.Count - 1
            j = j + 1
            If e.Row.RowType = DataControlRowType.DataRow Then
                drv = e.Row.DataItem
                ob = drv(aryDate.Item(i))
                If ob.ToString.Contains("Work") Then
                    tCell = e.Row.Cells(j)
                    tCell.BackColor = Drawing.Color.Blue
                ElseIf ob.ToString.Contains("Off") Then
                    tCell = e.Row.Cells(j)
                    tCell.BackColor = Drawing.Color.LightBlue
                ElseIf ob.ToString.Contains("Out") Then
                    tCell = e.Row.Cells(j)
                    tCell.BackColor = Drawing.Color.Gray
                ElseIf ob.ToString.Contains("Add New") Then
                    tCell = e.Row.Cells(j)
                    tCell.BackColor = Drawing.Color.White
                End If
            End If
        Next
    End Sub

End Class

when i use the above code, its creating the hyperlink in label's inside gridview. but the gridview looks like this... its adds same text for the entire columns.
Index-----Name----------12/1/2010-----------12/2/2010------------12/3/2010
1----------John-----------Work-------------------Off----------------------Out
2----------Peter----------Work-------------------Off----------------------Out

But this is the format i need to display the gridview.
Index-----Name----------12/1/2010-----------12/2/2010------------12/3/2010
1----------John-----------Work------------------ADD NEW------------Off
2----------Peter----------ADD NEW-----------Out----------------------ADD NEW

is it possible to display it like that?

i tried this code too.. but same result
VB.NET:
Dim myLink As New HyperLink
myLink.Text = columnText
myLink.NavigateUrl = "Update.aspx?id=" & columnID
container.Controls.Add(myLink)

VB.NET:
Dim TmpCol As New TemplateField()
TmpCol.HeaderText = aryDate.Item(0).ToString
GridView1.Columns.Add(TmpCol)
TmpCol.ItemTemplate = New TemplateHandler(81,"my Link Text")

If you have any idea, how to do this, please let me know.

Thanks in advance....
 
adding code here. so later if someone have this problem, they can check this.
VB.NET:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
       
        Dim h As Integer = 0
        Dim gBool As Boolean = False
        'Now add data for dynamic columns
        For k As Integer = 0 To aryName.Count - 1
            If Trim(aryName.Item(k).split("-")(1)) = Trim(aryGroup.Item(p)) Then
                aryDate_Desc.Clear()
	'for each name, need to get date, description, color and recno
                MySQL = "select ondate, description, color, recno from sList where [name] = '" & Trim(aryName.Item(k).ToString) & "' order by ondate"
                myCommand = New SqlCommand(MySQL, myConnection)
                myreader = myCommand.ExecuteReader
                'Create a new row
                Row = Table_MAINPAGE.NewRow()
	h = h + 1
	'adding values to "#" row.
                Row(" # ") = h
	'adding values to "Name" row.
                Row("Name") = aryName.Item(k).ToString
                While myreader.Read
                    aryDate_Desc.Add(myreader(0) & " - " & myreader(1))
                    'adding date, description, index, name to an array. so while creating hyperlink, we can pass the index values		
                    aryHyperLinkIndex.Add(myreader(0) & " - " & myreader(1) & " - " & myreader(3) & " - " & Trim(aryName.Item(k).ToString))
                End While
	For i As Integer = 0 To aryDate.Count - 1
                    gBool = False
                    For j As Integer = 0 To aryDate_Desc.Count - 1
                        If Trim(aryDate.Item(i)) = Trim(aryDate_Desc.Item(j).Split("-")(0)) Then
                            'adding value to "Date" row.
                            Row(Trim(aryDate.Item(i))) = Trim(aryDate_Desc.Item(j).Split("-")(1))
                            gBool = True
                            GoTo NextArrayValue
                        End If
                    Next
NextArrayValue:
                    If gBool <> True Then
                        'adding value as "Add New" to "Date" row, if no value is set.
                        Row(Trim(aryDate.Item(i))) = "Add New"
	        'adding date, description, index, name to an array. so while creating hyperlink, we can pass the index values
	        aryHyperLinkIndex.Add(Trim(aryDate.Item(i)) & " - " & "Add New" & " - " & "0" & " - " & Trim(aryName.Item(k).split("-")(0)).ToString)
                    End If
                Next

                'Add the row to the datatable.
                Table_MAINPAGE.Rows.Add(Row)
                myreader.Close()
            End If
        Next
            'for new group, we need to create empty row (empty row will seperate each group)
            'Create a new row
            Row = Table_MAINPAGE.NewRow()
            Row(" # ") = ""
            Row("Name") = ""
            For i As Integer = 0 To aryDate.Count - 1
                'Initialize the row data.
                Row(Trim(aryDate.Item(i))) = ""
            Next
            'Add the row to the datatable.
            Table_MAINPAGE.Rows.Add(Row)
        Next

        'Initialize the DataSource
        GridView1.DataSource = Table_MAINPAGE

        For i As Integer = 0 To GridView1.Columns.Count - 1
            GridView1.Columns(i).ItemStyle.Width = 500
        Next

        'Bind the datatable with the GridView
        GridView1.DataBind()

        myConnection.Close()
    End Sub


Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
     
  If e.Row.RowType = DataControlRowType.DataRow Then

             'gets first date cell's header	
            Dim Header_Date1 As DataControlFieldHeaderCell = CType(Me.GridView1.HeaderRow.Cells(2), DataControlFieldHeaderCell)
                For k As Integer = 0 To aryHyperLinkIndex.Count - 1
                     'checks if first date cell's header and AryHyperLinkIndex date are equal
                    If Trim(Header_Date1.Text) = Trim(aryHyperLinkIndex.Item(k).split("-")(0)) Then
                        'if Current cell2  (first Date) text is equal to aryHyperLinkIndex description 	
                        If Trim(e.Row.Cells(2).Text) = Trim(aryHyperLinkIndex.Item(k).Split("-")(1)) Then
                            'if current cell1 (Name) text is equal to aryHyperLinkIndex name
                            If Trim(e.Row.Cells(1).Text) = Trim(aryHyperLinkIndex.Item(k).split("-")(3)) Then
                                e.Row.Cells(2).Text = e.Row.Cells(2).Text
                                'if current cell2 (first date) text is equal to "Add New", then create Hyperlink
                                If Trim(e.Row.Cells(2).Text) = "Add New" Then
                                    Dim link As HyperLink = New HyperLink()
                                    link.Text = e.Row.Cells(2).Text
                                    'Passing the date and name
                                    link.NavigateUrl = "AddValues.aspx?DateValue=" & Trim(Header_Date1.Text) & "&NameValue=" & Trim(aryHyperLinkIndex.Item(k).split("-")(3))
                                    e.Row.Cells(2).Controls.Add(link)
                                    GoTo SecondCell
                                Else
                                    Dim link As HyperLink = New HyperLink()
                                    link.Text = e.Row.Cells(2).Text
                                    'Passing index
                                    link.NavigateUrl = "ViewUpdates.aspx?ViewUpdateValue=" & Trim(aryHyperLinkIndex.Item(k).Split("-")(2))
                                    e.Row.Cells(2).Controls.Add(link)
                                    GoTo SecondCell
                                End If
                            End If
                        End If
                    End If
                Next
SecondCell:

        End If
    End Sub
 
Hi ..
I have similar problem in vb.net ..
but i already creat a hyperLinkFiel as a column in the dataTable ..
and i want to fill its rows by using while loop with links.
also i dont know how to set value to each row.

This is my code

ProtectedSub Page_Load(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesMe.Load

dt = New DataTable()
col = New DataColumn("School Name")
dt.Columns.Add(col)

'Creat hyperLink as cloumn in gridview to display school name as link
hlink = New HyperLinkField
hlink.DataTextField = "School Name"
hlink.ControlStyle.Font.Underline = False
hlink.HeaderText = "School Name"
hlink.NavigateUrl = "schoolInfo.aspx"
GridView2.Columns.Add(hlink)

'initilize connection string
con.ConnectionString = ConfigurationManager.ConnectionStrings("DalilucDBConnectionString").ConnectionString
sql = String.Format("(select name from school_site where school_id IN (SELECT school_id FROM favorite_schools WHERE user_name ='{0}')) UNION (select name from external_school where school_id IN (SELECT school_id FROM favorite_schools WHERE user_name ='{0}'))", Session("user_name"))

'Create Command object
Dim thisCommand AsNew SqlCommand(sql, con)
'connect to data base
con.Open()
Dim thisReader As SqlDataReader = thisCommand.ExecuteReader()

While thisReader.Read()
Row = dt.NewRow()
Row("School Name") = Convert.ToString(thisReader.GetValue(0))
dt.Rows.Add(Row)
EndWhile

GridView2.DataSource = dt
GridView2.DataBind()
con.Close()
thisReader.Close()

EndSub


>>>The col School Name is duplicated (one as link, the other one is normal)
i hope u can help me
 
Hi ebtihal...

at first i was trying to code like that and i also had the same issue. duplicated column (one as link, the other one is normal). that's why i using GridView1_RowDataBound to create HyperLink.

you can try this code.
VB.NET:
ProtectedSub Page_Load(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesMe.Load

dt = New DataTable()
col = New DataColumn("School Name")
dt.Columns.Add(col)

'initilize connection string
con.ConnectionString = ConfigurationManager.ConnectionStrings("DalilucDBConnectionString").ConnectionString
sql = String.Format("(select name from school_site where school_id IN (SELECT school_id FROM favorite_schools WHERE user_name ='{0}')) UNION (select name from external_school where school_id IN (SELECT school_id FROM favorite_schools WHERE user_name ='{0}'))", Session("user_name"))

'Create Command object
Dim thisCommand AsNew SqlCommand(sql, con)
'connect to data base
con.Open()
Dim thisReader As SqlDataReader = thisCommand.ExecuteReader()

While thisReader.Read()
Row = dt.NewRow()
Row("School Name") = Convert.ToString(thisReader.GetValue(0))
dt.Rows.Add(Row)
EndWhile

GridView2.DataSource = dt
GridView2.DataBind()
con.Close()
thisReader.Close()

EndSub

VB.NET:
  Protected Sub GridView2_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
        If e.Row.RowType = DataControlRowType.DataRow Then
            'to create Hyperlink for "FILE NAME"
            Dim Header_Date As DataControlFieldHeaderCell = CType(Me.GridView2.HeaderRow.Cells(0), DataControlFieldHeaderCell)
            If Trim(e.Row.Cells(0).Text) <> " " Then
                link = New HyperLink()
                link.Text = e.Row.Cells(0).Text
                link.NavigateUrl = "schoolInfo.aspx"
                e.Row.Cells(0).Controls.Add(link)
            End If
        End If
    End Sub

try this code and see whether you are getting the result?

let me know it's working or not? Hope this helps...
 
Hi Remya ..
I have another problem in the same code ..
I creat an ImageButton column, and i want to navigate to another page when i click in the imageButton and send the id with the URL when i navigate.
I try to use OnClientClick() but it doesn't work.
I hope u can help me again :)

The code is:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

dt = New DataTable()
col =
New DataColumn("School Name")
dt.Columns.Add(col)
col =
New DataColumn("Delete School")
dt.Columns.Add(col)

'Get school name to display it in favorite list
con.ConnectionString = ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString

sql =
String.Format("(select name, school_id from school_site where school_id IN (SELECT school_id FROM favorite_schools WHERE user_name ='{0}')) UNION (select name, school_id from external_school where school_id IN (SELECT school_id FROM favorite_schools WHERE user_name ='{0}'))", Session("user_name"))

Dim thisCommand As New SqlCommand(sql, con)
con.Open()
Dim thisReader As SqlDataReader = thisCommand.ExecuteReader()

While thisReader.Read()
Row = dt.NewRow()
Row(
"School Name") = Convert.ToString(thisReader.GetValue(0))
sid = Convert.ToInt32(thisReader.GetValue(1))
AryID.Add(sid)
dt.Rows.Add(Row)
End While

Gridview2.DataSource = dt
Gridview2.DataBind()
con.Close()
thisReader.Close()
thisCommand.Dispose()

End Sub

Protected Sub GridView2_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles Gridview2.RowDataBound

If e.Row.RowType = DataControlRowType.DataRow Then
'to create Hyperlink for "SCHOOL NAME"
Dim Header_Date As DataControlFieldHeaderCell = CType(Me.Gridview2.HeaderRow.Cells(0), DataControlFieldHeaderCell)
If Trim(e.Row.Cells(0).Text) <> " " Then
link = New HyperLink()
link.Text = e.Row.Cells(0).Text
link.Font.Underline =
False
link.NavigateUrl = "schoolInfo.aspx?" + AryID.Item(count).ToString()
imgbtn =
New ImageButton
imgbtn.ImageUrl =
"~/x.gif"
imgbtn.Height = 15
imgbtn.Width = 17
'imgbtn.ResolveUrl("DeleteFavSchool.aspx?" + AryID.Item(count).ToString())
imgbtn.OnClientClick = "document.location.href = = 'DeleteFavSchool.aspx?id='; return false"

e.Row.Cells(0).Controls.Add(link)
e.Row.Cells(1).Controls.Add(imgbtn)
count = count + 1

End If
End If
End Sub
 
ebtihal, i will check your code and try to help you....

mean while add this new issue as new thread. so more people will read this and try to help you. this thread is resolved. so no new people will check this thread. so try to create a new thread for this issue...
 
Back
Top