Hoe een gridview correct te verzamelen?

Dus ik heb een pagina die een gridview bevat, de girdview haalt zijn gegevens uit een objectdatasource via de webservice. Het bevat 2 kolommen met itemtemplates. voor elk van deze sjablonen in de bewerkmodus, bevatten vervolgkeuzelijsten die zijn opgeslagen onder edititemtemplates.

Alles lijkt goed te werken, behalve wanneer ik in de bewerkingsmodus ben en de update-gebeurtenis start, gooien mijn dropdownlijsten een nulreferentiefout. bij nader onderzoek lijkt dit te zijn veroorzaakt doordat het codebehind denken niet in staat is de dropdroplists te lokaliseren. Verder lijkt het er bij het graven door de debugger dat de dropdownlists niet eens lijken te bestaan. Hoewel, wanneer je op mijn pagina bent, de dropdownlijsten worden weergegeven in de bewerkingsmodus, maar de codebehandeling kan die besturingselementen niet vinden.

Wat ik vermoed is dat ik de gridview bindt op de verkeerde locatie, of dat de binding zelf niet goed wordt gedaan.

Wat ik zou willen weten is, waarom zou deze situatie zich voordoen en hoe kan ik dit oplossen? Ik zou het ook op prijs stellen als iemand me kon laten weten of ik mijn bindingen goed doe of niet.

Hieronder vind je mijn code voor zowel de gridview als de codebehoindheid.

Rasterweergave:


            
            
                
                    
                        
                    
                    
                        
                        
                    
                
                
                
                
                    
                        
                                                    
                    
                    
                                                                      
                            
                            
                        
                    
                
                
                    
                        
                                                    
                    
                    
                                                                      
                            
                            
                        
                    
                
                
                    
                
            
            
            
            
            
     

Code achter:

Pagieladingsmethode:

        /// 
    /// Handles the Load event of the Page control.
    /// 
    /// The source of the event.
    /// The  instance containing the event data.
    protected void Page_Load(object sender, EventArgs e)
    {
        logger.Debug("Entering Page_Load");
        Boolean loginRequired = true;
       //If no login is required set the session variable and proceed to the main page.
        string str = ConfigurationManager.AppSettings["i0"] as string;
        if (!string.IsNullOrEmpty(str))
        {
            string flag = MyExtensions.Decrypt(str, true);
            if ("false".Equals(flag, StringComparison.InvariantCultureIgnoreCase))
                loginRequired = true;
            else
            {
                loginRequired = false;

               //User logged in so check the permissions.
                UserInfo user = (UserInfo)Session[Constants.LOGGEDINUSER];
                if (null == user)
                    loginRequired = true;
                else
                {
                    string groupId = user.GroupId;
                    if (string.IsNullOrEmpty(groupId))
                        loginRequired = true;
                    else if (!"Admins".Equals(user.GroupId) && !"Engineer".Equals(user.GroupId))
                        loginRequired = true;
                }
            }
        }
        if (!Page.IsPostBack)
        {
            Control ctrl = MyExtensions.FindControlRecursive(this, "CommissioningLoginPanel");
            Panel loginPanel = null;
            Panel contentPanel = null;

            if (null != ctrl)
            {
                loginPanel = (Panel)ctrl;
                ctrl = MyExtensions.FindControlRecursive(this, "CommissioningPanel");
                if (null != ctrl)
                    contentPanel = (Panel)ctrl;
            }

            if (loginRequired)
            {
                if (null != loginPanel)
                    loginPanel.Visible = true;
                if (null != contentPanel)
                    contentPanel.Visible = false;
            }
            else
            {
                if (null != loginPanel)
                    loginPanel.Visible = false;
                if (null != contentPanel)
                    contentPanel.Visible = true;
            }                
        }
        BindData();
        logger.Debug("Leaving Page_Load");
    }

gridview-evenementen:

        /// 
    /// Handles the Click event of the update button under edit in the gridview control.
    /// 
    /// The source of the event.
    /// The  instance containing the event data.
    protected void GridViewHolder_Updating(object sender, GridViewUpdateEventArgs e) 
    {
        logger.Debug("Entering GridviewHolder_Updating");
        int machineid;
        string machineid1;
        string machineTypeid;
        string machineModelid;

        //retrieve and set the data
        GridViewHolder.EditIndex = e.RowIndex;

        try
        {

            GridViewRow row = (GridViewRow)GridViewHolder.Rows[e.RowIndex];
            TextBox mID = row.FindControl("MachineIDText") as TextBox;
            DropDownList mType = row.FindControl("MachineTypeDropDown") as DropDownList;
            DropDownList mModel = row.FindControl("MachineModelDropDown") as DropDownList;

            machineid1 = mID.Text;
            machineid = Convert.ToInt32(machineid1);
            machineTypeid = mType.SelectedValue;
            machineModelid = mModel.SelectedValue;


            try
            {
                if (machineTypeid != "empty" || machineModelid != "empty")
                {
                    if (machineTypeid != "empty")
                    {
                        inputsService.UpdateMachineTypes(machineid, machineTypeid);
                    }
                    if (machineModelid != "empty")
                    {
                        inputsService.UpdateMachineModels(machineid, machineModelid);
                    }
                    UpdateSucceed.Visible = true;
                    logger.Debug("Updating - Database successfully updated!");
                }
                else
                {
                    UpdateFail.Visible = true;
                    logger.Debug("Updating - Database had no data selected to be updated.");
                }
            }
            catch (Exception ex)
            {
                logger.ErrorFormat("Updating - Failed to update the table, ex = {0}", ex);
            }
        }
        catch (Exception ex)
        {
            logger.ErrorFormat("Updating.gathering page controls - Failed to update the table, ex = {0}", ex);
        }
        logger.Debug("Leaving GridViewHolder_Updating");
    }

    /// 
    /// Handles the Click event of the cancel button under edit in the gridview control.
    /// 
    /// The source of the event.
    /// The  instance containing the event data.
    protected void GridViewHolder_Canceling(object sender, GridViewCancelEditEventArgs e)
    {
        logger.Debug("Entering GridViewHolder_Canceling");
        //reset the edit index
        GridViewHolder.EditIndex = -1;
        //Bind data to GridViewHolder
        BindData();
        logger.Debug("Leaving GridViewHolder_Canceling");
    }

    /// 
    /// Handles the Click event of the cancel button under edit in the gridview control.
    /// 
    /// The source of the event.
    /// The  instance containing the event data.
    protected void GridViewHolder_Editing(object sender, GridViewEditEventArgs e)
    {
        logger.Debug("Entering GridViewHolder_Editing");        
        //set the edit index to a new value
        GridViewHolder.EditIndex = e.NewEditIndex;
        //Bind data to gridviewholder
        BindData();
        logger.Debug("Leaving GridViewHolder_Editing");
    }

BindData-methode:

 private void BindData()
    {
        logger.Debug("Entering DataBind");
        GridViewHolder.DataSource = Session["MachineTable"];
        GridViewHolder.DataBind();
        logger.Debug("Leaving DataBind");
    }

alle hulp of suggesties worden zeer op prijs gesteld.

Dank je

1

2 antwoord

Heb je geprobeerd om EnableViewState = "True" in je gridview in te stellen?

Wanneer de berichtterugkeer plaatsvindt zonder dat de door de weergavestatus ingeschakelde asp zou niet weten wat de status van de dropdownlist was toen de postback plaatsvond.

1
toegevoegd
Misschien als u de gegevens alleen koppelt als! Page.IsPostback en de viewstate ingeschakeld houdt?
toegevoegd de auteur plntxt, de bron
Sorry dat ik niet meer kan helpen. Klinkt als een probleem met de levenscyclus van de pagina, dus het is misschien de moeite van het bekijken waard. msdn.microsoft.com/en-us/library/ms178472.aspx Veel succes.
toegevoegd de auteur plntxt, de bron
Ik heb, maar wanneer ik doe gooit het een mislukking om viewstate fout te laden bij het betreden van de bewerkingsmodus en proberen bij te werken of te annuleren. het vermeldt iets over de bedieningsboom die wordt geladen, moet overeenkomen met de besturingsstructuur die werd gebruikt om de eerste weergavestaat op te slaan
toegevoegd de auteur James213, de bron
laat me dat proberen en ik bel je terug, bedankt
toegevoegd de auteur James213, de bron
nee, met enableviewstate aan, het gooit die fout en stapt zelfs helemaal niet in de code om te updaten en te annuleren
toegevoegd de auteur James213, de bron

Kunt u proberen de eigenschap DataKeyNames van de rasterweergave in te stellen op de id van de tabel waarin u de gridview met bijvoorbeeld

1
toegevoegd
Oké, ik heb het geprobeerd, maar het leek niets opvallends te zijn, tenzij ik er iets mee mis. Ik zet de datakeynames = naar de primaire sleutel van de tabel waarmee ik probeer te werken
toegevoegd de auteur James213, de bron