Avatar billede pumpin Nybegynder
07. maj 2006 - 11:17 Der er 22 kommentarer og
1 løsning

hvordan griber jeg det retuneret object?

godmorgen!

Jeg har i længer tid haft det samme tilbage vende problem når jeg har begivet mig ud i og lave classes, men nu har jeg besluttede at det skal der være en ende på..

hvis jeg laver en metode i en klasse som retunere en string eller en int så har jeg inted problem med at gribe den i en string variabel og bruge den i mit projekt.

Men når jeg bevæger mig over og evt. laver en HtmlTable og adder rows, celler og evt links til den så kan jeg ikke få den ud fra min klasse. Lad mig komme med et kode eksemple::

    public void ListFiles()
    {
        objDir = new DirectoryInfo(GetBaseDir());
        _Dir = @"userControls\";

        if(objDir.GetFiles("*.*").Length>0)
        {
            //opretter en tabel af navnet tbl og sætter skrift typen og størrelsen.
            Table tbl = new Table();
            tbl.Font.Name = "Verdena";
            tbl.Font.Size = FontUnit.Point(10);

            foreach(System.IO.FileInfo objFi in objDir.GetFiles("*.*"))
            {
                //opretter en ny row og tilføjer den til tablen tbl.
                TableRow tr = new TableRow();
                tbl.Rows.Add(tr);

                //opretter en celle og tilføjer den til min row tr.
                TableCell td1 = new TableCell();
                tr.Cells.Add(td1);
               
                //tager filnavnet på den fil som er i min foreacht lykke og stripper den for extension.
                //og tilføjer den lokale string variabel via en literalcontrol til min celle.
                _filename = objFi.Name.Substring(0, objFi.Name.IndexOf("."));
                td1.Controls.Add(new LiteralControl(_filename));

                //opretter en ny celle og tilføjer den til min row tr.
                TableCell td2 = new TableCell();
                tr.Cells.Add(td2);

                //laver et link og sætter url'en til mappen + det fulde filnavn. og tilføjer linket til celle2
                HyperLink link = new HyperLink();
                link.Text = "se fil";
                link.NavigateUrl = _Dir + objFi.Name;
                link.Target = "_blank";
                td2.Controls.Add(link);

                //laver en billedeknap fordi jeg skal bruge commandEvents skal det være en ServerControl.
                //command argument er det parameter som knappen overføre når der trykkes på den.
                //Command er det EVENT der bliver udført når man trykker på knapper der tilføjes en eventhandler som giver mulighed for at kalde en metode.
                ImageButton button = new ImageButton();
                button.ImageUrl = "t.jpg";
                button.AlternateText = "delete file";
                button.CommandArgument = objFi.Name;
                button.Command +=new CommandEventHandler(RemoveFile);
                td2.Controls.Add(button);


                PhUpload.Controls.Add(tbl);

            }//end foreacht

        }//end if

    }//end methode

Her har jeg en metode som lister de filer som ligger i en mappe, dette virker også godt men, jeg har været nødsaget til at ligge den i en usercontrol så jeg kan adde min table til en Placeholder. Nu vil jeg så gerne have at jeg kan ligge den her metode ind i en klasse og så oprette en new instance af det og gribe min table og vise den på brugerens skærm.

jeg har selv rodet med noget i den her dur

MyClass mitnavn = new MyClass();
placeholder.controls.add(mitnavn.Listfiles());

men uden held!! er der ikke en venlig sjæld der kan hjælpe mig af med dette problem

På forhånd mange tak
Avatar billede pumpin Nybegynder
07. maj 2006 - 11:18 #1
undskyld kommentarne i mit script.. men hvis jeg ikke laver dem så kan jeg ikk huske det om 1 måned :)
Avatar billede dr_chaos Nybegynder
07. maj 2006 - 11:24 #2
public void ListFiles()
    {
        objDir = new DirectoryInfo(GetBaseDir());
        _Dir = @"userControls\";
//opretter en tabel af navnet tbl og sætter skrift typen og størrelsen.
            Table tbl = new Table();
            tbl.Font.Name = "Verdena";
            tbl.Font.Size = FontUnit.Point(10);
        if(objDir.GetFiles("*.*").Length>0)
        {
           

            foreach(System.IO.FileInfo objFi in objDir.GetFiles("*.*"))
            {
                //opretter en ny row og tilføjer den til tablen tbl.
                TableRow tr = new TableRow();
                tbl.Rows.Add(tr);

                //opretter en celle og tilføjer den til min row tr.
                TableCell td1 = new TableCell();
                tr.Cells.Add(td1);
             
                //tager filnavnet på den fil som er i min foreacht lykke og stripper den for extension.
                //og tilføjer den lokale string variabel via en literalcontrol til min celle.
                _filename = objFi.Name.Substring(0, objFi.Name.IndexOf("."));
                td1.Controls.Add(new LiteralControl(_filename));

                //opretter en ny celle og tilføjer den til min row tr.
                TableCell td2 = new TableCell();
                tr.Cells.Add(td2);

                //laver et link og sætter url'en til mappen + det fulde filnavn. og tilføjer linket til celle2
                HyperLink link = new HyperLink();
                link.Text = "se fil";
                link.NavigateUrl = _Dir + objFi.Name;
                link.Target = "_blank";
                td2.Controls.Add(link);

                //laver en billedeknap fordi jeg skal bruge commandEvents skal det være en ServerControl.
                //command argument er det parameter som knappen overføre når der trykkes på den.
                //Command er det EVENT der bliver udført når man trykker på knapper der tilføjes en eventhandler som giver mulighed for at kalde en metode.
                ImageButton button = new ImageButton();
                button.ImageUrl = "t.jpg";
                button.AlternateText = "delete file";
                button.CommandArgument = objFi.Name;
                button.Command +=new CommandEventHandler(RemoveFile);
                td2.Controls.Add(button);


                PhUpload.Controls.Add(tbl);

            }//end foreacht

        }//end if
return tbl;

    }//end methode
Avatar billede dr_chaos Nybegynder
07. maj 2006 - 11:24 #3
hov
public void ListFiles()
    {
skal ændres til
public Table ListFiles()
    {
Avatar billede dr_chaos Nybegynder
07. maj 2006 - 11:25 #4
Dette skal fjernes:
PhUpload.Controls.Add(tbl);
Avatar billede pumpin Nybegynder
07. maj 2006 - 11:35 #5
DONE. men hvordan får jeg den vist på min aspx fil??

opretter et nyt instance af min class...og hvad så mere :D
Avatar billede pumpin Nybegynder
07. maj 2006 - 11:40 #6
Main objMain = new Main();

Table tja = objMain.ListFiles();

PlaceHolder1.Controls.Add(tja);

Dette er mit bedste bud men det virker ikke.. men jeg kan mærke jeg er tæt på og det driver mig til vandvid at jeg ikke kan få det til at virke
Avatar billede dr_chaos Nybegynder
07. maj 2006 - 11:49 #7
hvilke fejl får du ?
Avatar billede dr_chaos Nybegynder
07. maj 2006 - 11:57 #8
hvordan ser din class ud ?
Avatar billede pumpin Nybegynder
07. maj 2006 - 12:20 #9
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;
using System.IO;

/// <summary>
/// Summary description for Upload
/// </summary>
public class Upload
{

    public string _Dir = String.Empty;
    public string _filename = String.Empty;

    protected DirectoryInfo objDir;
    protected FileInfo objFi;

    public Upload()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    public Table ListFiles()
    {
        objDir = new DirectoryInfo(GetBaseDir());
        _Dir = @"userControls\";

        if (objDir.GetFiles("*.*").Length > 0)
        {
            //opretter en tabel af navnet tbl og sætter skrift typen og størrelsen.
            Table tbl = new Table();
            tbl.Font.Name = "Verdena";
            tbl.Font.Size = FontUnit.Point(10);

            foreach (System.IO.FileInfo objFi in objDir.GetFiles("*.*"))
            {
                //opretter en ny row og tilføjer den til tablen tbl.
                TableRow tr = new TableRow();
                tbl.Rows.Add(tr);

                //opretter en celle og tilføjer den til min row tr.
                TableCell td1 = new TableCell();
                tr.Cells.Add(td1);

                //tager filnavnet på den fil som er i min foreacht lykke og stripper den for extension.
                //og tilføjer den lokale string variabel via en literalcontrol til min celle.
                _filename = objFi.Name.Substring(0, objFi.Name.IndexOf("."));
                td1.Controls.Add(new LiteralControl(_filename));

                //opretter en ny celle og tilføjer den til min row tr.
                TableCell td2 = new TableCell();
                tr.Cells.Add(td2);

                //laver et link og sætter url'en til mappen + det fulde filnavn. og tilføjer linket til celle2
                HyperLink link = new HyperLink();
                link.Text = "se fil";
                link.NavigateUrl = _Dir + objFi.Name;
                link.Target = "_blank";
                td2.Controls.Add(link);

                //laver en billedeknap fordi jeg skal bruge commandEvents skal det være en ServerControl.
                //command argument er det parameter som knappen overføre når der trykkes på den.
                //Command er det EVENT der bliver udført når man trykker på knapper der tilføjes en eventhandler som giver mulighed for at kalde en metode.
                ImageButton button = new ImageButton();
                button.ImageUrl = "t.jpg";
                button.AlternateText = "delete file";
                button.CommandArgument = objFi.Name;
                button.Command += new CommandEventHandler(RemoveFile);
                td2.Controls.Add(button);


               

            }//end foreacht
            return tbl;
        }//end if

    }//end methode


    protected void RemoveFile(object sender, CommandEventArgs e)
    {
        //Finder den fil som image button sender vidre i comandArgument og sletter den.
        string path = @"userControls\";
        FileInfo objFi = new FileInfo(Server.MapPath(path + e.CommandArgument.ToString()));

        objFi.Delete();
    }
    //Lir!!! kan bare håndkode det ind i stedet!
    protected string GetBaseDir()
    {
        string BaseDir = Server.MapPath(@"userControls\");
        return BaseDir;
    }
}
Avatar billede pumpin Nybegynder
07. maj 2006 - 12:21 #10
jeg får ingen fejl den viser bare ikke noget
Avatar billede dr_chaos Nybegynder
07. maj 2006 - 12:23 #11
prøv lige med:

public Table ListFiles()
    {
        objDir = new DirectoryInfo(GetBaseDir());
        _Dir = GetBaseDir();

        if (objDir.GetFiles("*.*").Length > 0)
        {
            //opretter en tabel af navnet tbl og sætter skrift typen og størrelsen.
            Table tbl = new Table();
            tbl.Font.Name = "Verdena";
            tbl.Font.Size = FontUnit.Point(10);

            foreach (System.IO.FileInfo objFi in objDir.GetFiles("*.*"))
            {
                //opretter en ny row og tilføjer den til tablen tbl.
                TableRow tr = new TableRow();
                tbl.Rows.Add(tr);

                //opretter en celle og tilføjer den til min row tr.
                TableCell td1 = new TableCell();
                tr.Cells.Add(td1);

                //tager filnavnet på den fil som er i min foreacht lykke og stripper den for extension.
                //og tilføjer den lokale string variabel via en literalcontrol til min celle.
                _filename = objFi.Name.Substring(0, objFi.Name.IndexOf("."));
                td1.Controls.Add(new LiteralControl(_filename));

                //opretter en ny celle og tilføjer den til min row tr.
                TableCell td2 = new TableCell();
                tr.Cells.Add(td2);

                //laver et link og sætter url'en til mappen + det fulde filnavn. og tilføjer linket til celle2
                HyperLink link = new HyperLink();
                link.Text = "se fil";
                link.NavigateUrl = _Dir + objFi.Name;
                link.Target = "_blank";
                td2.Controls.Add(link);

                //laver en billedeknap fordi jeg skal bruge commandEvents skal det være en ServerControl.
                //command argument er det parameter som knappen overføre når der trykkes på den.
                //Command er det EVENT der bliver udført når man trykker på knapper der tilføjes en eventhandler som giver mulighed for at kalde en metode.
                ImageButton button = new ImageButton();
                button.ImageUrl = "t.jpg";
                button.AlternateText = "delete file";
                button.CommandArgument = objFi.Name;
                button.Command += new CommandEventHandler(RemoveFile);
                td2.Controls.Add(button);


             

            }//end foreacht
            return tbl;
        }//end if

    }//end methode
Avatar billede dr_chaos Nybegynder
07. maj 2006 - 12:24 #12
og
Table tja = objMain.ListFiles();
Response.Write(tja.Rows.Count+"lalalala")
Avatar billede pumpin Nybegynder
07. maj 2006 - 12:25 #13
Jeg har rigtig mange classes som bygger på HtmlControls fordi jeg synes det er skide smart at lave menuer på den måde. men når jeg ikke kan returnere den så er der ikke meget sjov ved det :D så håber virkelig vi kan løse problemmet dr_chaos.. fordi det burde kunne lade sig gøre ellers er det lidt nitten.. er van til fra php bare at retunere en string med HTML.. det ser bare så grimt ud :D
Avatar billede pumpin Nybegynder
07. maj 2006 - 12:38 #14
så får jeg 1lalala ud !

men når jeg copy/paster dit tilrettede Listfiles metode ind i min class så siger den at listfiles ikke retuner en value ?? og Server.MapPath kan ikke bruges ???
Avatar billede pumpin Nybegynder
07. maj 2006 - 12:41 #15
Nu har jeg den !!! sry sry sry... det var mig jesus nu skal der rodes med classes... men lige på falde rebet hvorfor brokker min class sig over at listfiles ikke retunere en value og hvorfor kan jeg pludselig ikke bruge Server.MapPath i den ???
Avatar billede dr_chaos Nybegynder
07. maj 2006 - 12:48 #16
brug:
HttpContext.Current.Server.MapPath
istedet for.
Avatar billede dr_chaos Nybegynder
07. maj 2006 - 12:48 #17
du skal danne din table i starten af metoden:
public Table ListFiles()
    {
        objDir = new DirectoryInfo(GetBaseDir());
        _Dir = GetBaseDir();
//opretter en tabel af navnet tbl og sætter skrift typen og størrelsen.
            Table tbl = new Table();
            tbl.Font.Name = "Verdena";
            tbl.Font.Size = FontUnit.Point(10);

        if (objDir.GetFiles("*.*").Length > 0)
        {
         
            foreach (System.IO.FileInfo objFi in objDir.GetFiles("*.*"))
            {
                //opretter en ny row og tilføjer den til tablen tbl.
                TableRow tr = new TableRow();
                tbl.Rows.Add(tr);

                //opretter en celle og tilføjer den til min row tr.
                TableCell td1 = new TableCell();
                tr.Cells.Add(td1);

                //tager filnavnet på den fil som er i min foreacht lykke og stripper den for extension.
                //og tilføjer den lokale string variabel via en literalcontrol til min celle.
                _filename = objFi.Name.Substring(0, objFi.Name.IndexOf("."));
                td1.Controls.Add(new LiteralControl(_filename));

                //opretter en ny celle og tilføjer den til min row tr.
                TableCell td2 = new TableCell();
                tr.Cells.Add(td2);

                //laver et link og sætter url'en til mappen + det fulde filnavn. og tilføjer linket til celle2
                HyperLink link = new HyperLink();
                link.Text = "se fil";
                link.NavigateUrl = _Dir + objFi.Name;
                link.Target = "_blank";
                td2.Controls.Add(link);

                //laver en billedeknap fordi jeg skal bruge commandEvents skal det være en ServerControl.
                //command argument er det parameter som knappen overføre når der trykkes på den.
                //Command er det EVENT der bliver udført når man trykker på knapper der tilføjes en eventhandler som giver mulighed for at kalde en metode.
                ImageButton button = new ImageButton();
                button.ImageUrl = "t.jpg";
                button.AlternateText = "delete file";
                button.CommandArgument = objFi.Name;
                button.Command += new CommandEventHandler(RemoveFile);
                td2.Controls.Add(button);


           

            }//end foreacht
           
        }//end if
return tbl;
    }//end methode
Avatar billede pumpin Nybegynder
07. maj 2006 - 13:02 #18
Suvenrænt !!! mange tak mester ! ! kast et svar :D
Avatar billede dr_chaos Nybegynder
07. maj 2006 - 13:04 #19
svar :)
Avatar billede pumpin Nybegynder
07. maj 2006 - 14:01 #20
lige en sidste en så skaljeg nok lade dig være :D..

Nu hvor jeg har lagt den over i en class og skal bruge en fileupload.saveAs()til at gemme filen på serveren kan jeg så ikke bare oprette en Public fileupload; og bruge dens saveAs

også en metode som medtar et parameter som er filename på den fil der skal gemmes  ?
Avatar billede dr_chaos Nybegynder
07. maj 2006 - 14:02 #21
Det er nok mere den stream som kommer du skal sende med som parameter.
Avatar billede pumpin Nybegynder
07. maj 2006 - 14:14 #22
det lyder pænt indviklede :) men du har ret fordi den upload ikke noget :D

men mange tak for hjælpen
Avatar billede dr_chaos Nybegynder
07. maj 2006 - 14:18 #23
np :)
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