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

时间:2014-07-01 08:14:20

标签: c# asp.net gridview

我使用以下代码将所选项目从dropdownlist插入到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);
    }

我的按钮点击事件抱歉我忘了添加主要内容

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

这是我的执行标量函数

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

1 个答案:

答案 0 :(得分:2)

我认为这是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        
    ...
}

如果您在页面加载中设置断点,则应该看到在提交时,它会重新加载每个下拉列表并将其值再次设置为初始值。