Avatar billede clausjul Nybegynder
28. juni 2003 - 18:20 Der er 11 kommentarer og
1 løsning

Genbrug af funktion som styrer Controls

Jeg ønsker at følgende kodestump skal over i en method:
for (int i=0;i<dr.FieldCount;i++)
{
Control thisControl = FindControl(dr.GetName(i));
if (thisControl != null)
{
if (FindControl(dr.GetName(i)).GetType().Name.Equals("TextBox"))
{
((TextBox)FindControl(dr.GetName(i))).Text = dr[dr.GetName(i)].ToString();
}
if (FindControl(dr.GetName(i)).GetType().Name.Equals("Label"))
{
((Label)FindControl(dr.GetName(i))).Text = dr[dr.GetName(i)].ToString();
}

if (FindControl(dr.GetName(i)).GetType().Name.Equals("FCKeditor"))
{
((FCKeditor)FindControl(dr.GetName(i))).Value = dr[dr.GetName(i)].ToString();
}
if (FindControl(dr.GetName(i)).GetType().Name.Equals("RadioButtonList"))
{
((RadioButtonList)FindControl(dr.GetName(i))).SelectedValue = dr[dr.GetName(i)].ToString();
}
}
}

Jeg har lavet det sådan, fordi ID'erne i controls har det samme navn som db-felterne, så det er nemmere at tildele værdierne via denne ovenstående metode. Men jeg vil gerne have det over i en klasse CMSUtility.GetValues(ref Page,dr). Dog ser det ud til at Page ikke er det rette valg. Denne kode arver System.Web.UI.UserControl - men hvordan skal jeg kunne lave en ekstern metode, hvor object Page kommer med over og returner med værdierne til controls-felter?
Avatar billede quaser Nybegynder
28. juni 2003 - 20:26 #1
Fra en UserControl kan du få fat i en reference til Page...
Er det hvad du søger? Eller vil du have hele metoden?
Avatar billede clausjul Nybegynder
28. juni 2003 - 20:36 #2
Jeg har en usercontrol, som skal bruge en generisk metode. Den metode har jeg skitseret overfor. Jeg kan bare ikke finde ud af det. En del steder står der FindControl, men jeg prøvede med Page.FindControl og det virker ikke.
Avatar billede quaser Nybegynder
28. juni 2003 - 21:15 #3
Så den kode du har ovenfor virker og er en del af en UserControl.

Du vil gerne have smidt det ind i en generisk metode, som skal gøre brug af den usercontrol...

Eller er jeg bare ikke med?
Avatar billede clausjul Nybegynder
28. juni 2003 - 21:19 #4
Yep - lige præcis. Den stump kode optræder flere steder og det er jeg ikke interesseret i. Her snakker jeg genbrug. Men hvordan den usercontrol kan overføres til en C# fil og tilbage igen efter metoden har behandlet den.
Avatar billede quaser Nybegynder
28. juni 2003 - 21:28 #5
Hvis du vil kalde metoden fra page er det vel noget lignende

protected System.Web.UI.UserControl myControl;

public void metode{
  IDataReader myReader = fillReader();
  CMSUtility.GetValues( myReader, ref myControl );
}
Avatar billede clausjul Nybegynder
28. juni 2003 - 21:30 #6
object dr er en OdbcDataReader, så jeg er lidt i tvivl om fillReader()?
Avatar billede quaser Nybegynder
28. juni 2003 - 21:34 #7
Ligemeget om det er IDataReader eller OdbcDataReader.
fillReader() var bare for at illustrere at du skal ligge data i readeren først :)
Avatar billede clausjul Nybegynder
29. juni 2003 - 15:59 #8
I CMSUtility har jeg lavet det sådan:

public static void GetValues(OdbcDataReader dr, ref System.Web.UI.UserControl myControl)
        {
            dr.Read();
            for (int i=0;i<dr.FieldCount;i++)
            {
                UserControl thisControl = (UserControl)myControl.FindControl(dr.GetName(i));
                if (thisControl != null)
                {
                    if (myControl.FindControl(dr.GetName(i)).GetType().Name.Equals("TextBox"))
                    {
                        ((TextBox)myControl.FindControl(dr.GetName(i))).Text = dr[dr.GetName(i)].ToString();
                    }

                    if (myControl.FindControl(dr.GetName(i)).GetType().Name.Equals("Label"))
                    {
                        ((Label)myControl.FindControl(dr.GetName(i))).Text = dr[dr.GetName(i)].ToString();
                    }

                    if (myControl.FindControl(dr.GetName(i)).GetType().Name.Equals("FCKeditor"))
                    {
                        ((FCKeditor)myControl.FindControl(dr.GetName(i))).Value = dr[dr.GetName(i)].ToString();
                    }
                    if (myControl.FindControl(dr.GetName(i)).GetType().Name.Equals("RadioButtonList"))
                    {
                        ((RadioButtonList)myControl.FindControl(dr.GetName(i))).SelectedValue = dr[dr.GetName(i)].ToString();
                    }
                }
            }
        }

Men det virker ikke. Henter den via CMSUtility.GetValues(dr, ref myControl); Og myControl er en System.Web.UI.UserControl. Er der en fejl et eller andet sted?
Avatar billede quaser Nybegynder
29. juni 2003 - 17:27 #9
Siger den nogen fejl?

Men ud over det så kan jeg ikke huske hvad der bliver kørt først og om de textboxe og labels er lavet inden du kalder din metode.

Kalder du den i pageload?
Avatar billede clausjul Nybegynder
29. juni 2003 - 18:31 #10
Ja, det er i page_load

Og alle controls er på sin plads, men det smarte ved det er, at den fejler ikke, hvis der mangler en control. Fejlen er no reference to instance of object.
Avatar billede quaser Nybegynder
29. juni 2003 - 18:52 #11
Prøv at ligge kaldet i PreRender...

Tjek evt. http://www.15seconds.com/issue/020102.htm

Vær opmærksom på at jeg ikke er sikker på at det er det som er problemet.
Avatar billede clausjul Nybegynder
15. august 2003 - 10:30 #12
Lukkes, da jeg ikke er kommet videre med problemet og har givet op.. :-(
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