【问题标题】:ASP.Net UpdatePanel Textbox TextChanged cannot return first item in DropDownListASP.Net UpdatePanel 文本框 TextChanged 无法返回 DropDownList 中的第一项
【发布时间】:2015-02-18 17:04:43
【问题描述】:

我正在尝试从 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>

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

【问题讨论】:

    标签: c# asp.net sql-server updatepanel


    【解决方案1】:

    我怀疑问题出在这里:

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

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

    只需删除对Read 的调用就可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 2019-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多