Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > ASP .Net Building Controls > Readonly Checkbox?

Reply
Thread Tools

Readonly Checkbox?

 
 
John Kievlan
Guest
Posts: n/a
 
      07-29-2003
Well, I'm sure you guys know that the ASP.NET Checkbox
control doesn't have a Readonly property. I'm writing an
application where I need it to have, that is, I want to
be able to set the Checked property in code, but if the
user clicks on it, the checkbox won't change.

Now, I'll admit I truly don't know how to do this. I can
easily write a control where I can't set the Checked
property in code, as follows:

'--------- Begin Code --------------
<DefaultProperty("Checked"), ToolboxData("<{0}:CB
runat=server></{0}:CB>")> Public Class CB
Inherits System.Web.UI.WebControls.CheckBox

Dim _readonly As Boolean

<Bindable(True), Category("Appearance"), DefaultValue
(False)> Overrides Property [Checked]() As Boolean
Get
Return MyBase.Checked
End Get

Set(ByVal Value As Boolean)
If Not _readonly Then
MyBase.Checked = Value
End If
End Set
End Property

<Bindable(True), Category("Appearance"), DefaultValue
(False)> Property [Readonly]() As Boolean
Get
Return _readonly
End Get

Set(ByVal Value As Boolean)
_readonly = Value
End Set
End Property
End Class
'--------- End Code --------------

With that control, I can't set the Checked property in
code, but if I view a form with that control in my
browser and click on the checkbox, it checks or unchecks
as usual, which is exactly the opposite of the behavior
I'd like it to have.

Now I can't figure out how to get that functionality, or
indeed how to handle the event of the user clicking on
the control at all without posting the form back to the
server. I played with overriding the various Render
methods, but that got me nowhere.

The basic problem is that I have no clue how the control
is drawn as checked or unchecked when the user clicks it
on his/her browser. Apparently there's no postback (as I
would assume in any case), so there must be some code
that runs on the client side to handle it. Can I alter
that code? How do I get to it? Keep in mind that I want
this to be a server control, not a client control. I
really don't even need to mess with the Checked property
of the control -- if I could just prevent it from drawing
the checked/unchecked state when it's clicked, I will
have accomplished what I want, since my goal is to have a
control in which I can display boolean data without the
user having the ability to alter the visual state of the
control.

Anyone have any ideas? Thanks in advance.
 
Reply With Quote
 
 
 
 
Shawn B.
Guest
Posts: n/a
 
      07-29-2003
Either set Enabled=False (it'll be dim) or... in the render...

Attributes.Add("onClick", "this.checked=" + lcase(checked.tostring) + ";")

So that if it's enabled or disabled and you don't want it dim, it'll alsways
be the value that it started with.


That should do,
Thanks,
Shawn


"John Kievlan" <> wrote in message
news:03ff01c35617$b527d930$...
> Well, I'm sure you guys know that the ASP.NET Checkbox
> control doesn't have a Readonly property. I'm writing an
> application where I need it to have, that is, I want to
> be able to set the Checked property in code, but if the
> user clicks on it, the checkbox won't change.
>
> Now, I'll admit I truly don't know how to do this. I can
> easily write a control where I can't set the Checked
> property in code, as follows:
>
> '--------- Begin Code --------------
> <DefaultProperty("Checked"), ToolboxData("<{0}:CB
> runat=server></{0}:CB>")> Public Class CB
> Inherits System.Web.UI.WebControls.CheckBox
>
> Dim _readonly As Boolean
>
> <Bindable(True), Category("Appearance"), DefaultValue
> (False)> Overrides Property [Checked]() As Boolean
> Get
> Return MyBase.Checked
> End Get
>
> Set(ByVal Value As Boolean)
> If Not _readonly Then
> MyBase.Checked = Value
> End If
> End Set
> End Property
>
> <Bindable(True), Category("Appearance"), DefaultValue
> (False)> Property [Readonly]() As Boolean
> Get
> Return _readonly
> End Get
>
> Set(ByVal Value As Boolean)
> _readonly = Value
> End Set
> End Property
> End Class
> '--------- End Code --------------
>
> With that control, I can't set the Checked property in
> code, but if I view a form with that control in my
> browser and click on the checkbox, it checks or unchecks
> as usual, which is exactly the opposite of the behavior
> I'd like it to have.
>
> Now I can't figure out how to get that functionality, or
> indeed how to handle the event of the user clicking on
> the control at all without posting the form back to the
> server. I played with overriding the various Render
> methods, but that got me nowhere.
>
> The basic problem is that I have no clue how the control
> is drawn as checked or unchecked when the user clicks it
> on his/her browser. Apparently there's no postback (as I
> would assume in any case), so there must be some code
> that runs on the client side to handle it. Can I alter
> that code? How do I get to it? Keep in mind that I want
> this to be a server control, not a client control. I
> really don't even need to mess with the Checked property
> of the control -- if I could just prevent it from drawing
> the checked/unchecked state when it's clicked, I will
> have accomplished what I want, since my goal is to have a
> control in which I can display boolean data without the
> user having the ability to alter the visual state of the
> control.
>
> Anyone have any ideas? Thanks in advance.



 
Reply With Quote
 
 
 
 
John Kievlan
Guest
Posts: n/a
 
      07-30-2003

>-----Original Message-----
>Either set Enabled=False (it'll be dim) or... in the

render...

Yes, I know about that, that's what I've been doing, but
I don't like having it grayed out... it doesn't look
quite so neat... and organized... as I'd like it to

>Attributes.Add("onClick", "this.checked=" + lcase

(checked.tostring) + ";")
>
>So that if it's enabled or disabled and you don't want

it dim, it'll alsways
>be the value that it started with.


Thanks, friend! That did it! It works perfectly. My
code is now as follows:

Protected Overrides Sub Render(ByVal writer As
System.Web.UI.HtmlTextWriter)
If _readonly Then
MyBase.Attributes.Add
("onClick", "javascript:" & Me.ID & ".checked=" + LCase
(Checked.ToString) + ";")
End If
MyBase.Render(writer)
End Sub

That adds a SPAN element around the checkbox that
contains the onClick event. I added the "javascript:"
because I use javascript and vbscript both on this
particular form, and the default page language is
vbscript. "this.checked" doesn't work since it thinks
you're talking about the SPAN element, so I changed it to
use the ID of the control -- and it works great. A
readonly control can only be changed from code, a non-
readonly control can be changed both in code and by being
clicked.

Again, thanks.

--John
 
Reply With Quote
 
Shawn B.
Guest
Posts: n/a
 
      07-30-2003
You might also try

addattribute("onClick", "return false")


Thanks,
Shawn

"John Kievlan" <> wrote in message
news:0bd301c356a8$20002240$...
>
> >-----Original Message-----
> >Either set Enabled=False (it'll be dim) or... in the

> render...
>
> Yes, I know about that, that's what I've been doing, but
> I don't like having it grayed out... it doesn't look
> quite so neat... and organized... as I'd like it to
>
> >Attributes.Add("onClick", "this.checked=" + lcase

> (checked.tostring) + ";")
> >
> >So that if it's enabled or disabled and you don't want

> it dim, it'll alsways
> >be the value that it started with.

>
> Thanks, friend! That did it! It works perfectly. My
> code is now as follows:
>
> Protected Overrides Sub Render(ByVal writer As
> System.Web.UI.HtmlTextWriter)
> If _readonly Then
> MyBase.Attributes.Add
> ("onClick", "javascript:" & Me.ID & ".checked=" + LCase
> (Checked.ToString) + ";")
> End If
> MyBase.Render(writer)
> End Sub
>
> That adds a SPAN element around the checkbox that
> contains the onClick event. I added the "javascript:"
> because I use javascript and vbscript both on this
> particular form, and the default page language is
> vbscript. "this.checked" doesn't work since it thinks
> you're talking about the SPAN element, so I changed it to
> use the ID of the control -- and it works great. A
> readonly control can only be changed from code, a non-
> readonly control can be changed both in code and by being
> clicked.
>
> Again, thanks.
>
> --John



 
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
ASP.NET Readonly panel function with readonly checkbox, readonly radiobutton Jonathan Hyatt ASP .Net Web Controls 1 06-08-2004 07:42 PM
PropertyGrid - ReadOnly Dave Wurtz ASP .Net 2 11-14-2003 04:55 PM
Textbox - always in readonly mode (Popup generated) doug albright ASP .Net 0 08-30-2003 07:32 AM
REPOST: Column [blah] is readonly on Datagrid UpdateCommand event Learning SQL Server ASP .Net 2 08-07-2003 01:10 PM
Readonly checkbox in Datagrid andrei ASP .Net 0 07-30-2003 06:20 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57