0

ここに私のページ読み込みコードがあります

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

同じページにドロップダウンリスト、選択ボタン付きのグリッドビュー、および承認ボタンがあります。選択ボタンをクリックすると、その値が一連のテキストボックスに表示され、ドロップダウンリストから項目を選択します。その 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 のテーブルに挿入されます。

私の問題は、毎回グリッドビューの選択ボタンをクリックすると、ドロップダウンリストの値が複数回表示されることです。

ds1.Clear()そのため、ページの読み込みを試みたところDropDownList1.Items.Clear();、その問題は解決しましたが、Datavaluefield が「1」にリセットされました。したがって、選択したデータ値フィールドを使用してテーブルに挿入することはできません。

では、どうすればこれを解決できますか?

4

1 に答える 1

4

コードを -check でラップするだけ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、既定で ASP.NET に格納されます。

于 2013-03-01T16:17:18.643 に答える