Avatar billede anders_cp Nybegynder
07. august 2008 - 23:02 Der 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 ;)
Avatar billede softspot Forsker
07. august 2008 - 23:14 #1
Hvad med at lægge selve fill-koden i en funktion som du kalder fra FILL_Click og som du så kan kalde fra Page_Load...?
Avatar billede anders_cp Nybegynder
08. august 2008 - 13:43 #2
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 = "";

        protected void Page_Prerender(object sender, EventArgs e)
        {
            ActionMenu.Visible = Authorization.User.Add;


            SetFocus(TextBoxProducts);

            byte visible = byte.Parse(DropDownVisible.SelectedValue);

            if (Mode == Modes.Extra) // start condition
            {
                DropDownProductLine.Enabled = false;
                TextBoxProducts.Text = ""; LabelResult.Visible = false;
                GridProducts.Visible = false;

            }
            if (Mode == Modes.Extra2)
            {
                DropDownProductLine.Enabled = true;
                DropDownFamily.Enabled = true;
            }
        } // end Page_Prerender()

        protected void Page_Init(object sender, EventArgs e)
        {
            int productID = 0;
            if (!IsPostBack)
            {

               
                FillDropDownVendor(1, 0);
                FillDropDownProductLine(0);

                FillDropDownProductFamily(true, 0);

                Mode = Modes.Extra;
            }

            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";
                        }
                           
                    }
                    else
                        Page.Response.Redirect("Products.aspx");
                }
            }

        } // end Page_Init()

        protected void Page_Load(object sender, EventArgs e)
        {
            string menuName = Menus.GetMenuName(137);
            // chech access
            Menus.ValidateMenuAccess(134);

            SetTitle(menuName);
            LabelHeader.Text = menuName;

            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 FillDropDownVendor(byte visible, int productlineID)
        {
            DropDownVendor.Enabled = true;
            DropDownVendor.Visible = true;
            Logic.Vendors vendors = new ServicePartner.Logic.Vendors();
            DataSet dataset = vendors.GetAllVendors(visible);
            vendors = null;
            DataView dataView = dataset.Tables[0].DefaultView;
            DropDownVendor.DataSource = dataView;
           
            count = dataView.Count;
           
            DropDownVendor.DataTextField = "VendorName";
            DropDownVendor.DataValueField = "VendorID";
            dataView.Sort = "VendorName";

            DropDownVendor.DataBind();

            if (count < 1)
                DropDownVendor.Enabled = false;
            DropDownVendor.Items.Insert(0, new ListItem("Alle leverandører", "0"));

        } // end void FillDropDownVendor(byte)

        private void FillDropDownProductLine(short vendorID)
        {
            DropDownProductLine.Items.Clear();
            Logic.ProductLines productlines = new ServicePartner.Logic.ProductLines();
            DataSet dataset = productlines.GetProductLines(vendorID);
            productlines = null;

            DataView dataView = dataset.Tables[0].DefaultView;

            DropDownProductLine.DataSource = dataView;
            DropDownProductLine.DataTextField = "ProductLine";
            DropDownProductLine.DataValueField = "ProductLineID";
            dataView.Sort = "ProductLine";
            DropDownProductLine.DataBind();
            DropDownProductLine.Items.Insert(0, "Alle produktlinier");


        } // end void FillDropDownProductLine(byte, int, int)
       
        private void FillDropDownProductFamilyFromVendorID(short vendorid)
        {
            DropDownFamily.Items.Clear();
            Logic.ProductFamilies productfamilies = new ServicePartner.Logic.ProductFamilies();
            DataSet dataset = productfamilies.GetProductFamilyFromVendorid(vendorid);
            productfamilies = null;
            DataView dataView = dataset.Tables[0].DefaultView;
            DropDownFamily.DataSource = dataView;
            DropDownFamily.DataTextField = "ProductFamilyName";
            DropDownFamily.DataValueField = "ProductFamilyID";
            dataView.Sort = "ProductFamilyName";
            DropDownFamily.DataBind();
            DropDownFamily.Items.Insert(0, "Alle produktfamilier");
        }

        private void FillDropDownProductFamily(bool start, int productlineID)
        {
            DropDownFamily.Items.Clear();
            DropDownFamily.Visible = true;
            Logic.ProductFamilies productfamilies = new ServicePartner.Logic.ProductFamilies();
            DataSet dataset = productfamilies.GetProductFamiliesFromProductLineID(productlineID);
            // DataSet dataset = productfamilies.GetProductFamilyFromProducts(visible, productlineID, vendorID);
            productfamilies = null;
            DataView dataView = dataset.Tables[0].DefaultView;
            DropDownFamily.DataSource = dataView;

            DropDownFamily.DataTextField = "ProductFamilyName";
            DropDownFamily.DataValueField = "ProductFamilyID";
            dataView.Sort = "ProductFamilyName";
            DropDownFamily.DataBind();
           

            count = dataView.Count;
            if (count < 1)
                DropDownFamily.Enabled = false;
            if (start)
                DropDownFamily.Items.Insert(0, "Alle produktfamilier");
            else
                DropDownFamily.Items.Insert(0, "Alle produktfamilier");
        } // end void FillDropDownProductFamily(byte, int, int)

        protected void FillFromVisible(object sender, EventArgs e)
        {
            int selectedValueProductlineid = 0;
            int selectedValueFamilyID = 0;

            byte selectedValueVisible = byte.Parse(DropDownVisible.SelectedValue);
            if (DropDownProductLine.SelectedIndex != 0)
                selectedValueProductlineid = int.Parse(DropDownProductLine.SelectedValue);

            FillDropDownVendor(selectedValueVisible, selectedValueProductlineid);
           
        }

        protected void FillFromVendor(object sender, EventArgs e)
        {
            int selectedValueProductlineid = 0;
            int selectedValueFamilyID = 0;
            Mode = Modes.Extra2;
            byte selectedValueVisible = byte.Parse(DropDownVisible.SelectedValue);
           
            if (DropDownProductLine.SelectedIndex != 0)
                selectedValueProductlineid = int.Parse(DropDownProductLine.SelectedValue);
            if (DropDownFamily.SelectedIndex != 0)
                selectedValueFamilyID = int.Parse(DropDownFamily.SelectedValue);
            short selectedValueVendorID = short.Parse(DropDownVendor.SelectedValue);

            FillDropDownProductLine(selectedValueVendorID);
            FillDropDownProductFamilyFromVendorID(selectedValueVendorID);
        }

        protected void FillFromProductLine(object sender, EventArgs e)
        {
            int selectedValueProductlineid = 0; int selectedValueFamilyID = 0;
            byte selectedValueVisible = byte.Parse(DropDownVisible.SelectedValue);
            int selectedValueVendorID = int.Parse(DropDownVendor.SelectedValue);
            if (DropDownProductLine.SelectedIndex > 0)
                selectedValueProductlineid = int.Parse(DropDownProductLine.SelectedValue);
            if (DropDownFamily.SelectedIndex != 0)
                selectedValueFamilyID = int.Parse(DropDownFamily.SelectedValue);

            FillDropDownProductFamily(false, selectedValueProductlineid);
        }

        protected void LinkButtonSearch_Click(object sender, EventArgs e)
        {
            int selectedproductlineid = 0; int selectedproductfamilyid = 0;
            GridProducts.Visible = true; LabelResult.Visible = true;
           
            byte selectedValueVisible = byte.Parse(DropDownVisible.SelectedValue);
            if (DropDownProductLine.SelectedIndex != 0)
                selectedproductlineid = int.Parse(DropDownProductLine.SelectedValue);
            if (DropDownFamily.SelectedIndex > 0)
                selectedproductfamilyid = int.Parse(DropDownFamily.SelectedValue);
            int selectedvendorid = int.Parse(DropDownVendor.SelectedValue);
            string productSearch = TextBoxProducts.Text;



            Infostandard.Visible = false;

            if (productSearch == "")
                seekstring = true;
            else
                seekstring = false;
            if (selectedvendorid == 0)
                vendorname = "ALL";
            else
                vendorname = DropDownVendor.SelectedItem.ToString();

            FillDataGridProducts(productSearch, "ProductName", "ProductNameSort", "ASC", seekstring, selectedValueVisible, selectedvendorid, selectedproductlineid, selectedproductfamilyid);
        }

        protected void LinkButtonReset_Click(object sender, EventArgs e)
        {
            Mode = Modes.Extra;

            DropDownVisible.SelectedValue = "1";

            FillDropDownVendor(1, 0);

          FillDropDownProductLine(0);

            // bool start=true, int productlineid=0(ALL)
            FillDropDownProductFamily(true, 0);

        } // end LinkButtonReset_Click()


        protected void GridViewProducts_Sorting(object sender, GridViewSortEventArgs e)
        {
            string sortProducts = TextBoxProducts.Text;
            string sortVendor = DropDownVendor.SelectedItem.ToString();
            int selectedproductlineid = 0; int selectedproductfamilyid = 0;
           
            byte visible = byte.Parse(DropDownVisible.SelectedValue);

            if (DropDownProductLine.SelectedIndex > 0)
                selectedproductlineid = int.Parse(DropDownProductLine.SelectedValue);

            if (DropDownFamily.SelectedIndex > 0)
                selectedproductfamilyid = int.Parse(DropDownFamily.SelectedValue);
            int vendorid = int.Parse(DropDownVendor.SelectedValue);

            if (sortProducts == "")
                seekstring = true;
            else
                seekstring = false;
            if (DropDownVendor.SelectedIndex == 0) // All
                sortVendor = "ALL";
            if (DropDownVendor.SelectedIndex == (DropDownVendor.Items.Count - 1))
                sortVendor = "NULL";

            GridViewSortExpression = e.SortExpression;
            GridViewSortDirection = GetSortDirection();
           
            GridProducts.DataSource = SortDataTable(GridProducts.DataSource as DataTable);
            GridProducts.DataBind();

            FillDataGridProducts(sortProducts, "ProductNameSort", GridViewSortExpression, GridViewSortDirection,
                seekstring, visible, vendorid, selectedproductlineid, selectedproductfamilyid);
        } // end GridView

       

        private void FillDataGridProducts(string filter, string sort, string sortexpression,
            string sorttype, bool seekstring,
            byte visible, int vendorID, int productlineID, int productfamilyID)
        {


                Logic.Products products = new ServicePartner.Logic.Products();
                DataSet dataset = products.GetAllProductsFromSearch(visible, vendorID, productlineID, productfamilyID);

          if (productfamilyID == 0 && productlineID > 0)
                dataset = products.GetAllProductsWhereAllProductFamilySelected(visible, vendorID, productlineID, productfamilyID);


                products = null;


            DataView dataview = dataset.Tables[0].DefaultView;
            if (!seekstring) // seek-criterium
                dataview.RowFilter = "ProductName LIKE '%" + filter + "%'";

            switch (sortexpression)
            {
                case "ProductNameSort":
                    dataview.Sort = "ProductName " + sorttype;
                    break;
                case "VendorNameSort":
                    dataview.Sort = "VendorName " + sorttype;
                    break;
                case "ProductFamilyNameSort":
                    dataview.Sort = "ProductFamilyName " + sorttype;
                    break;
                case "ProductLineSort":
                    dataview.Sort = "ProductLine " + sorttype;
                    break;

                default:
                    break;
            }

            GridProducts.DataSource = dataview;
            GridProducts.DataBind();
            ushort count = (ushort)dataview.Count;
            FillResultStatus(count);
        }

        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)

        protected void GridProducts_RowDataBound(object sender, GridViewRowEventArgs e)
        {

            bool visible = false;
           
            Image visibleImage = new Image();
            visibleImage.ImageUrl = "~/graphic/eye.jpg";
            visibleImage.ToolTip = "Gør synlig";


            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                DataRowView dataRowView = (DataRowView)e.Row.DataItem;
                visible = Convert.ToBoolean(dataRowView["Visible"]);
                ushort productID = Convert.ToUInt16(dataRowView["ProductID"]);
               
                CheckBox checkBoxMark = (CheckBox)e.Row.FindControl("CheckBoxVisible");


                if (visible)
                {
                    visibleImage.ImageUrl = "~/graphic/eye.jpg";
                    visibleImage.ToolTip = "Gør usynlig";
                    //checkBoxMark.Checked = true;
                    //checkBoxMark.ToolTip = "Gør usynlig";
                }
                else
                {
                    visibleImage.ImageUrl = "~/graphic/eye_light.jpg";
                    visibleImage.ToolTip = "Gør synlig";
                    //checkBoxMark.Checked = false;
                    //checkBoxMark.ToolTip = "Synliggør";
                }

              e.Row.Cells[4].Controls.Add(visibleImage);

              e.Row.Cells[4].Attributes.Add("onClick","window.navigate('Products.aspx?updatevisible=true&visible="+!visible +"&ProductID="+productID+"')");

                e.Row.Attributes.Add("style", "cursor:hand");
                e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor = 'Silver'");
                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor = 'White'");
                e.Row.Cells[0].Attributes.Add("onClick", "window.navigate('Product.aspx?ProductID=" + productID + "')");
                e.Row.Cells[1].Attributes.Add("onClick", "window.navigate('Product.aspx?ProductID=" + productID + "')");
                e.Row.Cells[2].Attributes.Add("onClick", "window.navigate('Product.aspx?ProductID=" + productID + "')");
                e.Row.Cells[3].Attributes.Add("onClick", "window.navigate('Product.aspx?ProductID=" + productID + "')");
             
            }
        } // end GridProducts_RowDataBound()

       
        private string GetSortDirection()
        {
            switch (GridViewSortDirection)
            {
                case "ASC":
                    GridViewSortDirection = "DESC";
                    break;
                case "DESC":
                    GridViewSortDirection = "ASC";
                    break;
            }
            return GridViewSortDirection;
        } // end string GetSortDirection()

        private string GridViewSortDirection
        {
            get { return ViewState["SortDirection"] as string ?? "ASC"; }
            set { ViewState["SortDirection"] = value; }
        } // end string GridViewSortDirection

        private string GridViewSortExpression
        {
            get { return ViewState["SortExpression"] as string ?? string.Empty; }
            set { ViewState["SortExpression"] = value; }
        } // end string GridViewSortExpression

        protected DataView SortDataTable(DataTable dataTable)
        {
            if (dataTable != null)
            {
                DataView dataView = new DataView(dataTable);
                if (GridViewSortExpression != string.Empty)
                {
                    dataView.Sort = string.Format("{0} {1}", GridViewSortExpression, GetSortDirection());
                }
                return dataView;
            }
            else
            {
                return new DataView();
            }
        }

        private bool DeleteProduct(int productID)
        {
            Logic.Products products = new ServicePartner.Logic.Products();
            bool success = products.DeleteProducts(productID);
            products = null;
            return success;
        } // end DeleteProduct(int)

        public void testigen()
        {
            int selectedproductlineid = 0; int selectedproductfamilyid = 0;
            GridProducts.Visible = true; LabelResult.Visible = true;

            byte selectedValueVisible = byte.Parse(DropDownVisible.SelectedValue);
            if (DropDownProductLine.SelectedIndex != 0)
                selectedproductlineid = int.Parse(DropDownProductLine.SelectedValue);
            if (DropDownFamily.SelectedIndex > 0)
                selectedproductfamilyid = int.Parse(DropDownFamily.SelectedValue);
            int selectedvendorid = int.Parse(DropDownVendor.SelectedValue);
            string productSearch = TextBoxProducts.Text;

            Infostandard.Visible = false;

            if (productSearch == "")
                seekstring = true;
            else
                seekstring = false;
            if (selectedvendorid == 0)
                vendorname = "ALL";
            else
                vendorname = DropDownVendor.SelectedItem.ToString();

         
            FillDataGridProducts("", "ProductName", "ProductNameSort", "ASC", true,
                2, 20, 0, 0);

        }


        }

 
    }
}
Avatar billede softspot Forsker
09. august 2008 - 00:47 #3
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...(?)
Avatar billede anders_cp Nybegynder
09. august 2008 - 13:18 #4
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 ;)
Avatar billede meltinis Nybegynder
13. august 2008 - 01:03 #5
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 :)
Avatar billede anders_cp Nybegynder
09. april 2011 - 18:53 #6
Jeg tillader mig at lukke
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