ASP.Net 更新面板文本框文本更改无法返回下拉列表中的第一项
本文关键字:文本 下拉列表 返回 一项 更新 Net ASP | 更新日期: 2023-09-27 18:34:41
我正在尝试从TextBox_TextChanged事件填充/填充下拉列表,但我似乎无法检索第一条记录。 它完全绕过了它。 它直接转到第二条记录,完全忽略第一条记录。 任何帮助都会很棒。 我已经为此纠结了几个小时,一辈子都想不通。 提前谢谢。
这是我背后的代码:
protected void MyListDataBound(object sender, EventArgs e)
{
ddlSpaceNum.Items.Insert(0, new System.Web.UI.WebControls.ListItem("- Select -", ""));
ddlSpaceNum2.Items.Insert(0, new System.Web.UI.WebControls.ListItem("- Select -", ""));
}
public void populateSpaceNum()
{
string selectSQL = @"Select Id, BU, SpaceNum
From PossessionTurnoverLetter
WHERE LTRIM(RTRIM(BU)) = '" + txtBU.Text + "'";
SqlConnection con = new SqlConnection(cnnString);
SqlCommand cmd = new SqlCommand(selectSQL, con);
SqlDataReader reader = default(SqlDataReader);
try
{
con.Open();
reader = cmd.ExecuteReader();
reader.Read();
if (reader.HasRows)
{
ddlSpaceNum2.DataSource = reader;
ddlSpaceNum2.DataTextField = "SpaceNum";
ddlSpaceNum2.DataValueField = "SpaceNum";
ddlSpaceNum2.DataBind();
}
}
catch (Exception ex)
{
//lblSupplier.Text = "Supplier Number is incorrect!!";
}
finally
{
reader.Close();
con.Close();
}
}
protected void txtBU_TextChanged(object sender, EventArgs e)
{
populateSpaceNum();
}
这是我的aspx页面:
<asp:UpdatePanel ID="udpRevised" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<table style="width:100%" cellpadding="4px">
<tr>
<td colspan="6">
</td>
</tr>
<tr>
<td colspan="6">
<asp:RadioButtonList ID="rblRevision" runat="server" RepeatDirection="Horizontal" TextAlign="Right" RepeatColumns="2" CellSpacing="10" CellPadding="10" ForeColor="#F78222" OnSelectedIndexChanged="rblRevision_SelectedIndexChanged" AutoPostBack="True">
<asp:ListItem Value="Initial Possession Turnover"></asp:ListItem>
<asp:ListItem Value="Revised Possession Turnover"></asp:ListItem>
</asp:RadioButtonList>
</td>
</tr>
</table>
<hr />
<asp:UpdatePanel ID="udpShowUpdate" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Panel ID="pnlRevised" runat="server" Visible="False">
<asp:UpdatePanel ID="udpSearch" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<table style="width:100%" cellpadding="4px">
<tr>
<td colspan="4">
<asp:Label ID="lblSearch" runat="server" Text="Search" Font-Bold="True" Font-Underline="True" Font-Size="20px"></asp:Label>
</td>
</tr>
<tr>
<td>
<asp:Label ID="lblBU" runat="server" Font-Bold="true" Text="Business Unit:"></asp:Label>
</td>
<td>
<asp:Label ID="lblSpace" runat="server" Font-Bold="true" Text="Space #:"></asp:Label>
</td>
<td>
<asp:Label ID="lblTurnoverDate" runat="server" Font-Bold="true" Text="Possession - Turnover Date:"></asp:Label><br />
</td>
<td>
</td>
</tr>
<tr>
<td colspan="6">
<asp:Label ID="lblError" runat="server" Text="You have not specified a valid entry. Please try again!" Visible="False"></asp:Label>
</td>
</tr>
<tr>
<td>
<asp:TextBox ID="txtBU" runat="server" CssClass="form-control" OnTextChanged="txtBU_TextChanged" AutoPostBack="True"></asp:TextBox>
</td>
<td>
<asp:DropDownList ID="ddlSpaceNum2" runat="server" CssClass="form-control" OnDataBound="MyListDataBound" OnSelectedIndexChanged="ddlSpaceNum2_SelectedIndexChanged" AutoPostBack="True"></asp:DropDownList>
</td>
<td>
<asp:TextBox ID="txtTurnoverDate" runat="server" data-datepicker="true" CssClass="form-control"></asp:TextBox>
</td>
<td>
<asp:Button ID="btnSearch" runat="server" Text="Search" CssClass="btn btn-default" OnClick="btnSearch_Click" UseSubmitBehavior="False" />
</td>
</tr>
<tr>
<td colspan="6">
</td>
</tr>
</table>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="txtBU" EventName="TextChanged" />
<asp:AsyncPostBackTrigger ControlID="ddlSpaceNum2" EventName="SelectedIndexChanged" />
</Triggers>
</asp:UpdatePanel>
</asp:Panel>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="rblRevision" EventName="SelectedIndexChanged" />
</Triggers>
</asp:UpdatePanel>
任何帮助将不胜感激。 谢谢。
我怀疑问题出在这里:
reader = cmd.ExecuteReader();
reader.Read();
if (reader.HasRows)
{
ddlSpaceNum2.DataSource = reader;
这里应该不需要调用Read
方法。这样做可以将读者的位置转移到第一项之后。当 DDL 执行其数据绑定时 - 它从第二条记录开始,假设这是读取器的开头。
只需删除对Read
的呼叫,您应该没事。