Avatar billede torotune Nybegynder
29. januar 2007 - 14:31 Der er 9 kommentarer og
1 løsning

Gruppere elementer/servercontrols

Hej,

Jeg er sikker på dette er muligt, men ved ikke helt hvordan. Kan jeg, hvis jeg har forskellige tabeller på min side med tekstboxe og andre servercontrols, så tilføje de forskellige komponenter til "grupper" eller noget lignende. Og så i en event sige f.eks.

group1.visible = False

Ligesom man kan smide det i en Panel og så sige panel1.visible = false. I mit tilfælde ligger det forskellige bare spredt på siden, så jeg kan ikke komme det i et panel.
Avatar billede xguy Nybegynder
29. januar 2007 - 15:32 #1
For at skjule flere kontroller af gangen, er du nok nødt til at placere dem inden for et Panel eller et View.
Men hvis de er spredt ud over siden, kan jeg godt se problemet.

Du kan evt. lave noget med en liste hvor du parer et kontrol ID med et gruppenavn, og så lave nogle metoder der tager et gruppenavn som parameter, og løber listen af kontroller i den gruppe igennem.
Avatar billede torotune Nybegynder
30. januar 2007 - 14:53 #2
Hej - okay, den med listen lyderlidt komplex. Kan man egentlig ikke bare sætte ID og runat="server" på sine table eller td og så sige td1.visible="false"?
Avatar billede xguy Nybegynder
30. januar 2007 - 15:23 #3
Øh jo, men du sagde at kontrollerne var spredt ud over siden?
Avatar billede torotune Nybegynder
30. januar 2007 - 15:49 #4
Jo, de ligger spredt/ugrupperet i forhold til deres kategori, men allesammen inden for en td i en tabel.
Avatar billede xguy Nybegynder
30. januar 2007 - 16:07 #5
Ok. Så kan du jo også ligge dem i et Panel?
(Det er der naturligvis ingen grund til hvis du allerede har det hele i en <td>.)
Avatar billede torotune Nybegynder
30. januar 2007 - 16:31 #6
Ja, jeg kan godt lægge det i et Panel, men så skal jeg have mange panels på siden, det er det jeg vil undgå. Altså at lave dette for hver:

Pan1Kategori2.visible = false
Pan2Kategori2.visible = false
Pan3Kategori2.visible = false
Pan4Kategori2.visible = false

Pan1Kategori3.visible = true
Pan2Kategori3.visible = true
Pan3Kategori3.visible = true
Pan4Kategori3.visible = true

osv.

Hvis man bare kunne tildele en td eller et panel en bestemt gruppering og så sige
group1.visible = False
Avatar billede snepnet Nybegynder
30. januar 2007 - 19:09 #7
Hvis du vil lave en generel løsning - så kunne du lave en extender kontrol der kunne udvide standard kontrollerne med muligheden for at give dem f.eks. et VisibilityGroupId - og så kunne du sætte noget Show/Hide funktionalitet på extenderen. På den måde kunne du benytte den i designeren.

Det kan også laves med en liste som allerede nævnt, men det giver dig ikke designermuligheden.

Mvh
Avatar billede snepnet Nybegynder
30. januar 2007 - 19:25 #8
Listemodellen kunne du lave som noget i denne stil (ikke at jeg tror det giver dig så rasende meget, men det kan da være det er lidt rarere på den måde).

public class VirtualPanel
{
    private Dictionary<string, List<Control>> groupsAndControls;

    public VirtualPanel()
    {
        groupsAndControls = new Dictionary<string, List<Control>>();
    }

    public void Add(string groupName, Control control)
    {
        if(!(groupsAndControls.ContainsKey(groupName)))
        {
            groupsAndControls.Add(groupName, new List<Control>());
        }
        if (!(groupsAndControls[groupName].Contains(control)))
        {
            groupsAndControls[groupName].Add(control);
        }
    }

    public void Remove(string groupName, Control control)
    {
        if (!(groupsAndControls.ContainsKey(groupName)))
            return;
        if (groupsAndControls[groupName].Contains(control))
        {
            groupsAndControls[groupName].Remove(control);
        }
    }

    public void Show(string groupName)
    {
        foreach (WebControl c in groupsAndControls[groupName])
        {
            c.Visible = true;
        }
    }

    public void Hide(string groupName)
    {
        foreach (WebControl c in groupsAndControls[groupName])
        {
            c.Visible = false;
        }
    }
}

Du skal jo så proppe de kontroller du vil arbejde med ind i listen - du kan have sådan en her på din page-klasse:

private VirtualPanel grouper = new VirtualPanel();

Og smide de kontroller du vi arbejde med ind i listen:
grouper.Add("g1", TextBox1);
grouper.Add("g1", Button1);
grouper.Add("g2", Button2);

Og du kan så lave en
grouper.Show("g1");
og
grouper.Hide("g2);
Og den slags.

Du kan også basere det på WebControls istedet - så får du muligheder som:
c.Style[HtmlTextWriterStyle.Visibility] = "visible";
istedet for c.Visible = true;

Men hvis du bedst kan lide den sidste - skulle du nok overveje at lave det hele clientside.

Mvh
Avatar billede torotune Nybegynder
11. november 2007 - 02:53 #9
Hej Snepnet,

Jeg vil gerne sige undskyld for den sene respons, jeg kan bruge din løsning, men kom lige væk fra den da jeg havde travlt.. Det er super du gad at udspecificere den så meget. Smid gerne et svar her :-)
Avatar billede torotune Nybegynder
22. marts 2008 - 10:43 #10
Jeg bliver nødt til at lukke ned her. Men skriv hvis du vil have points...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester