Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > Problem with background color of table cell

Reply
Thread Tools

Problem with background color of table cell

 
 
Thanks
Guest
Posts: n/a
 
      02-08-2004
I have a routine that is called on Page_Init. It retrieves folder records
from a database which I display as Link Buttons in a table cell. I set the
table cell's bgcolor to a default color (say black for example). I am
dynamically creating the LinkButton controls and adding them into the table
cell and I've also hooked up an event handler for each LinkButton's Click
event. This all works fine.

Now in the Link Button's Click event handler, I set the background of the
LinkButton's parent (which is the table cell I initially color Black) to
white. This too works fine. My problem occurs when I click another
LinkButton. The table cell it resides also turns white, but the previous one
doesn't restore back to black. Can someone help? I've posted the code below.
I figured that the click would cause a trip to the server, which would call
page_init which inturn would call DisplayFolders which would set the table
cell to black.

Imports System.Data
Imports System.Data.SqlClient
Imports System.Web.UI.WebControls

Public Class StoredProcedures : Inherits System.Web.UI.Page

#Region " Variable Declarations "

Private SelectedFolder As String = ""
Private designerPlaceholderDeclaration As System.Object
Protected WithEvents Form1 As System.Web.UI.HtmlControls.HtmlForm
Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox
Protected WithEvents FolderList As
System.Web.UI.HtmlControls.HtmlTableCell
Protected WithEvents FolderContents As
System.Web.UI.HtmlControls.HtmlTableCell

Private ConnectionString As String = "Data Source=localhost;" & _
"Initial Catalog=Yahoo;" & _
"User Id=sa;" & _
"Password=lvteopeh;" & _
"Connect Timeout=15;" & _
"Network Library=dbmssocn;"

#End Region

#Region " Web Form Designer Generated Code "

'This call is required by the Web Form Designer.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()

End Sub

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Init
InitializeComponent()

End Sub

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
DisplayFolders()
End Sub

#End Region

#Region " Methods / Properties "

Public Sub DisplayFolders()

' Declarations.
Dim ds As DataSet
Dim cm As SqlCommand
Dim cn As SqlConnection
Dim da As SqlDataAdapter

Dim intFolderCount As Long

' Initialization.
ds = New DataSet
da = New SqlDataAdapter
cn = New SqlConnection(ConnectionString)
cm = New SqlCommand("GetFolders", cn)

' **************************************************
' Setup the command object (Type & Parameters)
' **************************************************
With cm
.CommandType = CommandType.StoredProcedure
.Parameters.Add("@UserID", SqlDbType.Int).Direction =
ParameterDirection.Input
.Parameters.Add("@FolderCount", SqlDbType.Int).Direction =
ParameterDirection.Output
.Parameters.Add("@Return_Value", SqlDbType.Int).Direction =
ParameterDirection.ReturnValue
.Parameters("@UserID").Value = 2
End With

' Set the command to execute to the stored procedure command object.
da.SelectCommand = cm

' Fill our dataset and place the results into a temporary table
namespace, "Results"
da.Fill(ds, "Results")

' **************************************************
' Create the table and display the folders.
' **************************************************
CreateFolderTable(ds)

cn.Close()
ds.Dispose()
da.Dispose()
cn.Dispose()
cm.Dispose()

End Sub

Public Sub DisplayFolderContents(ByVal FolderID As Integer)

' Declarations.
Dim ds As DataSet
Dim cm As SqlCommand
Dim cn As SqlConnection
Dim da As SqlDataAdapter

Dim intFolderCount As Long

' Initialization.
ds = New DataSet
da = New SqlDataAdapter
cn = New SqlConnection(ConnectionString)
cm = New SqlCommand("GetNotes", cn)

' **************************************************
' Setup the command object (Type & Parameters)
' **************************************************
With cm
.CommandType = CommandType.StoredProcedure
.Parameters.Add("@intUser", SqlDbType.Int).Direction =
ParameterDirection.Input
.Parameters.Add("@intFolder", SqlDbType.Int).Direction =
ParameterDirection.Input
.Parameters.Add("@intNotesCount", SqlDbType.Int).Direction =
ParameterDirection.Output
.Parameters.Add("@Return_Value", SqlDbType.Int).Direction =
ParameterDirection.ReturnValue
.Parameters("@intUser").Value = 1
.Parameters("@intFolder").Value = 1
End With

' Set the command to execute to the stored procedure command object.
da.SelectCommand = cm

' Fill our dataset and place the results into a temporary table
namespace, "Results"
da.Fill(ds, "Results")

' **************************************************
' Create the table and display the folder's notes.
' **************************************************
CreateFolderContentsTable(ds)

cn.Close()
ds.Dispose()
da.Dispose()
cn.Dispose()
cm.Dispose()

End Sub

Private Sub CreateFolderTable(ByRef ds As DataSet)

Dim dr As DataRow
Dim dt As DataTable
Dim lnk As LinkButton
Dim tbl As New HtmlTable
Dim intFolderCount As Integer

' Get the number of folders returned.
intFolderCount = ds.Tables(0).Rows.Count()

' Setup the table object properties.
With tbl
.Width = "200"
.CellSpacing = "1"
.CellPadding = "1"
End With

' Create an "All" folder for each user.
CreateFolderRow(tbl, -1, "All")

' If there were rows, display the folders.
If intFolderCount > 0 Then

' Get a reference to the results table in the dataset.
dt = ds.Tables(0)

' Loop through each row in the dataset and display it to page.
For Each dr In dt.Rows

CreateFolderRow(tbl, CType(dr(0), Integer), CType(dr(1),
String))

Next

' Now, add this table to the table cell we've designated to hold
the folders table.
FolderList.Controls.Add(tbl)

End If

dr = Nothing
dt = Nothing
tbl = Nothing

End Sub

Private Sub CreateFolderContentsTable(ByRef ds As DataSet)

Dim dr As DataRow
Dim dt As DataTable
Dim lnk As LinkButton
Dim tr1 As HtmlTableRow
Dim tc1 As HtmlTableCell
Dim tc2 As HtmlTableCell
Dim tbl As New HtmlTable
Dim intFolderCount As Integer

' Get the number of folders returned.
intFolderCount = ds.Tables(0).Rows.Count()

' If there were rows, display the folders.
If intFolderCount > 0 Then

' Get a reference to the results table in the dataset.
dt = ds.Tables(0)

With tbl
.Width = "200"
.CellSpacing = "1"
.CellPadding = "1"
End With

' Loop through each row in the dataset and display it to page.
For Each dr In dt.Rows

tr1 = New HtmlTableRow
tc1 = New HtmlTableCell
tc2 = New HtmlTableCell

' Created a padded cell to give the folder list a padded
feel.
With tc1
.Width = "20"
.Align = "right"
.Controls.Add(New LiteralControl("&nbsp;"))
End With

' Create a new link button.
lnk = New LinkButton

' Add a property to hold the SQL ID of the folder.
lnk.Attributes.Add("fid", Trim(dr(0)))
lnk.ForeColor = Color.Black

' Add a Click event handler.
AddHandler lnk.Click, AddressOf FolderItem_Click

' Set the text to be the folder's name.
lnk.Text = Trim(dr(1))

' Display the link.
With tc2
.Width = "180"
.Align = "left"
.Controls.Add(lnk)
.Style.Add("font-family", "verdana")
.Style.Add("font-size", "10px")
End With

' Add the cell to the table row.
With tr1
.Cells.Add(tc1)
.Cells.Add(tc2)
End With

' Add the table row to the table.
tbl.Rows.Add(tr1)

Next

' Now, add this table to the table cell we've designated to hold
the folders table.
FolderList.Controls.Add(tbl)

Else

tr1 = New HtmlTableRow
tc1 = New HtmlTableCell

' We want to display one row with "No Folders".
With tc1
.InnerHtml = "No Folders"
.Width = 200
End With

' Add the cell to the table row.
tr1.Cells.Add(tc1)

' Add the table row to the table.
tbl.Rows.Add(tr1)

End If

tr1 = Nothing
tc1 = Nothing
tc2 = Nothing
tbl = Nothing

' Clean up our table iteration objects.
dr = Nothing
dt = Nothing

End Sub

Private Function CreateLinkButton(ByVal ID As Integer, ByVal Text As
String) As Control

Dim lnk As LinkButton

' Create a new link button.
lnk = New LinkButton

' Add a property to hold the SQL ID of the folder.
lnk.Attributes.Add("fid", ID)

' Set the text for the item black.
lnk.ForeColor = Color.Black

' Set the text to be the folder's name.
lnk.Text = Text

Return lnk

End Function

Private Sub CreateFolderRow(ByRef tbl As HtmlTable, ByVal ID As Integer,
ByVal Text As String)

Dim tr1 As HtmlTableRow
Dim tc1 As HtmlTableCell
Dim tc2 As HtmlTableCell
Dim lnk As LinkButton

tr1 = New HtmlTableRow
tc1 = New HtmlTableCell
tc2 = New HtmlTableCell

' Created a padded cell to give the folder list a padded feel.
With tc1
.Width = "20"
.Align = "right"
.BgColor = "#d5d0cc"
.Controls.Add(New LiteralControl("&nbsp;"))
If ID.ToString = SelectedFolder Then .BgColor = "#FFFFFF"
End With

' Display the link.
With tc2

.Width = "180"
.Align = "left"
.BgColor = "#d5d0cc"
.Style.Add("font-size", "10px")
.Style.Add("font-family", "verdana")

' Create a link button for this folder.
lnk = CreateLinkButton(ID, Text)

' Hook up the plumbing so we can handle click events.
AddHandler lnk.Click, AddressOf FolderItem_Click

' Add the link button to the table's controls collection.
.Controls.Add(lnk)

' Change the background of the item if this is the selected
folder.
If ID.ToString = SelectedFolder Then .BgColor = "#FFFFFF"

End With

' Add the cell to the table row.
With tr1
.Cells.Add(tc1)
.Cells.Add(tc2)
End With

' Add the table row to the table.
tbl.Rows.Add(tr1)

tr1 = Nothing
tc1 = Nothing
tc2 = Nothing

End Sub

#End Region


#Region " Events "

Private Sub FolderItem_Click(ByVal sender As Object, ByVal e As
System.EventArgs)

Dim strID As String = ""
Dim lb As LinkButton = CType(sender, LinkButton)

' Get the FID attribute of the folder link button.
strID = lb.Attributes.Item("FID").ToString()

Dim tc As HtmlTableCell
tc = lb.Parent
If Not (tc Is Nothing) Then tc.BgColor = "#ffffff"


' Set the selected folder.
SelectedFolder = strID

' If the ID is numeric, display the folder's contents.
If IsNumeric(strID) Then DisplayFolderContents(CType(strID,
Integer))

End Sub

#End Region

End Class


 
Reply With Quote
 
 
 
 
Thanks
Guest
Posts: n/a
 
      02-08-2004
I hate it when I figure things out after writing a lengthy post!
Setting the table's EnableViewState property to false rectified the problem.
Thanks

------------------------------------------------------------------------

"Thanks" <> wrote in message
news:%...
> I have a routine that is called on Page_Init. It retrieves folder records
> from a database which I display as Link Buttons in a table cell. I set the
> table cell's bgcolor to a default color (say black for example). I am
> dynamically creating the LinkButton controls and adding them into the

table
> cell and I've also hooked up an event handler for each LinkButton's Click
> event. This all works fine.
>
> Now in the Link Button's Click event handler, I set the background of the
> LinkButton's parent (which is the table cell I initially color Black) to
> white. This too works fine. My problem occurs when I click another
> LinkButton. The table cell it resides also turns white, but the previous

one
> doesn't restore back to black. Can someone help? I've posted the code

below.
> I figured that the click would cause a trip to the server, which would

call
> page_init which inturn would call DisplayFolders which would set the table
> cell to black.
>
> Imports System.Data
> Imports System.Data.SqlClient
> Imports System.Web.UI.WebControls
>
> Public Class StoredProcedures : Inherits System.Web.UI.Page
>
> #Region " Variable Declarations "
>
> Private SelectedFolder As String = ""
> Private designerPlaceholderDeclaration As System.Object
> Protected WithEvents Form1 As System.Web.UI.HtmlControls.HtmlForm
> Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox
> Protected WithEvents FolderList As
> System.Web.UI.HtmlControls.HtmlTableCell
> Protected WithEvents FolderContents As
> System.Web.UI.HtmlControls.HtmlTableCell
>
> Private ConnectionString As String = "Data Source=localhost;" & _
> "Initial Catalog=Yahoo;" & _
> "User Id=sa;" & _
> "Password=lvteopeh;" & _
> "Connect Timeout=15;" & _
> "Network Library=dbmssocn;"
>
> #End Region
>
> #Region " Web Form Designer Generated Code "
>
> 'This call is required by the Web Form Designer.
> <System.Diagnostics.DebuggerStepThrough()> _
> Private Sub InitializeComponent()
>
> End Sub
>
> Private Sub Page_Init(ByVal sender As System.Object, ByVal e As
> System.EventArgs) Handles MyBase.Init
> InitializeComponent()
>
> End Sub
>
> Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
> System.EventArgs) Handles MyBase.Load
> DisplayFolders()
> End Sub
>
> #End Region
>
> #Region " Methods / Properties "
>
> Public Sub DisplayFolders()
>
> ' Declarations.
> Dim ds As DataSet
> Dim cm As SqlCommand
> Dim cn As SqlConnection
> Dim da As SqlDataAdapter
>
> Dim intFolderCount As Long
>
> ' Initialization.
> ds = New DataSet
> da = New SqlDataAdapter
> cn = New SqlConnection(ConnectionString)
> cm = New SqlCommand("GetFolders", cn)
>
> ' **************************************************
> ' Setup the command object (Type & Parameters)
> ' **************************************************
> With cm
> .CommandType = CommandType.StoredProcedure
> .Parameters.Add("@UserID", SqlDbType.Int).Direction =
> ParameterDirection.Input
> .Parameters.Add("@FolderCount", SqlDbType.Int).Direction =
> ParameterDirection.Output
> .Parameters.Add("@Return_Value", SqlDbType.Int).Direction =
> ParameterDirection.ReturnValue
> .Parameters("@UserID").Value = 2
> End With
>
> ' Set the command to execute to the stored procedure command

object.
> da.SelectCommand = cm
>
> ' Fill our dataset and place the results into a temporary table
> namespace, "Results"
> da.Fill(ds, "Results")
>
> ' **************************************************
> ' Create the table and display the folders.
> ' **************************************************
> CreateFolderTable(ds)
>
> cn.Close()
> ds.Dispose()
> da.Dispose()
> cn.Dispose()
> cm.Dispose()
>
> End Sub
>
> Public Sub DisplayFolderContents(ByVal FolderID As Integer)
>
> ' Declarations.
> Dim ds As DataSet
> Dim cm As SqlCommand
> Dim cn As SqlConnection
> Dim da As SqlDataAdapter
>
> Dim intFolderCount As Long
>
> ' Initialization.
> ds = New DataSet
> da = New SqlDataAdapter
> cn = New SqlConnection(ConnectionString)
> cm = New SqlCommand("GetNotes", cn)
>
> ' **************************************************
> ' Setup the command object (Type & Parameters)
> ' **************************************************
> With cm
> .CommandType = CommandType.StoredProcedure
> .Parameters.Add("@intUser", SqlDbType.Int).Direction =
> ParameterDirection.Input
> .Parameters.Add("@intFolder", SqlDbType.Int).Direction =
> ParameterDirection.Input
> .Parameters.Add("@intNotesCount", SqlDbType.Int).Direction =
> ParameterDirection.Output
> .Parameters.Add("@Return_Value", SqlDbType.Int).Direction =
> ParameterDirection.ReturnValue
> .Parameters("@intUser").Value = 1
> .Parameters("@intFolder").Value = 1
> End With
>
> ' Set the command to execute to the stored procedure command

object.
> da.SelectCommand = cm
>
> ' Fill our dataset and place the results into a temporary table
> namespace, "Results"
> da.Fill(ds, "Results")
>
> ' **************************************************
> ' Create the table and display the folder's notes.
> ' **************************************************
> CreateFolderContentsTable(ds)
>
> cn.Close()
> ds.Dispose()
> da.Dispose()
> cn.Dispose()
> cm.Dispose()
>
> End Sub
>
> Private Sub CreateFolderTable(ByRef ds As DataSet)
>
> Dim dr As DataRow
> Dim dt As DataTable
> Dim lnk As LinkButton
> Dim tbl As New HtmlTable
> Dim intFolderCount As Integer
>
> ' Get the number of folders returned.
> intFolderCount = ds.Tables(0).Rows.Count()
>
> ' Setup the table object properties.
> With tbl
> .Width = "200"
> .CellSpacing = "1"
> .CellPadding = "1"
> End With
>
> ' Create an "All" folder for each user.
> CreateFolderRow(tbl, -1, "All")
>
> ' If there were rows, display the folders.
> If intFolderCount > 0 Then
>
> ' Get a reference to the results table in the dataset.
> dt = ds.Tables(0)
>
> ' Loop through each row in the dataset and display it to page.
> For Each dr In dt.Rows
>
> CreateFolderRow(tbl, CType(dr(0), Integer), CType(dr(1),
> String))
>
> Next
>
> ' Now, add this table to the table cell we've designated to

hold
> the folders table.
> FolderList.Controls.Add(tbl)
>
> End If
>
> dr = Nothing
> dt = Nothing
> tbl = Nothing
>
> End Sub
>
> Private Sub CreateFolderContentsTable(ByRef ds As DataSet)
>
> Dim dr As DataRow
> Dim dt As DataTable
> Dim lnk As LinkButton
> Dim tr1 As HtmlTableRow
> Dim tc1 As HtmlTableCell
> Dim tc2 As HtmlTableCell
> Dim tbl As New HtmlTable
> Dim intFolderCount As Integer
>
> ' Get the number of folders returned.
> intFolderCount = ds.Tables(0).Rows.Count()
>
> ' If there were rows, display the folders.
> If intFolderCount > 0 Then
>
> ' Get a reference to the results table in the dataset.
> dt = ds.Tables(0)
>
> With tbl
> .Width = "200"
> .CellSpacing = "1"
> .CellPadding = "1"
> End With
>
> ' Loop through each row in the dataset and display it to page.
> For Each dr In dt.Rows
>
> tr1 = New HtmlTableRow
> tc1 = New HtmlTableCell
> tc2 = New HtmlTableCell
>
> ' Created a padded cell to give the folder list a padded
> feel.
> With tc1
> .Width = "20"
> .Align = "right"
> .Controls.Add(New LiteralControl("&nbsp;"))
> End With
>
> ' Create a new link button.
> lnk = New LinkButton
>
> ' Add a property to hold the SQL ID of the folder.
> lnk.Attributes.Add("fid", Trim(dr(0)))
> lnk.ForeColor = Color.Black
>
> ' Add a Click event handler.
> AddHandler lnk.Click, AddressOf FolderItem_Click
>
> ' Set the text to be the folder's name.
> lnk.Text = Trim(dr(1))
>
> ' Display the link.
> With tc2
> .Width = "180"
> .Align = "left"
> .Controls.Add(lnk)
> .Style.Add("font-family", "verdana")
> .Style.Add("font-size", "10px")
> End With
>
> ' Add the cell to the table row.
> With tr1
> .Cells.Add(tc1)
> .Cells.Add(tc2)
> End With
>
> ' Add the table row to the table.
> tbl.Rows.Add(tr1)
>
> Next
>
> ' Now, add this table to the table cell we've designated to

hold
> the folders table.
> FolderList.Controls.Add(tbl)
>
> Else
>
> tr1 = New HtmlTableRow
> tc1 = New HtmlTableCell
>
> ' We want to display one row with "No Folders".
> With tc1
> .InnerHtml = "No Folders"
> .Width = 200
> End With
>
> ' Add the cell to the table row.
> tr1.Cells.Add(tc1)
>
> ' Add the table row to the table.
> tbl.Rows.Add(tr1)
>
> End If
>
> tr1 = Nothing
> tc1 = Nothing
> tc2 = Nothing
> tbl = Nothing
>
> ' Clean up our table iteration objects.
> dr = Nothing
> dt = Nothing
>
> End Sub
>
> Private Function CreateLinkButton(ByVal ID As Integer, ByVal Text As
> String) As Control
>
> Dim lnk As LinkButton
>
> ' Create a new link button.
> lnk = New LinkButton
>
> ' Add a property to hold the SQL ID of the folder.
> lnk.Attributes.Add("fid", ID)
>
> ' Set the text for the item black.
> lnk.ForeColor = Color.Black
>
> ' Set the text to be the folder's name.
> lnk.Text = Text
>
> Return lnk
>
> End Function
>
> Private Sub CreateFolderRow(ByRef tbl As HtmlTable, ByVal ID As

Integer,
> ByVal Text As String)
>
> Dim tr1 As HtmlTableRow
> Dim tc1 As HtmlTableCell
> Dim tc2 As HtmlTableCell
> Dim lnk As LinkButton
>
> tr1 = New HtmlTableRow
> tc1 = New HtmlTableCell
> tc2 = New HtmlTableCell
>
> ' Created a padded cell to give the folder list a padded feel.
> With tc1
> .Width = "20"
> .Align = "right"
> .BgColor = "#d5d0cc"
> .Controls.Add(New LiteralControl("&nbsp;"))
> If ID.ToString = SelectedFolder Then .BgColor = "#FFFFFF"
> End With
>
> ' Display the link.
> With tc2
>
> .Width = "180"
> .Align = "left"
> .BgColor = "#d5d0cc"
> .Style.Add("font-size", "10px")
> .Style.Add("font-family", "verdana")
>
> ' Create a link button for this folder.
> lnk = CreateLinkButton(ID, Text)
>
> ' Hook up the plumbing so we can handle click events.
> AddHandler lnk.Click, AddressOf FolderItem_Click
>
> ' Add the link button to the table's controls collection.
> .Controls.Add(lnk)
>
> ' Change the background of the item if this is the selected
> folder.
> If ID.ToString = SelectedFolder Then .BgColor = "#FFFFFF"
>
> End With
>
> ' Add the cell to the table row.
> With tr1
> .Cells.Add(tc1)
> .Cells.Add(tc2)
> End With
>
> ' Add the table row to the table.
> tbl.Rows.Add(tr1)
>
> tr1 = Nothing
> tc1 = Nothing
> tc2 = Nothing
>
> End Sub
>
> #End Region
>
>
> #Region " Events "
>
> Private Sub FolderItem_Click(ByVal sender As Object, ByVal e As
> System.EventArgs)
>
> Dim strID As String = ""
> Dim lb As LinkButton = CType(sender, LinkButton)
>
> ' Get the FID attribute of the folder link button.
> strID = lb.Attributes.Item("FID").ToString()
>
> Dim tc As HtmlTableCell
> tc = lb.Parent
> If Not (tc Is Nothing) Then tc.BgColor = "#ffffff"
>
>
> ' Set the selected folder.
> SelectedFolder = strID
>
> ' If the ID is numeric, display the folder's contents.
> If IsNumeric(strID) Then DisplayFolderContents(CType(strID,
> Integer))
>
> End Sub
>
> #End Region
>
> End Class
>
>



 
Reply With Quote
 
 
 
Reply

Thread Tools

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 Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
How to change a table cell's background color? HB ASP .Net 4 05-07-2006 08:52 PM
How to set cell background based on cell value when datagrid is displayed RJ ASP .Net Datagrid Control 1 02-17-2005 09:37 PM
Q: Automatically Changing Background Color of a Table Cell? Arthur Shapiro Javascript 29 01-02-2005 12:15 AM
Problem with setting background color alternating item in datalist to a certain color fig000 ASP .Net Web Controls 0 09-06-2004 06:51 PM
How can I use onclick to change a table cell background color Michael Javascript 1 05-15-2004 04:16 PM



Advertisments