Каскадный выпадающий список не загружен в событие SelectedIndexChanged - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть два выпадающих списка с именами ddFatherEmployeeNumber и ddEmployeeFatherName.Теперь при загрузке события я заполняю ddFatherEmployeeNumber из базы данных.Вот код

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

Загрузить код события

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

Вот код ASPX для ddFatherEmployeeNumber

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

Теперь я хочу заполнить ddEmployeeFatherNameна основании ddFatherEmployeeNumber выбранное значение.Я имею в виду, когда пользователь выбирает номер сотрудника из списка ddFatherEmployeeNumber, а затем из базы данных, имя этого сотрудника загружается и заполняет ddEmployeeFatherName.Для этого я уже пишу код для события ddFatherEmployeeNumber_SelectedIndexChanged.Вот код.

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

    }

Теперь проблема в том, что он не загружает данные в ddEmployeeFatherName.Вот картинка для ясного понимания enter image description here

1 Ответ

0 голосов
/ 27 декабря 2018

Попробуйте сначала установить свойства DataTextField и DataValueField для ddEmployeeFatherName, поскольку вы не устанавливаете их перед использованием 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();
    }
}

Если значения параметров раскрывающегося списка по-прежнему пусты,попробуйте загрузить 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...