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">
            &nbsp;
        </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>
            &nbsp;
        </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">
            &nbsp;
        </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>

任何帮助将不胜感激。 谢谢。

ASP.Net 更新面板文本框文本更改无法返回下拉列表中的第一项

怀疑问题出在这里:

reader = cmd.ExecuteReader();
reader.Read();
if (reader.HasRows)
{
    ddlSpaceNum2.DataSource = reader;

这里应该不需要调用Read方法。这样做可以将读者的位置转移到第一项之后。当 DDL 执行其数据绑定时 - 它从第二条记录开始,假设这是读取器的开头。

只需删除对Read的呼叫,您应该没事。