0

管理者が新しいレコードをデータベースに追加する Web フォームがあります。フォームには 1 つのドロップダウンdrpDepartmentsボックスといくつかのテキスト ボックスEmployeeID, Fname, Lnameなどがあります。新しいレコードを追加できますが、ドロップダウン ボックスから選択したオプションが変更されません。これは常に最初の値です。ここにテーブルtblEmployeeとがありtblDepartmentます。

ここに画像の説明を入力 これが私のPage_Load()コードです:

            sConn = new SqlConnection(sStr);
            daEmp = new SqlDataAdapter("SELECT * FROM tblEmployee", sConn);
            daDep = new SqlDataAdapter("SELECT * FROM tblDepartment", sConn);
            dsEmp = new DataSet();
            dsDep = new DataSet();

            daEmp.Fill(dsEmp, "tblEmployee");
            daDep.Fill(dsDep, "tblDepartment");

            dsEmp.Tables["tblEmployee"].PrimaryKey = new DataColumn[] { dsEmp.Tables["tblEmployee"].Columns["EmployeeID"] };

            drpDepartments.DataSource = dsDep.Tables["tblDepartment"];
            drpDepartments.DataTextField = "Description";
            drpDepartments.DataValueField = "DeptID";
            drpDepartments.DataBind();

そしてbtnAdd_Click()コード:

       cb = new SqlCommandBuilder(daEmp);

        DataRow dRow = dsEmp.Tables["tblEmployee"].NewRow();
        dRow["EmployeeID"] = txtID.Text;
        dRow["Lname"] = txtLname.Text;
        dRow["Fname"] = txtFname.Text;
        dRow["Mname"] = txtMname.Text;
        dRow["Address"] = txtAddress.Text;
        dRow["Email"] = txtEmail.Text;
        dRow["Phone"] = Convert.ToInt64(txtPhone.Text);
        dRow["Jobtitle"] = txtJobtitle.Text;
        dRow["Salary"] = txtSalary.Text;
        dRow["DeptID"] = drpDepartments.SelectedValue;

        dsEmp.Tables["tblEmployee"].Rows.Add(dRow);
        daEmp.Update(dsEmp, "tblEmployee");
        dsEmp.Tables["tblEmployee"].AcceptChanges();

        Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "test", "<script>alert('New record added!');</script>");
        Refresh();
4

1 に答える 1

3

ドロップダウンのバインディングは、!IsPostBack

if(!IsPostBack)
{
 drpDepartments.DataSource = dsDep.Tables["tblDepartment"];// Set DataSource Table First
        drpDepartments.DataTextField = "Department";// Set Column Name of DataTable to set as Text Field
        drpDepartments.DataValueField = "DepartmentID";// Set Column Name of DataTable to set as Value Field
        drpDepartments.DataBind();
}

ポストバック イベントで DropDownList をバインドすると、ドロップダウンは button_click (page_load) イベントで再バインドされ、ユーザーが設定した値は失われます。

于 2013-11-15T03:54:16.520 に答える