07. maj 2006 - 11:17Der 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
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);
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;
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; } }
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);
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
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 ???
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 ???
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);
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 ?
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.