这是我的页面加载代码
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 with select按钮和同一页面上的批准按钮。当我单击选择按钮时,其值显示在一系列文本框中,然后我从下拉列表中选择一个项目。使用以下代码将其datavaluefield分配给变量:
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插入表中。
那我怎么解决这个问题呢?
答案 0 :(得分:4)
您只需将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
}
}
默认情况下,这些项目存储在ViewState
中。