07. august 2008 - 23:02Der er
5 kommentarer og 1 løsning
autoklikke knap
Hej Hvordan kan jeg få klikket på en knap når siden loader? Jeg har lavet en knap som bl.a. udfylder et DataGrid. Denne knap vil jeg gerne aktivere automatisk ved page_load:
if (Request.QueryString.HasKeys()) { ArrayList keys = new ArrayList(); foreach (string key in Request.QueryString.Keys) keys.Add(key); if (keys.Contains("updatevisible")) {
testknap.Click += new System.EventHandler(FILL_Click);
}
Kodestumpen virker IKKE. Men jeg håber den giver en idé om hvad jeg ønsker ;)
Hej Jeg har forsøgt at kalde en funktion som du siger
if (keys.Contains("updatevisible")) testigen();
, men uden held. Jeg tror det må være noget med postback, page_load, page_rerender osv. Men kan ikke gennemskue hvad der nøjagtigt er galt. Det er lidt svært at vise hvad der kan være galt uden at hælde en masse kode i hovedet på dig - jeg beklager, men ser ikke anden løsning til at få hjælp,
Det er funktionen: protected void GridProducts_RowDataBound(object sender, GridViewRowEventArgs e) at jeg ved tryk på række nr. 4: e.Row.Cells[4].Attributes.Add("onClick","window.navigate('Products.aspx?updatevisible=true&visible="+!visible +"&ProductID="+productID+"')"); ønsker at der skal udføres noget, testigen()
here it goes...
public partial class Products : Web.UI.Page { private int count = 0; private bool seekstring = false; public string vendorname = "";
if (Request.QueryString.HasKeys()) { ArrayList keys = new ArrayList(); foreach (string key in Request.QueryString.Keys) keys.Add(key); if (keys.Contains("Confirm")) { if (keys.Contains("ProductID")) productID = int.Parse(Request.QueryString["ProductID"]); bool delete = bool.Parse(Request.QueryString["Confirm"]); if (delete) { Infostandard.Visible = true;
if (DeleteProduct(productID)) { Infostandard.Text = "Produktet er blevet slettet"; } else { Infostandard.Text = "Der opstod en fejl - Produktet er IKKE blevet slettet"; }
if (Request.QueryString.HasKeys()) { ArrayList keys = new ArrayList(); foreach (string key in Request.QueryString.Keys) keys.Add(key); if (keys.Contains("updatevisible")) { testigen(); } } } // end Page_Load
private void FillResultStatus(ushort rowCount) { switch (rowCount) { case 0: LabelResult.Text = "Der blev ikke fundet nogle produkter med teksten <b>" + TextBoxProducts.Text + "</b>."; break; case 1: LabelResult.Text = "Der blev fundet ét produkt."; break; default: LabelResult.Text = "Der blev fundet " + rowCount + " produkter."; break; } } // end void FillResultStatus(ushort)
Jeg er bange for, at jeg ikke kan gennemskue hvad problemet er, da jeg ikke er nok inde i eventflow for en side i ASP.NET. Mit forslag var givet ud fra en generel betragtning om, at det måtte være mere oplagt, at lægge koden i en funktion og kalde den på load-tidspunktet og når brugeren rent faktisk selv aktiverer knappen.
Må jeg i øvrigt foreslå, at du bruger
Request.QueryString["updatevisible"]
til at checke værdien af den querystring-variabel, frem for den konstruktion du har lavet...(?)
Jeg forstår heller ikke hvorfor jeg ikke bare kan lægge koden ind i en funktion.
Jeg bruger: keys.Contains("updatevisible") for at se om brugeren har ønsket en ændring af Visible. Det ønsker han når han trykker her: e.Row.Cells[4].Attributes.Add("onClick","window.navigate('Products.aspx?updatevisible=true&visible="+!visible +"&ProductID="+productID+"')");
Meningen er så at jeg skal opdatere databasen ved hvert tryk og returnere et opdateret gridview til ham. Når jeg skal hente indholdet af html-strengen, vil jeg (i en funktion) bruge din foreslåede konstruktion: bool visible = Request.QueryString["updatevisible"]
men mit store problem er at returnere det updaterede gridview, som i al sin enkelthed burde kunne klares ved at køre funktionenen sidst i min kode public void testigen(), hvor FillDataGridProducts("", "ProductName", "ProductNameSort", "ASC", true, 2, 20, 0, 0); er et eksempel på "hardcoded" parametre.
Jeg har sat pointene op, så håber jeg måske, der er en som kan tage sig tid til at gennemskue problemet ;)
Nu er ASP.NET jo ikke designet til at lave redirects eller i dette tilfælde window.navigate. Har du overvejet at lave et hidden field som indeholder dit productID og lade knappen ændrer værdien af denne og derefter få koden til at tjekke efter denne værdi? Det virker lidt som om du arbejder på klassisk ASP metoden :) Ved godt dette ikke svarer på dit spørgsmål, men det er bare en kommentar. Har du overvejet om det skyldes at din kode først bliver kørt efter Page_load dvs. efter at dit GridView er bind'et? Jeg er heller ikke 100% inde i eventflowet :)
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.