Make a control Readonly using the controls Collection

  • Thread starter Thread starter Guest
  • Start date Start date
G

Guest

Is it possible to iterate through all the controls collection and make the
textboxes alone as read only.I don't see a readonly property for the
Control.Can some one help me in this context?
I want to do something like this below.But I get a message Readonly is not
valid property.
foreach (Control ctl in pnlBenefits.Controls)
{
if (ctl is TextBox)
ctl.ReadOnly=false;
}
 
why dont you do a explicit typecast and then get its readonly property
foreach (Control ctl in pnlBenefits.Controls)
{
if (ctl is TextBox)
{
((TextBox)ctl).ReadOnly = false;
}
}

i think this should do the job
--

Regards,

Hermit Dave
(http://hdave.blogspot.com)
 
Hi Hermit Dave,

Thanks for you response.
This time it didn't error me out, but none of my text boxes is set to
readonly.
My text boxes are declared using System.Web.UI.WebControls.TextBox,Is it
considered of Type TextBox too while using the Controls iteration.

Thanks
GP
 
GP said:
Is it possible to iterate through all the controls collection and make the
textboxes alone as read only.I don't see a readonly property for the
Control.Can some one help me in this context?
I want to do something like this below.But I get a message Readonly is not
valid property.
foreach (Control ctl in pnlBenefits.Controls)
{
if (ctl is TextBox)
{
TextBox txt = (TextBox) ctl;
txt.ReadOnly=false;
}
}
 
Yeap unless you have another control with the name TextBox it should map to
System.Web.UI.WebControls.TextBox

Get into Debug mode. put in a break point and see if its getting executed.
also try setting Enabled property to false.

--

Regards,

Hermit Dave
(http://hdave.blogspot.com)
 
Thanks for your responses.
When I set to readonly it didn't work.Still I am able to edit the controls.
But when I set the control enabled=false.I see the text boxes disabled.
But I want the text box to be read only,so that I can get the values in the
viewstate.
foreach (Control ctl in pnlBenefits.Controls)
{
s= ctl.GetType().Name;
if (s == "TextBox")
{
((TextBox)ctl).ReadOnly = false;
}
}
}
Even I tried TextBox txt = (TextBox) ctl;
txt.ReadOnly=false;

Thanks
GP
 
i think it could be based on rendering of the textbox. at the end of the day
its the browser that acts on the html attribute in the element and makes it
readonly.
with enabled = false i think you cannot do anything with the instance. ie no
modifications cant even get the focus. you still have access to the object
and the viewstate etc from serverside. The enabled = false is only for
client side rendering.

--

Regards,

Hermit Dave
(http://hdave.blogspot.com)
 
Thanks for you answer
Hermit Dave said:
i think it could be based on rendering of the textbox. at the end of the day
its the browser that acts on the html attribute in the element and makes it
readonly.
with enabled = false i think you cannot do anything with the instance. ie no
modifications cant even get the focus. you still have access to the object
and the viewstate etc from serverside. The enabled = false is only for
client side rendering.

--

Regards,

Hermit Dave
(http://hdave.blogspot.com)
 
Hello John,

This may work too...

foreach (TextBox tb in pnlBenefits.Controls)
{
tb.ReadOnly = false;
}
 
I've done it today with a client script. You can place this snippet at the
botton of the page or within a funcion you call when you want. You can write
it in the aspx file or render it exactly where you want.

this is a sample, hope it helps:

<script language="javascript">
<!--
var inputs = document.getElementsByTagName("INPUT");
var selects = document.getElementsByTagName("SELECT");

for (var i = 0;i<inputs.length;i++)
{
if ( (inputs.type == "text") && (inputs.disabled) )
{

inputs.disabled = false;
inputs.readOnly = true;
inputs.className = "Normal";
inputs.tabIndex = -1;

}
}

for (var i = 0;i<selects.length;i++)
{
selects.className = "Normal";
selects.tabIndex = -1;
selects[1].readOnly = true;
}
//-->
</script>
 
Back
Top