2014-12-19 1 views
0

Я пытаюсь заполнить или заполнить выпадающий список из события TextBox_TextChanged, но, похоже, я не могу получить самую первую запись. Он полностью обходит его. Он подходит ко второй записи и полностью игнорирует первую запись. Любая помощь будет большой. Я обволакиваю голову вокруг этого часами и не могу понять это для меня. Заранее спасибо.ASP.Net UpdatePanel Textbox TextChanged не может вернуть первый элемент в DropDownList

Вот мой код позади:

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> 

Любая помощь будет принята с благодарностью. Благодарю.

ответ

1

Я подозреваемый, что проблема здесь:

reader = cmd.ExecuteReader(); 
reader.Read(); 

if (reader.HasRows) 
{ 
    ddlSpaceNum2.DataSource = reader; 

Там не должно быть никакой необходимости вызывать Read метод здесь. При этом вы меняете позицию читателя после первого элемента. И когда DDL выполняет привязку данных, он начинается со второй записи, предполагая, что это начало чтения.

Просто удалите звонок Read, и все должно быть в порядке.

 Смежные вопросы

  • Нет связанных вопросов^_^