【问题标题】:dropdownlist indexchange event doesn't work properly下拉列表 indexchange 事件无法正常工作
【发布时间】:2015-10-25 16:34:44
【问题描述】:

我有 4 个下拉列表 - 教师、部门、分支和部门。我的代码应该像这样工作,当我更改教师索引时,部门、分支和部门索引应该相应更改。其他 3 相同。但它仅在我更改 ddlFaculty 下拉列表的索引时有效,不适用于其他下拉列表。 Autopostback 对每个下拉列表都是正确的。我所有的查询都很好。我的代码是这样的..

protected void ddlFaculty_SelectedIndexChanged(object sender, EventArgs e)
{
    lblStatus.Text = "Faculty index changed...";
    lblStatus.Visible = true;
    ddlDept.Items.Clear();
    ddlBranch.Items.Clear();
    ddlDivison.Items.Clear();
    ddlDegree.Items.Clear();

    string connectionString = GlobalVariables.databasePath;
    SqlConnection sqlCon = new SqlConnection(connectionString);

    sqlCon.Open();
    string query = "select dp_name from DEPT where fac_id=(select fac_id from FACULTY where fac_name='" + ddlFaculty.SelectedValue + "')";
    SqlCommand cmd = new SqlCommand(query, sqlCon);
    SqlDataReader reader = cmd.ExecuteReader();
    while (reader.Read())
    {
        ddlDept.Items.Add(reader.GetValue(0).ToString());
    }
    reader.Close();
    sqlCon.Close();
}
protected void ddlDept_SelectedIndexChanged(object sender, EventArgs e)
{
    lblStatus.Text = "Dept index changed...";
    lblStatus.Visible = true;
    ddlBranch.Items.Clear();
    ddlDivison.Items.Clear();

    string connectionString = GlobalVariables.databasePath;
    SqlConnection sqlCon = new SqlConnection(connectionString);

    sqlCon.Open();
    string query = "select br_name from BRANCH where dp_id=(select dp_id from DEPT where dp_name='" + strDeptName + "')";
    SqlCommand cmd = new SqlCommand(query, sqlCon);
    SqlDataReader reader = cmd.ExecuteReader();
    while (reader.Read())
    {
        ddlBranch.Items.Add(reader.GetValue(0).ToString());
    }
    reader.Close();
    sqlCon.Close();
}
protected void ddlBranch_SelectedIndexChanged(object sender, EventArgs e)
{
    lblStatus.Text = "Branch index changed...";
    lblStatus.Visible = true;
    ddlDivison.Items.Clear();

    string connectionString = GlobalVariables.databasePath;
    SqlConnection sqlCon = new SqlConnection(connectionString);

    sqlCon.Open();
    string query = "select dv_name from DIVISON where br_id=(select br_id from BRANCH where br_name='" + strBranchName + "')";
    SqlCommand cmd = new SqlCommand(query, sqlCon);
    SqlDataReader reader = cmd.ExecuteReader();
    while (reader.Read())
    {
        ddlDivison.Items.Add(reader.GetValue(0).ToString());
    }
    reader.Close();
    sqlCon.Close();
}

【问题讨论】:

  • 同时显示您的标记和 PageLoad 事件。
  • 你最初是如何绑定下拉菜单的?
  • 最初我只将教师下拉菜单绑定到数据库。对于其他3个下拉菜单,我根据选定的教师索引添加项目。所以当我更改教师索引时,我首先要清除所有其他下拉菜单,然后根据新选择的教师索引添加项目

标签: c# sql asp.net drop-down-menu


【解决方案1】:

这里有一些实际代码可以让您更好地了解如何实现: 重要提示:ddlFaculty AutoPostBack="true"

    public partial class WebForm1 : System.Web.UI.Page
    {
    protected void Page_Load(object sender, EventArgs e)
    {
        if (ddlFaculty.Items.Count == 0)
        {
            ddlFaculty.DataSource = GetFaculty();
            ddlFaculty.DataTextField = "LastName";
            ddlFaculty.DataValueField = "FacultyId";
            ddlFaculty.DataBind();
        }
    }


    private DataTable GetFaculty()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("FacultyId", typeof(int));
        dt.Columns.Add("LastName", typeof(string));

        var dr1 = dt.NewRow();
        dr1["FacultyId"] = 1;
        dr1["LastName"] = "Smith";

        dt.Rows.Add(dr1);

        var dr2 = dt.NewRow();
        dr2["FacultyId"] = 2;
        dr2["LastName"] = "Jones";

        dt.Rows.Add(dr2);

        return dt;

    }

    private DataTable GetDept(int facultyId)
    {
        var dt = new DataTable();
        dt.Columns.Add("DeptId", typeof(int));
        dt.Columns.Add("DeptName", typeof(string));

        switch (facultyId)
        {
            case 1:
                var dr = dt.NewRow();
                dr["DeptId"] = 1;
                dr["DeptName"] = "Administration";
                dt.Rows.Add(dr);

                break;

            case 2:
                var dr1 = dt.NewRow();
                dr1["DeptId"] = 2;
                dr1["DeptName"] = "Science";
                dt.Rows.Add(dr1);
                break;
        }

        return dt;
    }

    protected void ddlFaculty_SelectedIndexChanged(object sender, EventArgs e)
    {
        var selectedValue = ddlFaculty.SelectedValue;

        ddlDept.Items.Clear();

        ddlDept.DataSource = GetDept(Convert.ToInt16(selectedValue));
        ddlDept.DataTextField = "DeptName";
        ddlDept.DataValueField = "DeptId";
        ddlDept.DataBind();

    }       

}

【讨论】:

    猜你喜欢
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    相关资源
    最近更新 更多