简体   繁体   English

未在SelectedIndexChanged事件上加载级联Dropdownlist

[英]Cascading Dropdownlist not loaded on SelectedIndexChanged Event

I have two dropdownlists named ddFatherEmployeeNumber and ddEmployeeFatherName. 我有两个名为ddFatherEmployeeNumber和ddEmployeeFatherName的下拉列表。 Now on load event i am populating ddFatherEmployeeNumber from database. 现在在加载事件中,我正在从数据库中填充ddFatherEmployeeNumber。 Here is the code 这是代码

private DataTable LoadComboBoxFatherEmployeeNumber()
    {
        DataTable dtFatherENo = new DataTable();
        using (SqlConnection con = new SqlConnection(Base.GetConnection))
        {
            using (SqlCommand cmd = new SqlCommand("SELECT Id, EmployeeNo FROM TableFatherMaster", con))
            {
                cmd.CommandType = CommandType.Text;
                con.Open();
                SqlDataReader r = cmd.ExecuteReader();
                dtFatherENo.Load(r);
            }
        }
        return dtFatherENo;
    }

Load Event code is 加载事件代码为

if (!IsPostBack)
        {
            ddFatherEmployeeNumber.DataSource = LoadComboBoxFatherEmployeeNumber();
            ddFatherEmployeeNumber.DataTextField = "EmployeeNo";
            ddFatherEmployeeNumber.DataValueField = "Id";
            ddFatherEmployeeNumber.DataBind();
            ddFatherEmployeeNumber.Items.Insert(0, new ListItem("Select Father Employee No", "0"));
        }

Here is the .aspx code for ddFatherEmployeeNumber 这是ddFatherEmployeeNumber的.aspx代码

<div class="col-8">
                                    <asp:DropDownList ID="ddFatherEmployeeNumber" runat="server" class="form-control here" AutoPostBack="True" OnSelectedIndexChanged="ddFatherEmployeeNumber_SelectedIndexChanged"></asp:DropDownList>
                                </div>

Now i want to populate the ddEmployeeFatherName on the bases of ddFatherEmployeeNumber selected value. 现在,我想在ddFatherEmployeeNumber选定值的基础上填充ddEmployeeFatherName。 I mean when a user select employee number from ddFatherEmployeeNumber list then from database, Name of that employee loads and populate the ddEmployeeFatherName. 我的意思是,当用户从ddFatherEmployeeNumber列表中然后从数据库中选择员工编号时,该员工的姓名将加载并填充ddEmployeeFatherName。 For that purpose i already write a code on ddFatherEmployeeNumber_SelectedIndexChanged Event. 为此,我已经在ddFatherEmployeeNumber_SelectedIndexChanged事件上编写了代码。 Here is the Code. 这是代码。

 protected void ddFatherEmployeeNumber_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (ddEmployeeFatherName.SelectedIndex == 0)
        {

        }
        else
        {
            using (SqlConnection con = new SqlConnection(Base.GetConnection))
            {
                using (SqlCommand cmd = new SqlCommand("SELECT Id, Name FROM TableFatherMaster WHERE EmployeeNo=@EmployeeNo ", con))
                {
                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.AddWithValue("@EmployeeNo", ddFatherEmployeeNumber.SelectedValue);
                    con.Open();
                    SqlDataReader r = cmd.ExecuteReader();
                    ddEmployeeFatherName.DataSource = r;
                    ddEmployeeFatherName.DataBind();
                }
            }
        }

    }

Now the problem is, it doesn't loads data into ddEmployeeFatherName. 现在的问题是,它不会将数据加载到ddEmployeeFatherName中。 Here is the picture for clear understanding 这是清晰了解的图片 在此处输入图片说明

Try setting DataTextField and DataValueField properties for ddEmployeeFatherName first, because you're not setting them before using DataBind() : 尝试先为ddEmployeeFatherName设置DataTextFieldDataValueField属性,因为在使用DataBind()之前没有设置它们:

using (SqlConnection con = new SqlConnection(Base.GetConnection))
{
    using (SqlCommand cmd = new SqlCommand("SELECT Id, Name FROM TableFatherMaster WHERE EmployeeNo=@EmployeeNo ", con))
    {
        cmd.CommandType = CommandType.Text;
        cmd.Parameters.AddWithValue("@EmployeeNo", ddFatherEmployeeNumber.SelectedValue);
        con.Open();
        SqlDataReader r = cmd.ExecuteReader();
        ddEmployeeFatherName.DataSource = r;

        // set text and value fields
        ddEmployeeFatherName.DataTextField = "Name";
        ddEmployeeFatherName.DataValueField = "Id";
        ddEmployeeFatherName.DataBind();
    }
}

If the dropdownlist option values are still empty, try loading SqlDataReader contents into DataTable and use it instead: 如果dropdownlist选项值仍然为空,请尝试将SqlDataReader内容加载到DataTable并使用它:

using (SqlCommand cmd = new SqlCommand("SELECT Id, Name FROM TableFatherMaster WHERE EmployeeNo=@EmployeeNo ", con))
{
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.AddWithValue("@EmployeeNo", ddFatherEmployeeNumber.SelectedValue);
    con.Open();
    SqlDataReader r = cmd.ExecuteReader();

    DataTable dt = new DataTable();
    dt.Load(r);

    ddEmployeeFatherName.DataSource = dt;
    ddEmployeeFatherName.DataTextField = "Name";
    ddEmployeeFatherName.DataValueField = "Id";
    ddEmployeeFatherName.DataBind();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM