krishb591993
krishb591993

Reputation: 303

Dropdown values being reset to initial value upon submit

I have used the following code to insert the selected item from dropdownlist into the sql database table. It runs, but the selected item for dropdownlist 1, 2, 5 and 6 always stores the first item in the dropdown list. Here's my code

 protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        //populate gridview
        TextBox2.Focus();
        string selectquery = "select [TASK ID],[NATURE OF PAYMENT],[DESC],FREQUENCY,PREALERT1,PREALERT2,OWNER,[VERIFICATION OWNER],(case when STATUS='1' then 'Active' when STATUS='0' then 'Inactive' ELSE 'UNKNOWN' END)as STATUS,ID from Compliance_Tracker.dbo.tasklistManager;";
        obj6.PopulateGrid(GridView1, selectquery);
    }
    {
        // populate dropdownlist for prealert 1
        for (int i = 0; i <= 30; i++)
        {
            DropDownList3.Items.Insert(i, new ListItem((i + 1).ToString(), (i + 1).ToString()));
        }
        DropDownList3.DataBind();
    }
    {
        // populate dropdown list for prealert 2
        for (int j = 0; j <= 30; j++)
        {
            DropDownList4.Items.Insert(j, new ListItem((j + 1).ToString(), (j + 1).ToString()));
        }
        DropDownList4.DataBind();
    }
    {
        //populate dropdown for Nature of Payment
        string query = "select * from Compliance_Tracker.dbo.paymentNatureMaster where STATUS='1';";
        string columnname = "DESC";
        string datavaluefield="DESC";
        obj6.PopulateCombo(DropDownList1,query,columnname,datavaluefield);
    }
    {
        //populate dropdown for frequency
        string query1 = "select * from Compliance_Tracker.dbo.frequencyMaster where STATUS='1';";
        string columnname1 = "DESC";
        string datavaluefield1 = "DESC";
        obj6.PopulateCombo(DropDownList2,query1, columnname1,datavaluefield1);
    }
    {
        //populate dropdown for owner
        string query2 = "select * from Compliance_Tracker.dbo.ownerMaster where STATUS='1';";
        string columnname2 = "NAME";
        string datavaluefield2 = "NAME";
        obj6.PopulateCombo( DropDownList5,query2, columnname2,datavaluefield2);
    }
    {
        //populate dropdown for owner verification
        string query3 = "select * from Compliance_Tracker.dbo.verificationMaster where STATUS='1'";
        string columnname3 = "NAME";
        string datavaluefield3 = "NAME";
        obj6.PopulateCombo(DropDownList6,query3, columnname3,datavaluefield3);
    }

mybutton click event sorry i forgot to add the main thing

 protected void Button1_Click(object sender, EventArgs e)
{
    string query = "insert into Compliance_Tracker.dbo.tasklistManager([NATURE OF PAYMENT],[DESC],FREQUENCY,PREALERT1,PREALERT2,OWNER,[VERIFICATION OWNER],STATUS)values('" + DropDownList1.SelectedValue.ToString() + "','" + TextBox2.Text + "','" + DropDownList2.SelectedItem.Text + "','" + DropDownList3.SelectedItem.Text + "','" + DropDownList4.SelectedItem.Text + "','" + DropDownList5.SelectedItem.Text + "','" + DropDownList6.SelectedItem.Text + "','" + DropDownList7.SelectedValue + "');";
    obj6.ExecuteScalar(query);
    string selectquery = "select [TASK ID],[NATURE OF PAYMENT],[DESC],FREQUENCY,PREALERT1,PREALERT2,OWNER,[VERIFICATION OWNER],(case when STATUS='1' then 'Active' when STATUS='0' then 'Inactive' ELSE 'UNKNOWN' END)as STATUS,ID from Compliance_Tracker.dbo.tasklistManager;";
    obj6.PopulateGrid(GridView1, selectquery);
    TextBox2.Text = string.Empty;
    DropDownList7.SelectedItem.Text = "Active";
}
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) { }
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) { }
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) { }
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) { }
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) { }

}

this is my html code

<%@ Page Title="" Language="C#" MasterPageFile="~/LoggedInMasterPage.master" AutoEventWireup="true" CodeFile="TaskList.aspx.cs" Inherits="TaskList" %>

TASKLIST MANAGER TABLE




       <asp:TemplateField HeaderText="TASK ID" SortExpression="TASK ID" HeaderStyle-BackColor="DarkGreen" HeaderStyle-ForeColor="White">
           <ItemTemplate>
               <asp:Label ID="TASKID" runat="server" Text='<%#Eval("[TASK ID]") %>' />
           </ItemTemplate>
       </asp:TemplateField>

       <asp:TemplateField HeaderText="NATURE OF PAYMENT" SortExpression="NATURE OF PAYMENT" HeaderStyle-BackColor="DarkGreen" HeaderStyle-ForeColor="White">
           <ItemTemplate>
               <asp:Label ID="NOP" runat="server" Text='<%#Eval("[NATURE OF PAYMENT]") %>' />
           </ItemTemplate>
           <EditItemTemplate>
               <asp:DropDownList runat="server" ID="dropdownnop"></asp:DropDownList>
           </EditItemTemplate>
       </asp:TemplateField>


        <asp:TemplateField HeaderText="DESC" HeaderStyle-BackColor="DarkGreen" HeaderStyle-ForeColor="White">
          <ItemTemplate>
          <asp:Label runat="server" ID="DESC" Text='<%#Eval("[DESC]") %>'/>
          </ItemTemplate>
          <EditItemTemplate>
         <asp:TextBox ID ="DESC" runat="server" Text='<%#Eval("[DESC]") %>'></asp:TextBox>
         <asp:RequiredFieldValidator ID="REQUIREDFIELDVALIDATORDESC" runat="server" ControlToValidate="DESC" ErrorMessage="FIELD CANNOT BE EMPTY"></asp:RequiredFieldValidator>
          </EditItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField HeaderText="FREQUENCY" HeaderStyle-BackColor="DarkGreen" HeaderStyle-ForeColor="White">
            <ItemTemplate>
                <asp:Label runat="server" ID="FREQUENCY" Text='<%#Eval("FREQUENCY") %>' />
            </ItemTemplate>
            <EditItemTemplate>
                <asp:DropDownList runat="server" ID="dropdownfreq"></asp:DropDownList>
            </EditItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField HeaderText="DUE DATE OF PAYMENT" HeaderStyle-BackColor="DarkGreen" HeaderStyle-ForeColor="White">
            <ItemTemplate>
                <asp:Label runat="server" ID="DDOP" Text='<%#Eval("PREALERT1") %>' />
            </ItemTemplate>
            <EditItemTemplate>
                <asp:DropDownList runat="server" ID="dropdownddop"></asp:DropDownList>
            </EditItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField HeaderText="DUE DATE OF SUBMISSION OF RETURN" HeaderStyle-BackColor="DarkGreen" HeaderStyle-ForeColor="White">
            <ItemTemplate>
                <asp:Label runat="server" ID="DDOSOR" Text='<%#Eval("PREALERT2") %>' />
            </ItemTemplate>
            <EditItemTemplate>
                <asp:DropDownList runat="server" ID="dropdownddosor"></asp:DropDownList>
            </EditItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField HeaderText="OWNER" HeaderStyle-BackColor="DarkGreen" HeaderStyle-ForeColor="White">
            <ItemTemplate>
                <asp:Label runat="server" ID="OWNER" Text='<%#Eval("OWNER") %>' />
            </ItemTemplate>
            <EditItemTemplate>
                <asp:DropDownList runat="server" ID="dropdownowner"></asp:DropDownList>
            </EditItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField HeaderText="VERIFICATION OWNER" HeaderStyle-BackColor="DarkGreen" HeaderStyle-ForeColor="White">
            <ItemTemplate>
                <asp:Label runat="server" ID="VO" Text='<%#Eval("[VERIFICATION OWNER]") %>' />
            </ItemTemplate>
            <EditItemTemplate>
                <asp:DropDownList runat="server" ID="dropdownvo"></asp:DropDownList>
            </EditItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField HeaderText="STATUS" HeaderStyle-BackColor="DarkGreen" HeaderStyle-ForeColor="White">
          <ItemTemplate>
          <asp:Label runat="server" ID="STATUS" Text='<%#Eval("STATUS") %>'/>
          </ItemTemplate>
          <EditItemTemplate>
          <asp:DropDownList runat ="server" ID="dropdownstatus">
              <asp:ListItem Text="Active" Value="1"></asp:ListItem>
              <asp:ListItem Text="Inactive" Value="0"></asp:ListItem>
              </asp:DropDownList>
          </EditItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField Visible="false" HeaderText="ID">
            <ItemTemplate>
            <asp:Label runat="server" ID="ID" Text='<%#Eval("ID") %>' />
            </ItemTemplate>
        </asp:TemplateField>

         <asp:TemplateField HeaderText="Action" HeaderStyle-BackColor="DarkGreen" HeaderStyle-ForeColor="White">
         <ItemTemplate>
         <asp:LinkButton ID="btnEdit" Text="Edit" runat="server" CommandName="Edit" />
         <asp:LinkButton ID="btnDelete" Text="Delete" runat="server" CommandName="Delete" />
         </ItemTemplate>
         <EditItemTemplate>
         <asp:LinkButton ID="btnUpdate" Text="Update" runat="server" CommandName="Update" />
         <asp:LinkButton ID="btnCancel" Text="Cancel" runat="server" CommandName="Cancel" />
         </EditItemTemplate> 
         </asp:TemplateField>
       </Columns>
        <PagerSettings FirstPageText="First" LastPageText="Last" Mode="NumericFirstLast" PageButtonCount="4" />
    </asp:GridView>

and here's my populatecombo code

 public bool PopulateCombo(DropDownList DDList, string strSQL, string DisMember, string ValMember)
    {
        SqlDataAdapter DAdpt = new SqlDataAdapter();
        DataSet DSet = new DataSet();
        try
        {
            if (Conn.State == ConnectionState.Closed)
                Conn.Open();
            DAdpt = new SqlDataAdapter(strSQL, Conn);
            DAdpt.Fill(DSet);
            DDList.DataSource = DSet.Tables[0];
            DDList.DataTextField = DisMember;
            DDList.DataValueField = ValMember;
            DDList.DataBind();
            return true;
        }
        catch (Exception Ex)
        {
            //return null;
            throw new Exception(Ex.Message);
        }
        finally
        {
            DAdpt.Dispose();
            DSet.Dispose();
            Conn.Close();
        }
    }

here is my executescalar function

 public object ExecuteScalar(string strSQL)
    {
        try
        {
            if (Conn.State == ConnectionState.Closed)
                Conn.Open();
            Comm = new SqlCommand(strSQL, Conn);
            return Comm.ExecuteScalar();
        }
        catch (Exception Ex)
        {
            //return null;
            throw new Exception(Ex.Message);
        }
        finally
        {
            Comm.Dispose();
            Conn.Close();
        }
    }

Upvotes: 2

Views: 1546

Answers (1)

Tanner
Tanner

Reputation: 22743

I think it's an issue in your Page_Load. You have check for if(!IsPostBack), and you have some code in braces after that:

if(!IsPostBack)
{
    //populate gridview
    ....
}

But then the rest of the code is in braces after this initial block, so it will get fired each time you post back, therefore resetting the lists. All of the code should be in that first set of braces and you can remove all of the extra braces around the other blocks that bind the dropdowns:

if(!IsPostBack)
{
    //populate gridview
    ....

    // populate dropdownlist for prealert 1
    ...

    // populate dropdown list for prealert 2
    ...

    //populate dropdown for Nature of Payment
    ...

    //populate dropdown for frequency
    ...

    //populate dropdown for owner
    ...

    //populate dropdown for owner verification        
    ...
}

If you put a breakpoint in the page load as it currently is, you should see that when you submit, it will reload each dropdown and set it's value to the initial value again.

Upvotes: 2

Related Questions