Asp .net 下拉列表数据保持加载

Asp .net dropdownlist data keep load

当我在 GridView 中获得显示的值后,当我再次单击时,DropDownList 将包含重复项。

public void Page_Load(object sender, EventArgs e)
{
    string sql = "select distinct cproject from I.dd.project";
    con.Open();
    SqlCommand cmd = new SqlCommand(sql, con);
    SqlDataReader dr = cmd.ExecuteReader();
    while (dr.Read())
    {
       DropDownList1.Items.Add(dr[0].ToString());
    }
    con.Close();
}

public void button_click(object sender, EventArgs e)
{
    sqldataadapter da = new sqldataadapter(Select * from lalala where id =    '"+dropdownlist.item.selectedvalue.tostring()+"')
   +"where A.cproject ='"+DropDownList1.SelectedValue.ToString()+"', con);
    DataSet ds = new DataSet();
    sda.Fill(ds);
    GridView1.DataSource = ds;
    GridView1.DataBind();
}

每次回发时都会调用 Page_Load 方法(例如当您单击 ASP.NET 按钮控件时)。数据已在第一次加载时添加并存储在 ViewState 中。在第二次请求时,它再次添​​加它。您可以使用 Page.IsPostBack 属性.

检测您是否处于回发中
public void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        // add items to drop down list
    }
}

旁注,确保任何实现 IDisposable 接口的对象都得到正确处理。您需要确保在处理完它们后将它们处置掉,以避免难以诊断的错误。您可以在 finally 块中对它们调用 .Dispose(),也可以将它们包装在 using 语句中。您的 SqlCommandSqlConnection(这不应该是 property/field)andSqlDataReaderall implementIDisposable`。

最好的猜测是,如果没有可编译的代码,您的下拉列表看起来会在页面加载之间保持不变,这意味着它永远不会脱离上下文(对象保留在内存中)。因此,每次加载页面时,它都会一遍又一遍地附加。您可能想要检查现有值:

public void Page_Load()
{
    string sql = "select distinct cproject from I.dd.project";
    con.Open();
    using(SqlCommand cmd = new SqlCommand(sql, con)) {
        using(SqlDataReader dr = cmd.ExecuteReader()) {
            while (dr.Read())
            {
                //Have not tested the if statement... may need to correct it.  
                if(!DropDownList1.Items.Contains(dr[0].ToString())) {
                    DropDownList1.Items.Add(dr[0].ToString());
                }
            }
        }
    }
    con.Close();
}

你应该写成:

public void Page_Load
{
  if (!IsPostBack){
    string sql = "select distinct cproject from I.dd.project";
    con.Open();
    SqlCommand cmd = new SqlCommand(sql, con);
    SqlDataReader dr = cmd.ExecuteReader();
    while (dr.Read())
    {
     DropDownList1.Items.Add(dr[0].ToString());
    }
    con.Close();
  }
}

public void button_click
{
    sqldataadapter da = new sqldataadapter(Select * from lalala where id =    '"+dropdownlist.item.selectedvalue.tostring()+"')
   +"where A.cproject ='"+DropDownList1.SelectedValue.ToString()+"', con);
    DataSet ds = new DataSet();
    sda.Fill(ds);
    GridView1.DataSource = ds;
    GridView1.DataBind();
}

我刚刚找到了解决方案。将 if(!Ispostback) 放在页面加载语句中。