Saturday, March 31, 2012
Strange behavior of invisible controls
I'm updating multiple rows in the datagrid, using the routine described in
the article "Top Questions about the DataGrid Web Server Control":
http://msdn.microsoft.com/library/d...>
ercontrol.asp
To determine which rows had been changed, I'm using the RowChanged sub:
Protected Sub RowChanged(ByVal sender As Object, _
ByVal e As System.EventArgs)
'----
--
' Add ID's for changed rows
'----
--
Try
Dim dgi As DataGridItem = _
CType(CType(sender, Control).NamingContainer, DataGridItem)
Dim IDlabel As Label = CType(dgi.FindControl("lblOrder"), Label)
Dim ID As Integer = CType(IDlabel.Text, Integer)
If Not (IDlist.Contains(ID)) Then
IDlist.Add(ID)
End If
Catch ex As Exception
Me.lblError.Text = "Error No.: " & Err.Number.ToString & " - " & ex.ToString
End Try
End Sub
<asp:CheckBox id="chkInHouse" ToolTip="Plates In House" runat="server"
OnCheckedChanged="RowChanged" Checked='<%# DataBinder.Eval(Container,
"DataItem.InHouse") %>'>
It works OK everywhere, except one datagrid where some of my checkboxes are
invisible - the user has to click a button to make them visible. These
invisible checkboxes always indicate that their values had been changed. As
a result all my data from the datagrid is sent to the database, even if no
changes has been made. As soon as I make these checkboxes visible -
everything works OK.
Why is this happening? Is there any workaround?
I would appreciate your help.
Thank you,
Peter AfoninHi,
If you set checkbox visibility by visible property and you are using
postback to change visible state maybe there is something in the
postback activity that cause that behavior.
you can change check box visibility by changing visibility attribute of
control Style using javascrit thus reducing network traffic.
Natty Gur[MVP]
blog : http://weblogs.asp.net/ngur
Mobile: +972-(0)58-888377
*** Sent via Developersdex http://www.examnotes.net ***
Don't just participate in USENET...get rewarded for it!
Thank you, Natty.
Do you have a JavaScript sample on how to do this? I don't know JS well.
Peter
"Natty Gur" <natty@.dao2com.com> wrote in message
news:Occ$GsiPEHA.164@.TK2MSFTNGP12.phx.gbl...
> Hi,
> If you set checkbox visibility by visible property and you are using
> postback to change visible state maybe there is something in the
> postback activity that cause that behavior.
> you can change check box visibility by changing visibility attribute of
> control Style using javascrit thus reducing network traffic.
> Natty Gur[MVP]
> blog : http://weblogs.asp.net/ngur
> Mobile: +972-(0)58-888377
>
> *** Sent via Developersdex http://www.examnotes.net ***
> Don't just participate in USENET...get rewarded for it!
Strange behavior of invisible controls
I'm updating multiple rows in the datagrid, using the routine described in
the article "Top Questions about the DataGrid Web Server Control":
http://msdn.microsoft.com/library/d...ercontrol. asp
To determine which rows had been changed, I'm using the RowChanged sub:
Protected Sub RowChanged(ByVal sender As Object, _
ByVal e As System.EventArgs)
'-----------------------
-------
' Add ID's for changed rows
'-----------------------
-------
Try
Dim dgi As DataGridItem = _
CType(CType(sender, Control).NamingContainer, DataGridItem)
Dim IDlabel As Label = CType(dgi.FindControl("lblOrder"), Label)
Dim ID As Integer = CType(IDlabel.Text, Integer)
If Not (IDlist.Contains(ID)) Then
IDlist.Add(ID)
End If
Catch ex As Exception
Me.lblError.Text = "Error No.: " & Err.Number.ToString & " - " & ex.ToString
End Try
End Sub
<asp:CheckBox id="chkInHouse" ToolTip="Plates In House" runat="server"
OnCheckedChanged="RowChanged" Checked='<%# DataBinder.Eval(Container,
"DataItem.InHouse") %>'
It works OK everywhere, except one datagrid where some of my checkboxes are
invisible - the user has to click a button to make them visible. These
invisible checkboxes always indicate that their values had been changed. As
a result all my data from the datagrid is sent to the database, even if no
changes has been made. As soon as I make these checkboxes visible -
everything works OK.
Why is this happening? Is there any workaround?
I would appreciate your help.
Thank you,
--
Peter AfoninHi,
If you set checkbox visibility by visible property and you are using
postback to change visible state maybe there is something in the
postback activity that cause that behavior.
you can change check box visibility by changing visibility attribute of
control Style using javascrit thus reducing network traffic.
Natty Gur[MVP]
blog : http://weblogs.asp.net/ngur
Mobile: +972-(0)58-888377
*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!
Thank you, Natty.
Do you have a JavaScript sample on how to do this? I don't know JS well.
Peter
"Natty Gur" <natty@.dao2com.com> wrote in message
news:Occ$GsiPEHA.164@.TK2MSFTNGP12.phx.gbl...
> Hi,
> If you set checkbox visibility by visible property and you are using
> postback to change visible state maybe there is something in the
> postback activity that cause that behavior.
> you can change check box visibility by changing visibility attribute of
> control Style using javascrit thus reducing network traffic.
> Natty Gur[MVP]
> blog : http://weblogs.asp.net/ngur
> Mobile: +972-(0)58-888377
>
> *** Sent via Developersdex http://www.developersdex.com ***
> Don't just participate in USENET...get rewarded for it!
Monday, March 26, 2012
Strange CSS problem
in that table, I have multiple rows and cells, of course -
One table cell is designated for 'content' -
I originally had just assigned a style inline with the tag:
<asp:TableCell Width="615" align="Left" valign="Top" Style="BORDER-TOP:
#000000 2px solid;" ID="ContentCell">
This worked fine.
However, the owners of the page decided it needed a change - on the click of
a button, the styles, etc for the page needed to be changed for the
implementation they needed (long story - won't bore you with that)
so - the page already had a stylesheet linked to it - so I created a new
class:
..TopBorder2 {BORDER-TOP: #000000 12px solid;}
then, I changed the cell to :
<asp:TableCell Width="615" align="Left" valign="Top" CssClass="TopBorder2"
ID="ContentCell"
At this point, I also created a TopBorder0 class, to blank out that border
on the button click...great idea - right?
The CssClass attribute wasn't available at all...I've tried moving it to
the Page_Prerender, the Page_load and included it in the tag itself - it
never rendered to the page
any ideas?when in doubt resort to the tried and true method...
..Attributes.Add("class","TopBorder1")
--
Curt Christianson
site: http://www.darkfalz.com
blog: http://blog.darkfalz.com
"Elmo Watson" wrote:
> I have a DotNet Table (asp:Table)
> in that table, I have multiple rows and cells, of course -
> One table cell is designated for 'content' -
> I originally had just assigned a style inline with the tag:
> <asp:TableCell Width="615" align="Left" valign="Top" Style="BORDER-TOP:
> #000000 2px solid;" ID="ContentCell">
> This worked fine.
> However, the owners of the page decided it needed a change - on the click of
> a button, the styles, etc for the page needed to be changed for the
> implementation they needed (long story - won't bore you with that)
> so - the page already had a stylesheet linked to it - so I created a new
> class:
> ..TopBorder2 {BORDER-TOP: #000000 12px solid;}
> then, I changed the cell to :
> <asp:TableCell Width="615" align="Left" valign="Top" CssClass="TopBorder2"
> ID="ContentCell">
> At this point, I also created a TopBorder0 class, to blank out that border
> on the button click...great idea - right?
> The CssClass attribute wasn't available at all...I've tried moving it to
> the Page_Prerender, the Page_load and included it in the tag itself - it
> never rendered to the page
> any ideas?
>
if the button click only need to change styles (if you are currently posting
back only to change the style) javascript would be the best solution...
<script>
function ChangeStyle()
{
document.getElementById("ContentCell").className = "TopBorder0";
}
</script
calling this client side function on button click will change the style
"Elmo Watson" wrote:
> I have a DotNet Table (asp:Table)
> in that table, I have multiple rows and cells, of course -
> One table cell is designated for 'content' -
> I originally had just assigned a style inline with the tag:
> <asp:TableCell Width="615" align="Left" valign="Top" Style="BORDER-TOP:
> #000000 2px solid;" ID="ContentCell">
> This worked fine.
> However, the owners of the page decided it needed a change - on the click of
> a button, the styles, etc for the page needed to be changed for the
> implementation they needed (long story - won't bore you with that)
> so - the page already had a stylesheet linked to it - so I created a new
> class:
> ..TopBorder2 {BORDER-TOP: #000000 12px solid;}
> then, I changed the cell to :
> <asp:TableCell Width="615" align="Left" valign="Top" CssClass="TopBorder2"
> ID="ContentCell">
> At this point, I also created a TopBorder0 class, to blank out that border
> on the button click...great idea - right?
> The CssClass attribute wasn't available at all...I've tried moving it to
> the Page_Prerender, the Page_load and included it in the tag itself - it
> never rendered to the page
> any ideas?
I just tried:
ContentCell.Attributes.Add("class","TopBorder2")
in Page_load, but it didn't render to the page...
what am I missing?
"Curt_C [MVP]" <software_at_darkfalz.com> wrote in message
news:1E9E8E4D-255D-4E37-BF6B-C67D2C9BA13D@.microsoft.com...
> when in doubt resort to the tried and true method...
> .Attributes.Add("class","TopBorder1")
> --
> Curt Christianson
> site: http://www.darkfalz.com
> blog: http://blog.darkfalz.com
>
> "Elmo Watson" wrote:
>> I have a DotNet Table (asp:Table)
>> in that table, I have multiple rows and cells, of course -
>> One table cell is designated for 'content' -
>> I originally had just assigned a style inline with the tag:
>> <asp:TableCell Width="615" align="Left" valign="Top" Style="BORDER-TOP:
>> #000000 2px solid;" ID="ContentCell">
>> This worked fine.
>>
>> However, the owners of the page decided it needed a change - on the click
>> of
>> a button, the styles, etc for the page needed to be changed for the
>> implementation they needed (long story - won't bore you with that)
>>
>> so - the page already had a stylesheet linked to it - so I created a new
>> class:
>> ..TopBorder2 {BORDER-TOP: #000000 12px solid;}
>>
>> then, I changed the cell to :
>> <asp:TableCell Width="615" align="Left" valign="Top"
>> CssClass="TopBorder2"
>> ID="ContentCell">
>>
>> At this point, I also created a TopBorder0 class, to blank out that
>> border
>> on the button click...great idea - right?
>> The CssClass attribute wasn't available at all...I've tried moving it to
>> the Page_Prerender, the Page_load and included it in the tag itself - it
>> never rendered to the page
>>
>> any ideas?
>>
>>
>
runat=server
--
Curt Christianson
site: http://www.darkfalz.com
blog: http://blog.darkfalz.com
"David Wier" wrote:
> I just tried:
> ContentCell.Attributes.Add("class","TopBorder2")
> in Page_load, but it didn't render to the page...
> what am I missing?
>
> "Curt_C [MVP]" <software_at_darkfalz.com> wrote in message
> news:1E9E8E4D-255D-4E37-BF6B-C67D2C9BA13D@.microsoft.com...
> > when in doubt resort to the tried and true method...
> > .Attributes.Add("class","TopBorder1")
> > --
> > Curt Christianson
> > site: http://www.darkfalz.com
> > blog: http://blog.darkfalz.com
> > "Elmo Watson" wrote:
> >> I have a DotNet Table (asp:Table)
> >> in that table, I have multiple rows and cells, of course -
> >> One table cell is designated for 'content' -
> >> I originally had just assigned a style inline with the tag:
> >> <asp:TableCell Width="615" align="Left" valign="Top" Style="BORDER-TOP:
> >> #000000 2px solid;" ID="ContentCell">
> >> This worked fine.
> >>
> >> However, the owners of the page decided it needed a change - on the click
> >> of
> >> a button, the styles, etc for the page needed to be changed for the
> >> implementation they needed (long story - won't bore you with that)
> >>
> >> so - the page already had a stylesheet linked to it - so I created a new
> >> class:
> >> ..TopBorder2 {BORDER-TOP: #000000 12px solid;}
> >>
> >> then, I changed the cell to :
> >> <asp:TableCell Width="615" align="Left" valign="Top"
> >> CssClass="TopBorder2"
> >> ID="ContentCell">
> >>
> >> At this point, I also created a TopBorder0 class, to blank out that
> >> border
> >> on the button click...great idea - right?
> >> The CssClass attribute wasn't available at all...I've tried moving it to
> >> the Page_Prerender, the Page_load and included it in the tag itself - it
> >> never rendered to the page
> >>
> >> any ideas?
> >>
> >>
> >>
>
Saturday, March 24, 2012
Strange Error when viewing page
following error:
[HttpException (0x80004005): Multiple controls with the same ID
'TitleBanner:_ctl0' were found. Trace requires that controls have unique
IDs.]
System.Web.TraceContext.AddNewControl(String id, String parentId, String
type, Int32 viewStateSize) +313
System.Web.UI.Control.BuildProfileTree(String parentId, Boolean
calcViewState) +201
System.Web.UI.Control.BuildProfileTree(String parentId, Boolean
calcViewState) +263
System.Web.UI.Control.BuildProfileTree(String parentId, Boolean
calcViewState) +263
System.Web.UI.Control.BuildProfileTree(String parentId, Boolean
calcViewState) +263
System.Web.UI.Page.ProcessRequestMain() +1633
TitleBanner is a user control on my page. Because I do not recieve this
error the very first time I view the page after compiling it, ASP.NET is
obviously remembering the control after I view the page the first time. I
find this error strange because _ctl0 is an automatically generated name, so
how can there be two controls with that name? I also find it strange that
the error only seems to occur on my index.aspx page, even though the control
is used in exactly the same way (same parameters and properties) on another
page in the same directory, and it does not give me an error there even when
I view it multiple times. Why might this be happening, and what might I be
able to do to fix it? Thanks.
--
Nathan Sokalski
njsokalski@dotnet.itags.org.hotmail.com
http://www.nathansokalski.com/Nathan,
First question,
Are you dynamicly building controls?
Cor
Hi,
If you are adding the control to the webpage via code do not add
it again when the page is posting back.
If not me.postback then
' add the control here
end if
Ken
---------
"Nathan Sokalski" wrote:
> When I view my index.aspx page any time after the first time, I recieve the
> following error:
> [HttpException (0x80004005): Multiple controls with the same ID
> 'TitleBanner:_ctl0' were found. Trace requires that controls have unique
> IDs.]
> System.Web.TraceContext.AddNewControl(String id, String parentId, String
> type, Int32 viewStateSize) +313
> System.Web.UI.Control.BuildProfileTree(String parentId, Boolean
> calcViewState) +201
> System.Web.UI.Control.BuildProfileTree(String parentId, Boolean
> calcViewState) +263
> System.Web.UI.Control.BuildProfileTree(String parentId, Boolean
> calcViewState) +263
> System.Web.UI.Control.BuildProfileTree(String parentId, Boolean
> calcViewState) +263
> System.Web.UI.Page.ProcessRequestMain() +1633
> TitleBanner is a user control on my page. Because I do not recieve this
> error the very first time I view the page after compiling it, ASP.NET is
> obviously remembering the control after I view the page the first time. I
> find this error strange because _ctl0 is an automatically generated name, so
> how can there be two controls with that name? I also find it strange that
> the error only seems to occur on my index.aspx page, even though the control
> is used in exactly the same way (same parameters and properties) on another
> page in the same directory, and it does not give me an error there even when
> I view it multiple times. Why might this be happening, and what might I be
> able to do to fix it? Thanks.
> --
> Nathan Sokalski
> njsokalski@.hotmail.com
> http://www.nathansokalski.com/
>
Yes, I am. The place that it looks like the error occurs (which is pretty
early in my code based on what I can tell, since the control it says it
finds multiple times is pretty early in the Control Tree it displays). A
note that I want to make about this control, however, is that is a control
that I generate in the Application_Start procedure and store in a collection
in the global.asax.vb file, so it is really only generated once (unless the
cache dependency removes it from cache, in which case it is generated
again). Here is my control tree, which you can see is pretty small since it
doesn't get very far:
Control Tree
Control Id Type Render Size Bytes (including children) Viewstate Size
Bytes (excluding children)
__PAGE ASP.index_aspx 0 0
_ctl0 System.Web.UI.LiteralControl 0 0
TitleBar System.Web.UI.HtmlControls.HtmlGenericControl 0 0
_ctl1 System.Web.UI.LiteralControl 0 0
_ctl2 System.Web.UI.ResourceBasedLiteralControl 0 0
Form1 System.Web.UI.HtmlControls.HtmlForm 0 0
_ctl3 System.Web.UI.LiteralControl 0 0
TitleBanner ASP.Banner_ascx 0 0
TitleBanner:lblTitle System.Web.UI.WebControls.Label 0 0
TitleBanner:_ctl0 System.Web.UI.LiteralControl 0 0
My other control, which the application never even gets to which I use for
navigation on all my pages, actually does generate the controls every time.
If you need any more info, I will be happy to give you anything I can.
Thanks.
--
Nathan Sokalski
njsokalski@.hotmail.com
http://www.nathansokalski.com/
"Cor Ligthert" <notmyfirstname@.planet.nl> wrote in message
news:%237wgeAkdFHA.2288@.TK2MSFTNGP14.phx.gbl...
> Nathan,
> First question,
> Are you dynamicly building controls?
> Cor
I do not add the user control via code, the user control is always there.
The basic layout of the control that it looks like the error is occurring in
is as follows:
LABEL CONTROL
imagecontrol imagecontrol imagecontrol
The basic purpose of the user control is to display the title and navigation
bar. The imagecontrols, which are the navigation, are generated when the
application is started in the Application_Start procedure, and are then
stored in a collection in the global.asax.vb file. The only time they would
be generated a second time would be if they were removed from the
application cache (I created cache dependencies for this). I also want to
point out that even though my diagram above says imagecontrol 3 times, the
page in error only places one there (other pages would place more, but this
page only has one). My control tree (or at least the part shown in the
error) is as follows:
Control Tree
Control Id Type Render Size Bytes (including children) Viewstate Size
Bytes (excluding children)
__PAGE ASP.index_aspx 0 0
_ctl0 System.Web.UI.LiteralControl 0 0
TitleBar System.Web.UI.HtmlControls.HtmlGenericControl 0 0
_ctl1 System.Web.UI.LiteralControl 0 0
_ctl2 System.Web.UI.ResourceBasedLiteralControl 0 0
Form1 System.Web.UI.HtmlControls.HtmlForm 0 0
_ctl3 System.Web.UI.LiteralControl 0 0
TitleBanner ASP.Banner_ascx 0 0
TitleBanner:lblTitle System.Web.UI.WebControls.Label 0 0
TitleBanner:_ctl0 System.Web.UI.LiteralControl 0 0
I am having trouble figuring out what the LiteralControl that it stops at
is, because the user control TitleBanner does not create or use any
LiteralControls. All I can think of is that somehow ASP.NET is labeling the
<BR> tag as a LiteralControl, even though the tag is just there. If there is
any more information that might be useful in figuring out the problem, let
me know and I will be happy to give it to you. Thanks.
--
Nathan Sokalski
njsokalski@.hotmail.com
http://www.nathansokalski.com/
"Ken Tucker [MVP]" <KenTuckerMVP@.discussions.microsoft.com> wrote in message
news:4185E94C-784F-4CCF-B060-555ADEC219BB@.microsoft.com...
> Hi,
> If you are adding the control to the webpage via code do not add
> it again when the page is posting back.
> If not me.postback then
> ' add the control here
> end if
> Ken
> ---------
> "Nathan Sokalski" wrote:
>> When I view my index.aspx page any time after the first time, I recieve
>> the
>> following error:
>>
>> [HttpException (0x80004005): Multiple controls with the same ID
>> 'TitleBanner:_ctl0' were found. Trace requires that controls have unique
>> IDs.]
>> System.Web.TraceContext.AddNewControl(String id, String parentId,
>> String
>> type, Int32 viewStateSize) +313
>> System.Web.UI.Control.BuildProfileTree(String parentId, Boolean
>> calcViewState) +201
>> System.Web.UI.Control.BuildProfileTree(String parentId, Boolean
>> calcViewState) +263
>> System.Web.UI.Control.BuildProfileTree(String parentId, Boolean
>> calcViewState) +263
>> System.Web.UI.Control.BuildProfileTree(String parentId, Boolean
>> calcViewState) +263
>> System.Web.UI.Page.ProcessRequestMain() +1633
>>
>> TitleBanner is a user control on my page. Because I do not recieve this
>> error the very first time I view the page after compiling it, ASP.NET is
>> obviously remembering the control after I view the page the first time. I
>> find this error strange because _ctl0 is an automatically generated name,
>> so
>> how can there be two controls with that name? I also find it strange that
>> the error only seems to occur on my index.aspx page, even though the
>> control
>> is used in exactly the same way (same parameters and properties) on
>> another
>> page in the same directory, and it does not give me an error there even
>> when
>> I view it multiple times. Why might this be happening, and what might I
>> be
>> able to do to fix it? Thanks.
>> --
>> Nathan Sokalski
>> njsokalski@.hotmail.com
>> http://www.nathansokalski.com/
>>
>>
>
Nathan,
I think that the way you are doing it, is so special, that I can not give
you any help in this.
Sorry
Cor