更新DropDownList时,未正确选择所选值;而是返回随机值

时间:2017-11-07 06:45:28

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

protected void wbsDropDown_Change(object sender, EventArgs e)
{
    //txtWBSDesc.Text = wbsDropDown.SelectedItem.Value.ToString();
    //txtWBSDesc.Text = wbsDropDown.SelectedValue.ToString().Trim();   
    txtWBSDesc.Text = this.wbsDropDown.SelectedValue.ToString().Trim();
}

总是正确返回一些DropDownList项的值。列表中的错误值随机返回。 在这里Aspx 这是下面的aspx

<table cellpadding="0" cellspacing="0" border="0" class="ms-long">
    <tr>
        <td  style="padding-right:2px;" class="ms-formbody">
            <asp:DropDownList AutoPostBack="true" runat="server" ID="wbsDropDown" width="115px" CssClass="text" OnSelectedIndexChanged="wbsDropDown_Change" />
        </td>
        <td align="left">
            <asp:Label ID="lblWBSNoName" runat="server" Text="" ></asp:Label>
            <asp:TextBox ID="txtWBSDesc" width="350px" runat="server" class="ms-textfield ms-long ms-readonly"></asp:TextBox>
        </td>
    </tr>
</table>

此处绑定数据

//update WBS dropdown by ram
                DataTable dtWBS = MMHE.iPS.Lib.AcctCostCentre.GetWBS_DT(txtJobNo.Text.ToString());
                wbsDropDown.DataSource = dtWBS;
                wbsDropDown.DataTextField = "WBSElement";
                wbsDropDown.DataValueField = "Descrip";
                wbsDropDown.DataBind();
                wbsDropDown.Items.Insert(0, new ListItem("--Select--", "0"));

                if (!string.IsNullOrEmpty(JobNo.eWBSElement.ToString()))
                {
                    wbsDropDown.SelectedItem.Text = JobNo.eWBSElement.ToString();
                }
                else
                {
                    wbsDropDown.SelectedItem.Text = JobNo.eClaim_WBSElement.ToString();
                }

2 个答案:

答案 0 :(得分:0)

问题在于您设置DropDown的选定项目的方式。

而不是: wbsDropDown.SelectedItem.Text = JobNo.eWBSElement.ToString();

绑定并插入默认条目后使用以下方法(&#34; - 选择 - &#34;)。

您需要根据值设置选择。

wbsDropDown.ClearSelection(); //making sure the any preselection has been cleared
wbsDropDown.Items.FindByValue(value).Selected = true;

注意:此外,如果您在PageLoad()中有绑定代码,请确保未在每次回发时调用绑定代码。而是在绑定之前检查IsPostBack属性。

答案 1 :(得分:0)

最后我最终得到了这个解决方案..

<script type="text/javascript">
  function WBSDropDown(ddl) 
  {
     document.getElementById('<%=txtWBSDesc.ClientID %>').value = ddl.value;
  }
  </script>

<asp:DropDownList AutoPostBack="false" onchange="WBSDropDown(this);" runat="server" ID="wbsDropDown" width="115px" CssClass="text" OnSelectedIndexChanged="wbsDropDown_Change" />