【发布时间】:2018-12-27 09:43:08
【问题描述】:
我有两个名为 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.DataSource = r=> 此行尝试直接从阅读器加载数据源,阅读器完成后可能返回空结果。尝试使用FatherNameDataTable.Load(r)将阅读器投射到另一个DataTable并查看结果。您也应该尝试为DataTextField和DataValueField设置列名。 -
我也是这样做的,但问题是,第一次加载数据,但是当页面回发时,它没有再次加载,而是显示旧值,我的意思是旧名称第一次加载。虽然我正在清理物品。我在 SelectedIndexChanged 事件
ddEmployeeFatherName.Items.Clear(); ddEmployeeFatherName.DataSource = LoadComboBoxFatherEmployeeName(); ddEmployeeFatherName.DataBind();中添加了这段代码 sn-p