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
语句中。您的 SqlCommand
、SqlConnection
(这不应该是 property/field)and
SqlDataReaderall implement
IDisposable`。
最好的猜测是,如果没有可编译的代码,您的下拉列表看起来会在页面加载之间保持不变,这意味着它永远不会脱离上下文(对象保留在内存中)。因此,每次加载页面时,它都会一遍又一遍地附加。您可能想要检查现有值:
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) 放在页面加载语句中。
当我在 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
语句中。您的 SqlCommand
、SqlConnection
(这不应该是 property/field)and
SqlDataReaderall implement
IDisposable`。
最好的猜测是,如果没有可编译的代码,您的下拉列表看起来会在页面加载之间保持不变,这意味着它永远不会脱离上下文(对象保留在内存中)。因此,每次加载页面时,它都会一遍又一遍地附加。您可能想要检查现有值:
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) 放在页面加载语句中。