473,414 Members | 1,691 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,414 software developers and data experts.

ASP.NET 2.0 - Losing controls added in post back

I'm adding checkbox controls to a panel in a post back, I then have a second
post back in which I attempt to process the checkbox controls however they
seem to have disappeared off the panel. The following code demonstrates
what I'm trying to do.

Can anyone explain why there is no checkbox control on the panel when btnTwo
is clicked?

default.aspx:----------------------------------------------------------------------------------------------

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"
Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Panel ID="pnlTest" runat="server"></asp:Panel>
<asp:Button ID="btnOne" runat="server" Text="Next>"
OnClick="btnOne_Click" />
<asp:Button ID="btnTwo" runat="server" Text="Save" Visible ="false"
OnClick="btnTwo_Click" />
<br />
<asp:Label ID="Label1" runat="server"
Text="Label"></asp:Label></div>
</form>
</body>
</html>

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

default.aspx.cs:--------------------------------------------------------------------------------------------

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}

protected void btnOne_Click(object sender, EventArgs e)
{
btnOne.Visible = false;
CheckBox chkTest = new CheckBox();
chkTest.ID = "m";
chkTest.Text = "CheckMe";
btnTwo.Visible = true;

pnlTest.Controls.Add(chkTest);
}
protected void btnTwo_Click(object sender, EventArgs e)
{
if (pnlTest.Controls.Count < 1)
{
Label1.Text = "Failed";
return;
}

Control control = pnlTest.FindControl("m");
CheckBox chkTest = control as CheckBox;
if (chkTest.Checked)
Label1.Text = "Worked";
}
}

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

Thanks in advance...

Michael
Dec 26 '06 #1
12 2432
Michael,

You have to re-create dynamically-created controls on every postback.

Find more here:
http://aspnet.4guysfromrolla.com/articles/092904-1.aspx

--
Eliyahu Goldin,
Software Developer & Consultant
Microsoft MVP [ASP.NET]
http://msmvps.com/blogs/egoldin
"Michael Lang" <micklang at gmail.comwrote in message
news:es**************@TK2MSFTNGP02.phx.gbl...
I'm adding checkbox controls to a panel in a post back, I then have a
second post back in which I attempt to process the checkbox controls
however they seem to have disappeared off the panel. The following code
demonstrates what I'm trying to do.

Can anyone explain why there is no checkbox control on the panel when
btnTwo is clicked?

default.aspx:----------------------------------------------------------------------------------------------

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"
Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Panel ID="pnlTest" runat="server"></asp:Panel>
<asp:Button ID="btnOne" runat="server" Text="Next>"
OnClick="btnOne_Click" />
<asp:Button ID="btnTwo" runat="server" Text="Save" Visible
="false" OnClick="btnTwo_Click" />
<br />
<asp:Label ID="Label1" runat="server"
Text="Label"></asp:Label></div>
</form>
</body>
</html>

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

default.aspx.cs:--------------------------------------------------------------------------------------------

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}

protected void btnOne_Click(object sender, EventArgs e)
{
btnOne.Visible = false;
CheckBox chkTest = new CheckBox();
chkTest.ID = "m";
chkTest.Text = "CheckMe";
btnTwo.Visible = true;

pnlTest.Controls.Add(chkTest);
}
protected void btnTwo_Click(object sender, EventArgs e)
{
if (pnlTest.Controls.Count < 1)
{
Label1.Text = "Failed";
return;
}

Control control = pnlTest.FindControl("m");
CheckBox chkTest = control as CheckBox;
if (chkTest.Checked)
Label1.Text = "Worked";
}
}

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

Thanks in advance...

Michael

Dec 26 '06 #2
Thanks...

Quite right.

I thought perhaps by re-adding the controls their state would be lost but
through testing this looks not to be the case. So for anyone interested the
following code works...

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (btnTwo.Visible)
{
CheckBox chkTest = new CheckBox();
chkTest.ID = "m";
chkTest.Text = "CheckMe";
pnlTest.Controls.Add(chkTest);
}
}

protected void btnOne_Click(object sender, EventArgs e)
{
btnOne.Visible = false;
btnTwo.Visible = true;

CheckBox chkTest = new CheckBox();
chkTest.ID = "m";
chkTest.Text = "CheckMe";

pnlTest.Controls.Add(chkTest);
}
protected void btnTwo_Click(object sender, EventArgs e)
{
if (pnlTest.Controls.Count < 1)
{
Label1.Text = "Failed";
return;
}

Control control = pnlTest.FindControl("m");
CheckBox chkTest = control as CheckBox;
if (chkTest.Checked)
Label1.Text = "Is Checked";
else
Label1.Text = "Not Checked";
}
}
"Eliyahu Goldin" <RE**************************@mMvVpPsS.orgwrote in
message news:Oa**************@TK2MSFTNGP04.phx.gbl...
Michael,

You have to re-create dynamically-created controls on every postback.

Find more here:
http://aspnet.4guysfromrolla.com/articles/092904-1.aspx

--
Eliyahu Goldin,
Software Developer & Consultant
Microsoft MVP [ASP.NET]
http://msmvps.com/blogs/egoldin
"Michael Lang" <micklang at gmail.comwrote in message
news:es**************@TK2MSFTNGP02.phx.gbl...
>I'm adding checkbox controls to a panel in a post back, I then have a
second post back in which I attempt to process the checkbox controls
however they seem to have disappeared off the panel. The following code
demonstrates what I'm trying to do.

Can anyone explain why there is no checkbox control on the panel when
btnTwo is clicked?

default.aspx:----------------------------------------------------------------------------------------------

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"
Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Panel ID="pnlTest" runat="server"></asp:Panel>
<asp:Button ID="btnOne" runat="server" Text="Next>"
OnClick="btnOne_Click" />
<asp:Button ID="btnTwo" runat="server" Text="Save" Visible
="false" OnClick="btnTwo_Click" />
<br />
<asp:Label ID="Label1" runat="server"
Text="Label"></asp:Label></div>
</form>
</body>
</html>

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

default.aspx.cs:--------------------------------------------------------------------------------------------

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}

protected void btnOne_Click(object sender, EventArgs e)
{
btnOne.Visible = false;
CheckBox chkTest = new CheckBox();
chkTest.ID = "m";
chkTest.Text = "CheckMe";
btnTwo.Visible = true;

pnlTest.Controls.Add(chkTest);
}
protected void btnTwo_Click(object sender, EventArgs e)
{
if (pnlTest.Controls.Count < 1)
{
Label1.Text = "Failed";
return;
}

Control control = pnlTest.FindControl("m");
CheckBox chkTest = control as CheckBox;
if (chkTest.Checked)
Label1.Text = "Worked";
}
}

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

Thanks in advance...

Michael


Dec 26 '06 #3
"Michael Lang" <micklang at gmail.comwrote in message
news:Ou**************@TK2MSFTNGP02.phx.gbl...
following code works...
protected void Page_Load(object sender, EventArgs e)
In which case, you're quite fortunate...

Generally speaking, in order to pretty much guarantee that such code will
work, you need to create the dynamic controls in Page_Init, not Page_Load...
Dec 26 '06 #4
This would be because viewstate is loaded after the init and before the
load.

OK so my code needs a little rework.

It makes it a bit of a chicken and egg problem when dealing with content
dynamically generated based on previous input from the user, especially if
you want this content to retain viewstate. I guess the answer is to persist
input from the user between requests.....

Hmm... I'm looking forward to the day I can suggest using XBAP instead of
Web Apps.

"Mark Rae" <ma**@markNOSPAMrae.comwrote in message
news:Oz*************@TK2MSFTNGP04.phx.gbl...
"Michael Lang" <micklang at gmail.comwrote in message
news:Ou**************@TK2MSFTNGP02.phx.gbl...
>following code works...
> protected void Page_Load(object sender, EventArgs e)

In which case, you're quite fortunate...

Generally speaking, in order to pretty much guarantee that such code will
work, you need to create the dynamic controls in Page_Init, not
Page_Load...

Dec 27 '06 #5
Michael Lang wrote:
This would be because viewstate is loaded after the init and before the
load.

OK so my code needs a little rework.

It makes it a bit of a chicken and egg problem when dealing with content
dynamically generated based on previous input from the user, especially if
you want this content to retain viewstate. I guess the answer is to persist
input from the user between requests.....

Hmm... I'm looking forward to the day I can suggest using XBAP instead of
Web Apps.

"Mark Rae" <ma**@markNOSPAMrae.comwrote in message
news:Oz*************@TK2MSFTNGP04.phx.gbl...
>"Michael Lang" <micklang at gmail.comwrote in message
news:Ou**************@TK2MSFTNGP02.phx.gbl...
>>following code works...
protected void Page_Load(object sender, EventArgs e)
In which case, you're quite fortunate...

Generally speaking, in order to pretty much guarantee that such code will
work, you need to create the dynamic controls in Page_Init, not
Page_Load...

This is incorrect, you don't need to manually recreate the dynamic
controls on postback to have them work. Instead use the LoadViewState
and SaveViewState methods to remember and create what your dynamic
controls are/were. Warning, this is add some viewstate weight.
Dec 28 '06 #6
"Joe (MCAD)" <jo***************@yahoo.comwrote in message
news:fR*****************@newssvr19.news.prodigy.co m...
Warning, this is add some viewstate weight.
That's the understatement of the year!

I've never used the LoadViewState and SaveViewState methods precisely
because of the ViewState bloat they cause...
Dec 28 '06 #7
I've not used these methods before. They appear to be used for customising
the processing of loading and saving the viewstate of a control. I'm not
sure exactly what you're proposing here or what alternative solution they
facilitate.

Can you elaborate a little? Perhaps with a code example.

"Joe (MCAD)" <jo***************@yahoo.comwrote in message
news:fR*****************@newssvr19.news.prodigy.co m...
Michael Lang wrote:
>This would be because viewstate is loaded after the init and before the
load.

OK so my code needs a little rework.

It makes it a bit of a chicken and egg problem when dealing with content
dynamically generated based on previous input from the user, especially
if you want this content to retain viewstate. I guess the answer is to
persist input from the user between requests.....

Hmm... I'm looking forward to the day I can suggest using XBAP instead of
Web Apps.

"Mark Rae" <ma**@markNOSPAMrae.comwrote in message
news:Oz*************@TK2MSFTNGP04.phx.gbl...
>>"Michael Lang" <micklang at gmail.comwrote in message
news:Ou**************@TK2MSFTNGP02.phx.gbl...

following code works...
protected void Page_Load(object sender, EventArgs e)
In which case, you're quite fortunate...

Generally speaking, in order to pretty much guarantee that such code
will work, you need to create the dynamic controls in Page_Init, not
Page_Load...


This is incorrect, you don't need to manually recreate the dynamic
controls on postback to have them work. Instead use the LoadViewState and
SaveViewState methods to remember and create what your dynamic controls
are/were. Warning, this is add some viewstate weight.


Dec 28 '06 #8
I've managed to move all my dynamically generated content to the page_init
as you've suggested so I've pretty much got this sorted. I'm only
continuing this for academic purposes. The ASP.NET lifecycle goes...

Init
Load ViewState
Load post back data from the form
Page_Load
Raise events due to post back data
Save ViewState
Render

I understand now creating the dynamic content in the page_load worked only
because of the type of controls I chose which seem to be processing data
posted back in the form in the Raise PostBack event phase which occurs after
the page_load. Some controls only process data posted in the form before
the page_load, in that case or if your dynamic content required viewstate
data then using the page_load isn't going to work.

I'm guessing if you had a scenario where your dynamically generated content
was based on data input from the user then you might opt to separate the
functionality into separate pages or use session state instead of ViewState
to keep state information about the content.

"Mark Rae" <ma**@markNOSPAMrae.comwrote in message
news:Oz*************@TK2MSFTNGP04.phx.gbl...
"Michael Lang" <micklang at gmail.comwrote in message
news:Ou**************@TK2MSFTNGP02.phx.gbl...
>following code works...
> protected void Page_Load(object sender, EventArgs e)

In which case, you're quite fortunate...

Generally speaking, in order to pretty much guarantee that such code will
work, you need to create the dynamic controls in Page_Init, not
Page_Load...

Dec 28 '06 #9
I've always avoided using ViewState all together hence a lot of the issues
we're discussing relating to the loading and saving of viewstate I've not
dealt with before, which also might explain my "Luck".

"Mark Rae" <ma**@markNOSPAMrae.comwrote in message
news:uU**************@TK2MSFTNGP02.phx.gbl...
"Joe (MCAD)" <jo***************@yahoo.comwrote in message
news:fR*****************@newssvr19.news.prodigy.co m...
>Warning, this is add some viewstate weight.

That's the understatement of the year!

I've never used the LoadViewState and SaveViewState methods precisely
because of the ViewState bloat they cause...

Dec 28 '06 #10
P.S

Can anyone give examples of controls which only load post back form data
before the page load ?
"Michael Lang" <micklang at gmail.comwrote in message
news:%2****************@TK2MSFTNGP04.phx.gbl...
I've managed to move all my dynamically generated content to the page_init
as you've suggested so I've pretty much got this sorted. I'm only
continuing this for academic purposes. The ASP.NET lifecycle goes...

Init
Load ViewState
Load post back data from the form
Page_Load
Raise events due to post back data
Save ViewState
Render

I understand now creating the dynamic content in the page_load worked only
because of the type of controls I chose which seem to be processing data
posted back in the form in the Raise PostBack event phase which occurs
after the page_load. Some controls only process data posted in the form
before the page_load, in that case or if your dynamic content required
viewstate data then using the page_load isn't going to work.

I'm guessing if you had a scenario where your dynamically generated
content was based on data input from the user then you might opt to
separate the functionality into separate pages or use session state
instead of ViewState to keep state information about the content.

"Mark Rae" <ma**@markNOSPAMrae.comwrote in message
news:Oz*************@TK2MSFTNGP04.phx.gbl...
>"Michael Lang" <micklang at gmail.comwrote in message
news:Ou**************@TK2MSFTNGP02.phx.gbl...
>>following code works...
>> protected void Page_Load(object sender, EventArgs e)

In which case, you're quite fortunate...

Generally speaking, in order to pretty much guarantee that such code will
work, you need to create the dynamic controls in Page_Init, not
Page_Load...


Dec 28 '06 #11
"Michael Lang" <micklang at gmail.comwrote in message
news:On**************@TK2MSFTNGP03.phx.gbl...
Can anyone give examples of controls which only load post back form data
before the page load ?
DropDownList.

In order for them to work properly across postback, their datasource must be
populated in Page_Init, otherwise their selected value will be lost.
Dec 28 '06 #12
My testing seems to suggest otherwise....

The following code does not lose the selected value. I think this is
because the dropdownlist fires the event selectedindexchanged after the page
load....

Try this code...

default.aspx:----------------------------------------------------------------------------

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"
Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Panel ID="pnlTest" runat="server"></asp:Panel>
<asp:Button ID="btnOne" runat="server" Text="Next>"
OnClick="btnOne_Click" />
<asp:Button ID="btnTwo" runat="server" Text="Save" Visible ="false"
OnClick="btnTwo_Click" />
<br />
<asp:Label ID="Label1" runat="server"
Text="Label"></asp:Label></div>
<asp:Label ID="Label2" runat="server"
Text="Label"></asp:Label></div>
</form>
</body>
</html>

Default.aspx.cs------------------------------------------------------------------------------

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Init(object sender, EventArgs e)
{

}

protected void Page_Load(object sender, EventArgs e)
{
if (btnTwo.Visible)
{
GenerateContent();
DropDownList dropTest = pnlTest.FindControl("n") as
DropDownList;
string sel = dropTest.SelectedValue;
}
}

private void GenerateContent()
{
CheckBox chkTest = new CheckBox();
chkTest.ID = "m";
chkTest.Text = "CheckMe";
pnlTest.Controls.Add(chkTest);

DropDownList dropDown = new DropDownList();
dropDown.ID = "n";
dropDown.Items.Add("Selection one");
dropDown.Items.Add("Selection two");
dropDown.Items.Add("Selection three");

pnlTest.Controls.Add(dropDown);
pnlTest.Controls.Add(chkTest);
}

protected override void RaisePostBackEvent(IPostBackEventHandler
sourceControl, string eventArgument)
{
base.RaisePostBackEvent(sourceControl, eventArgument);
}

protected void btnOne_Click(object sender, EventArgs e)
{
btnOne.Visible = false;
btnTwo.Visible = true;

GenerateContent();
}
protected void btnTwo_Click(object sender, EventArgs e)
{
if (pnlTest.Controls.Count < 1)
{
Label1.Text = "Failed";
return;
}

Control control = pnlTest.FindControl("m");
CheckBox chkTest = control as CheckBox;
if (chkTest.Checked)
Label1.Text = "Worked";

control = pnlTest.FindControl("n");
DropDownList dropTest = control as DropDownList;
Label2.Text = dropTest.SelectedValue;
}
}

"Mark Rae" <ma**@markNOSPAMrae.comwrote in message
news:ex**************@TK2MSFTNGP04.phx.gbl...
"Michael Lang" <micklang at gmail.comwrote in message
news:On**************@TK2MSFTNGP03.phx.gbl...
>Can anyone give examples of controls which only load post back form data
before the page load ?

DropDownList.

In order for them to work properly across postback, their datasource must
be populated in Page_Init, otherwise their selected value will be lost.

Dec 29 '06 #13

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

10
by: BBM | last post by:
Hi, I have been developing with C# User Controls and occasionally have a problem where I "lose" a control from the design surface of the User Control. The controls that I am using to build my...
3
by: Steve Drake | last post by:
All, I have a CONTROL that contains 1 control (Control ONE), the 1 control that it can contain 1 or 2 control (Control A and B). Control A, raises and event and Control ONE receives this event...
3
by: Ed Chiu | last post by:
Hi, I plan to use panel to store multiple HTML text in a web form page, here is the code snippet that add HTML into panel: Dim lit1 As New Literal lit1.Text = strHTML...
0
by: fwirtanen | last post by:
I am building a custom composite control consisting of two drop downs, with parent/child dependancy. The child dropdownlist is updated through client callback when the parent index changes. ...
9
by: Adrian Parker | last post by:
We have a website that works everywhere but on a few PCs on this one site.. Asp.Net 1.1 Server = Windows 2003 Client = XP In the web.config we use - cookieless="false" in the browser settings...
8
by: mark.norgate | last post by:
I've asked this question before, but still haven't solved it, so am asking again. I am programmatically adding a user control to the page in response to a button click. The user control consists...
0
by: Mr. SweatyFinger | last post by:
Failed to load viewstate. The control tree into which viewstate is being loaded must match the control tree that was used to save viewstate during the previous request. For example, when adding...
15
by: rizwanahmed24 | last post by:
Hello i have made a custom control. i have placed a panel on it. I want this panel to behave just like the normal panel. The problem i was having is that the panel on my custom control doesnt...
6
by: ree321 | last post by:
I have a linkbutton which is added to a column in a datagrid dynamically using a template I created. When I change the data in it by not databinding and then when I later retreive the data from the...
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...
0
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.