每次单击Gridview选择按钮时,下拉列表项都在倍增

本文关键字:下拉列表 单击 Gridview 选择 按钮 | 更新日期: 2023-09-27 18:01:58

这是我的页面加载代码

protected void Page_Load(object sender, EventArgs e)
    {
        string str = "SELECT BOOK.book_name,BOOK.price,BOOK.author,BOOK.publisher,BOOK.isbn,BOOK_APPROVAL.status,BOOK_APPROVAL.cat_id FROM BOOK INNER JOIN BOOK_APPROVAL ON BOOK.book_id = BOOK_APPROVAL.book_id";
        SqlDataAdapter da = new SqlDataAdapter(str, obj.connect());
        da.Fill(ds);
        GridView1.DataSource = ds;
        GridView1.DataBind();
        ds1.Clear();
        DropDownList1.Items.Clear();
        string str1 = "SELECT cat_id,cat_name from CATEGORY";
        SqlDataAdapter da1 = new SqlDataAdapter(str1, obj.connect());
        da1.Fill(ds1);
        DropDownList1.DataSource = ds1;
        DropDownList1.DataTextField = "cat_name";
        DropDownList1.DataValueField = "cat_id";
        DropDownList1.DataBind();
    }

我有一个下拉列表,gridview与选择按钮和批准按钮在同一页面上。当我单击选择按钮时,它的值显示在一系列文本框中,然后我从下拉列表中选择一个项目。它的数据值字段用下面的代码赋值给一个变量:

 SqlCommand ddl = new SqlCommand("select cat_id from CATEGORY where cat_name='" + DropDownList1.SelectedItem + "' ", obj.connect());
catID = Convert.ToInt32(ddl.ExecuteScalar());

最后,当我点击批准按钮时,所有文本框的值都插入到ID= dropdownlist.datavaluefield的表中。

我的问题是,当我每次点击gridviews选择按钮,我的下拉列表值显示多次。

所以,在页面加载中尝试ds1.Clear()DropDownList1.Items.Clear();,它解决了这个问题,但它将我的Datavaluefield重置为'1'。所以我不能插入到表中使用选定的datavaluefield。

那么我怎么解决这个问题呢?

每次单击Gridview选择按钮时,下拉列表项都在倍增

您只需将Page_Load中的代码包装在!Page.IsPostBack检查中:

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        // code here that should be executed only at the first time 
        // and not on consecutive postbacks
    }
}

项目在ASP.NET中默认存储在ViewState中。