Avatar billede ameq Nybegynder
28. juli 2006 - 13:30 Der er 9 kommentarer

Hjælp til server control

Hej
Jeg har lavet min egen server control men mangler lige et par ting.
1) Jeg har opbygget min server control ved hjælp en nolge placeholder og i den placeholder har jeg nolge checkboxe, så hvordan til går jeg de her checkbox nemste, skal jeg havde en event eller hvordan?
2) Være gang min control bliver "render" så kalder den mit business lag, hvordan undgår jeg det? Kan jeg gemme den i mit viewstats? og hvordan?
Avatar billede snepnet Nybegynder
28. juli 2006 - 13:37 #1
1)
Du kan udstille dem som properties på din kontrol - eller lave nogle properties der giver mening for kontrollen, og internt lade dem arbejde op imod dine checkboxe.
2)
Hvis du har kode i render der tilgår dit forretningslag vil det naturligvis ske ved hver rendering.
Hvorfor må den ikke gøre det hver gang?

Du kan eventuelt poste koden til kontrollen her - så har vi lidt at forholde os til.

Mvh
Avatar billede ameq Nybegynder
28. juli 2006 - 14:08 #2
1) Hvordan kan jeg gøre det... det kan jeg ik lige se..
2) Der er igengrund til at den skal lave database kald være gang den laver postback... Kan man ikke gemme kontrolen i viewstats?
Avatar billede snepnet Nybegynder
28. juli 2006 - 14:26 #3
hvis du har en checkbox hvor brugeren skal angive at han vil notificeres pr. email (for at tage et eksempel), kan du jo abstrahere lidt over det - og lavet noget i denne stil:

public bool NotifiByEmail
{
  get{return chkNotifyByEmail.Checked;}
  set{chkNotifyByEmail.Checked = value;}
}

Hvis det er en databundet kontrol du laver - så er der masser af vejledning til hvordan den slags bygges op:
http://www.google.dk/search?hl=da&q=asp.net+2.0+creating+a+databound+custom+control&btnG=Google-s%C3%B8gning&meta=

Men igen... Hvis du poster din kode er det nemmere at komme med bud.

Mvh
Avatar billede ameq Nybegynder
28. juli 2006 - 14:34 #4
1) Jeg har prøvet at lave en hashtabel hvor jeg ville smide et Id ind samt selve checkbox obj'et ind i, men jeg kan ikke rigtig se hvordan hashtabel kan opdag at en checkbox bliver checket for jeg vil helst ikke lave et postback/event på mine checkbox

Men kunne man løse det ved at lave en metode som looper alle min placeholders igennem også giver mig de checkede checkboxe? men som det ser ud nu bliver min control jo hele tiden loadet, så hvordan gemmer jeg "staten" på min chekcbox når der sker et postback... det er vel sådan set det jeg sprøg om i "2)" ?
Avatar billede snepnet Nybegynder
28. juli 2006 - 14:48 #5
Det vil den normalt gøre af sig selv, men det kommer an på hvordan du har lavet kontrollen... Det er derfor jeg spørger efter koden :o)
Kontroller gemmes aldrig i viewstate, så de skal indsættes hver gang uanset hvad.
Mvh
Avatar billede ameq Nybegynder
28. juli 2006 - 14:54 #6
så jeg skal kalde sin bus lag igen?
men hvilken del af min kode vil du havde?
Render metoden?
Avatar billede snepnet Nybegynder
28. juli 2006 - 15:33 #7
Nej - det skal du ikke nødvendigvis... Prøv det her meget simple eksempel. Bare så du kan få en idé om det.
For eksemplet kan du databinde til én bestemt type af data, hvilket ikke er den normale måde at gøre det på, men det er som sagt bare for at du kan få en idé om hvordan det kan skrues sammen.

// En kontrol:
public class SimpleDataboundControl : WebControl, INamingContainer
{
    protected TextBox m_Text = new TextBox();
    protected CheckBox m_Checked = new CheckBox();
    protected Button m_Action = new Button();
    protected Data m_DataSource;

    public Data DataSource
    {
        get { return m_DataSource; }
        set { m_DataSource = value; }
    }

    protected override void CreateChildControls()
    {
        Controls.Add(m_Text);
        Controls.Add(m_Checked);
        Controls.Add(m_Action);

        base.CreateChildControls();
    }

    public override void DataBind()
    {
        if (m_DataSource == null)
            throw new ApplicationException("no data to bind to");

        m_Text.Text = m_DataSource.Text;
        m_Checked.Checked = m_DataSource.Checked;

        base.DataBind();
    }
}

// en dataklasse
public class Data
{
    private string m_Text;
    private bool m_Checked;

    public string Text
    {
        get { return m_Text;}
        set { m_Text = value;}
    }

    public bool Checked
    {
        get { return m_Checked;}
        set { m_Checked = value;}
    }

    public Data()
    {
        m_Checked = false;
        m_Text = "Default Text";
    }
}

// noget kode på en form der sætter den ind:
protected void Page_Load(object sender, EventArgs e)
{
    SimpleDataboundControl kontrol = new SimpleDataboundControl();
    form1.Controls.Add(kontrol);
    if (!IsPostBack)
    {
        Data data = new Data();
        kontrol.DataSource = data;
        DataBind();
    }
}

Du må spørge hvis der er noget omkring koden.

Mvh
Avatar billede ameq Nybegynder
28. juli 2006 - 15:38 #8
yes jeg vil kigge på det, måske først på mandag...
Men så mange gang tak
Avatar billede snepnet Nybegynder
28. juli 2006 - 15:51 #9
Det var så lidt :o)
Mvh
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

IT-JOB

Netcompany A/S

Managing Architect

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Chef til stor applikationstransformation i Forsvaret

KMD A/S

DevOps Engineer

Aller Media A/S

Developer