下拉值在提交时被重置为初始值

本文关键字:提交 | 更新日期: 2023-09-27 18:10:51

我使用以下代码将从下拉列表中选择的项插入到sql数据库表中。它运行,但是下拉列表1、2、5和6的选定项始终存储下拉列表中的第一个项。这是我的代码

 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对不起,我忘了添加主要内容

 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) { }

}

这是我的HTML代码

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

<标题>任务列表管理器表


       <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>

这里是我的populatecombo代码

 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();
        }
    }

这是我的executescalar函数

 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();
        }
    }

下拉值在提交时被重置为初始值

我认为这是你们Page_Load的问题。你已经检查了if(!IsPostBack),你有一些代码在后面的大括号:

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

但是其余的代码都在这个初始块之后的大括号中,所以它将在每次返回时被触发,因此重置列表。所有的代码都应该在第一组大括号中,你可以删除绑定下拉框的其他块周围的所有额外大括号:

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        
    ...
}

如果你在当前页面加载中设置了一个断点,你应该会看到当你提交时,它会重新加载每个下拉菜单,并将其值设置为初始值