Click here to Skip to main content
14,423,874 members
Rate this:
Please Sign up or sign in to vote.
See more: , +
Hi - I'm populating a gridview on the page load, in this grid there is an Edit button on each row which copies the data contents from the gridview into various controls (DropdownLists, textboxes) below the GV once clicked. Now any changes that are made to the data contents I want to save back to the DB and refresh the GV. The DataTextField value on the DDL is displaying the value that was in the GV but the DataValueField doesn't not seem to be updated because when I got to save any changes I've made to the textboxes my code is crashing because Convert.ToInt32(ddlHPType.SelectedValue) = "".

What do i need to do to set the DataValueField for the DDL when the GV Edit button is clicked?

my DDL is populated here:
protected void gvHeatPumpData_SelectedIndexChanged(object sender, EventArgs e)
        {
            //populate textboxes, ddl with values from select row in gvHeatPumpData
            ddlHPRange.SelectedItem.Text = gvHeatPumpData.Rows[gvHeatPumpData.SelectedIndex].Cells[2].Text;
            txtHPModelNumber.Text = gvHeatPumpData.Rows[gvHeatPumpData.SelectedIndex].Cells[3].Text;
            ddlHPType.SelectedItem.Text = gvHeatPumpData.Rows[gvHeatPumpData.SelectedIndex].Cells[4].Text;
            txtHPDimensions.Text = gvHeatPumpData.Rows[gvHeatPumpData.SelectedIndex].Cells[5].Text;
            ddlElectricalSupply.SelectedItem.Text = gvHeatPumpData.Rows[gvHeatPumpData.SelectedIndex].Cells[6].Text;
            txtHPVoltage.Text = gvHeatPumpData.Rows[gvHeatPumpData.SelectedIndex].Cells[7].Text;
            txtHPStartingCurrent.Text = gvHeatPumpData.Rows[gvHeatPumpData.SelectedIndex].Cells[8].Text;
            txtHPWeight.Text = gvHeatPumpData.Rows[gvHeatPumpData.SelectedIndex].Cells[9].Text;           
        }
Posted
Updated 22-Aug-12 4:50am
v2
Rate this:
Please Sign up or sign in to vote.

Solution 1

Are you populating the control in your postback ? if you populate it in your page load, that will reset the selected index. Don't use Convert.ToXXX. Using int.TryParse so you can deal with invalid values.
   
Comments
pmcm 22-Aug-12 10:57am
   
No I am initially populating my DDL control on the page load, should I be repopulating it upon postback?
Christian Graus 22-Aug-12 10:58am
   
You should popuate it in the prerender event, and not do it on postback. The page load occurs before events, and the prerender, afterwards. Are you sure it's not happening on postback, b/c if it is, that would explain it. Move it to the prerender event, that's where it belongs
Rate this:
Please Sign up or sign in to vote.

Solution 2

whenever I was populating the DDL with the GV row data I was doing:
ddlHPRange.SelectedItem.Text = gvHeatPumpData.Rows[gvHeatPumpData.SelectedIndex].Cells[2].Text;


I've amended this to be now
ddlHPRange.SelectedValue = gvHeatPumpData.DataKeys[gvHeatPumpData.SelectedIndex].Values["HeatPumpRangeID"].ToString();

and now the ID is not blank when I'm saving any updates
   

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)




CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100