[英]Cascading Dropdownlist not loaded on SelectedIndexChanged Event
我有两个名为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"));
}
这是ddFatherEmployeeNumber的.aspx代码
<div class="col-8">
<asp:DropDownList ID="ddFatherEmployeeNumber" runat="server" class="form-control here" AutoPostBack="True" OnSelectedIndexChanged="ddFatherEmployeeNumber_SelectedIndexChanged"></asp:DropDownList>
</div>
现在,我想在ddFatherEmployeeNumber选定值的基础上填充ddEmployeeFatherName。 我的意思是,当用户从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
设置DataTextField
和DataValueField
属性,因为在使用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();
}
}
如果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.