[ASP.NET] Alle Textboxes read-only

Pagina: 1
Acties:

  • chiels
  • Registratie: Juni 2005
  • Laatst online: 02-12-2023
Hallo,

Ik heb ongeveer 40 textboxes en wil op een simpele manier de read-only property wijzigen. Is het mogelijk om deze textboxes in een group/panel te plaatsen zodat je op een snelle manier alle textboxes van read-only kan halen?

Default moeten ze read-only zijn behalve als de administrator inlogt (windows authentication). Ik vind het een omslachtige manier om elke textbox aan te spreken, helemaal met het vooruitzicht dat er wel eens velden bij kunnen komen.

asp:panel biedt deze optie niet en kan tevens geen handige truc vinden dmv google. Iemand een idee?

Thanks.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Door de ControlCollection loopen van de control waar die textboxen opstaan; checken of de huidige control een textbox is, en zoja, deze disablen.
code:
1
2
3
4
5
6
foreach( Control c in this.Controls )
{
     Textbox b = c as Textbox;

     if( b != null ) b.Enabled = true;
}

Zoiets ongeveer.

https://fgheysels.github.io/


  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
@whoami moet daar niet iets bij dat je checkt of de control wel een textbox is en dan niet enabled op true, maar readonly property op true zetten :)

  • BM
  • Registratie: September 2001
  • Laatst online: 09:01

BM

Moderator Spielerij
Die check zit er toch in?
Indien de control c geen Textbox is, zal b null zijn, en daar checked de code van whoami al op.

Xbox
Even the dark has a silver lining | I'm all you can imagine times infinity, times three


  • chiels
  • Registratie: Juni 2005
  • Laatst online: 02-12-2023
Ik heb nu dit:

code:
1
2
3
4
5
6
Dim ctr As Control 
    For Each ctr In Me.Controls 
    If TypeOf ctr Is TextBox Then 
        cType(ctr, TextBox).ReadOnly = True 
    End If 
    Next ctr


Hij geeft verder geen errors maar werkt niet. De textboxes staan binnen een <asp:datalist> en ik denk dat daar het probleem zit. Ik heb de functie ook gekoppeld aan de onLoad van de datalist maar ook dat werkt niet. Nog even verder prutsen.......

  • Arethusa
  • Registratie: December 2003
  • Laatst online: 07:54

Arethusa

Niet die server

chiels schreef op donderdag 26 april 2007 @ 12:13:
Ik heb nu dit:

code:
1
2
3
4
5
6
Dim ctr As Control 
    For Each ctr In Me.Controls 
    If TypeOf ctr Is TextBox Then 
        cType(ctr, TextBox).ReadOnly = True 
    End If 
    Next ctr


Hij geeft verder geen errors maar werkt niet. De textboxes staan binnen een <asp:datalist> en ik denk dat daar het probleem zit. Ik heb de functie ook gekoppeld aan de onLoad van de datalist maar ook dat werkt niet. Nog even verder prutsen.......
Misschien moet je eerst de controls in de datalist benaderen en dan kijken of hij readonly is of niet.

I've been mad for fucking years, absolutely years, been over the edge for yonks.
Vinyl: Discogs


  • chiels
  • Registratie: Juni 2005
  • Laatst online: 02-12-2023
Arethusa schreef op donderdag 26 april 2007 @ 12:15:
[...]


Misschien moet je eerst de controls in de datalist benaderen en dan kijken of hij readonly is of niet.
Had ik ook al geprobeerd. Vind het maar vreemd dat hier geen standaard functie voor is en dat je alle controls moet gaan scannen.

code:
1
2
3
4
5
6
7
8
9
10
Public Sub TxtReadOnly(ByVal sender As Object, ByVal e As EventArgs)
    Dim ctr As Control 
    For Each ctr In dgKlant.Controls
        If TypeOf ctr Is TextBox Then
            if cType(ctr, TextBox).ReadOnly = False then
                cType(ctr, TextBox).ReadOnly = True 
            end if
        End If 
    Next ctr 
End Sub

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
chiels schreef op donderdag 26 april 2007 @ 12:21:
[...]


Had ik ook al geprobeerd. Vind het maar vreemd dat hier geen standaard functie voor is en dat je alle controls moet gaan scannen.
Tja, programmeren is meestal wel wat meer dan de juiste 'standaard-functie' opzoeken, en wat componenten aan elkaar plakken...

Ben je zeker dat je door de goede control-collection loopt ? Misschien moet je wel eens kijken of iedere control geen ContainerControl is, en zoja, door de control-collection van die container doorlopen. (recursief)

https://fgheysels.github.io/


  • LaptopRookie
  • Registratie: Januari 2005
  • Laatst online: 26-04 20:04
moet het niet

ctr.readonly = true

zijn?...aangezien je al loopt binnen de collectie en al een pointer naar het object hebt?...sommige properties zijn alleen tijdens design-time uit te zetten en niet bij run-time....ben er al een tijdje uit, hope this helps.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:30

gorgi_19

Kruimeltjes zijn weer op :9

Wanneer voer je die functie uit, wordt deze niet teniet gedaan door een andere method en roep je hem uberhaupt aan?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 29-11 15:35
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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 Button1_Click(object sender, EventArgs e)
    {
        foreach (Control c in form1.Controls)
        {
            if (c is TextBox) ((TextBox)c).Enabled = false;
        }
    }
}


Net ff dit gemaakt en dit werkt gewoon.

Je moet wel form1.Controls doen, niet this.Controls.

[edit]

Ik zie dat je daar dgKlant hebt staan. Is dat een DataGrid?
In dat geval moet je een eventhandler maken bij de RowDataBound.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
protected void dgKlant_RowDataBound(object sender, GridViewRowEventArgs e)
{
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
        TextBox textBox = e.Row.FindControl("TextBoxName") as TextBox;
        if (textBox != null) textBox.Enabled = false;

// of om alle Textboxes in de row te disablen:
         foreach (Control c in e.Row.Controls) {
           if (c is TextBox) ((TextBox)c).Enabled = false;
           }

        }
}

[ Voor 30% gewijzigd door Mastermind op 26-04-2007 21:45 ]


  • chiels
  • Registratie: Juni 2005
  • Laatst online: 02-12-2023
Iedereen bedankt voor de tips. De post van mastermind heeft mij in de goede richting geholpen ;) Ik heb het d.m.v. de OnItemDataBound property van de datalist control opgelost:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub Item_Bound(sender As Object, e As DataListItemEventArgs)
    
    If e.Item.ItemType = ListItemType.Item Or _
             e.Item.ItemType = ListItemType.AlternatingItem Then

     Dim ctr as Control
     For Each ctr in e.Item.Controls 
        If TypeOf ctr is Textbox Then
            cType(ctr, Textbox).ReadOnly = False
        End if
      next ctr
        
    End If
    
    End Sub
Pagina: 1