2013-10-02 46 views
0

在我的应用程序中使用树形选择的下拉菜单。我已经使用了一个只读的文本框。如果用户从该下拉菜单中选择一棵树,那么该特定树的相应日期应该显示在该文本框中。前者为 。在数据库如何在文本框中显示日期选择下拉菜单?

tree_no  Date of Spathe opening 
125   26/05/2010 
144   08/03/1999 
105   18/05/2010 

如果用户选择使用下拉列表树105立即日期18/05/2010应该得到显示在文本框中

我写了正确获取数据的编码。我面临的问题是显示数据时。 只有当用户在该文本框中单击时,数据才会显示在文本框中(这是因为我使用了onclick事件)请帮助我修改代码,以便数据显示在文本框中,并且它应该保留在该文本框中,除非用户从下拉菜单 代码在aspx页面

<div class="list_text_left"> 
    Tree :</div> 
<div class="list_text_right"> 
    <asp:DropDownList ID="ddTreeNo" CssClass="title_dropdown" runat="server" OnSelectedIndexChanged="ddTreeNo_SelectedIndexChanged" /> 
</div> 
<div class="list_text_left_new1"> 
    Date Of Spathe Opening:</div> 
<div class="list_text_left_new" style="width: 86px; font-weight: normal;"> 
    <asp:TextBox ID="dtActv" runat="server" CssClass="textbox1" onfocus="Change(this, event)" 
     onblur="Change(this, event)" onkeypress="return keydown(this.id,event);" ValidationGroup="MKE" /> 
    <input type="hidden" id="dte" runat="server" /> 
    <asp:HiddenField runat="server" ID="hBlockID" /> 
</div> 

后面的代码页选择另一棵树

dtActv.Attributes.Add("readonly", "readonly"); 

protected void ddTreeNo_SelectedIndexChanged(object sender, EventArgs e) { 
    check(ddpBlock.SelectedValue, ddTreeNo.SelectedValue); 
    Response.Write("Selected value"); 
} 

public void check(string blocknum, string tree) { 

    string tre = ddTreeNo.SelectedValue; 
    string lstd = "", dtemas = ""; 
    string str = " select talltree_master.dt_spatheopen "; 
    str = str + " from talltree_master "; 
    str = str + " where talltree_master.block_id =" + blocknum + " and talltree_master.dtdied is NULL and talltree_master.talltree_id =" + tree + ""; 
    OdbcCommand cmd = new OdbcCommand(str, cn); 
    try { 
     cn.Open(); 
     OdbcDataReader dr = cmd.ExecuteReader(); 
     while (dr.Read()) { 
      if (dr.IsDBNull(0)) { 
       t1 = ""; 
      } else { 
       tt = dr.GetDate(0); 

       lstd = tt.ToShortDateString(); 

      } 
     } 
    } catch (Exception ex) { 
     Response.Write(ex); 

    } finally { 
     cn.Close(); 
    } 


    dtActv.Attributes["onclick"] = "clearTextBox(this.id)"; 

    string block_id = lstd; 
    hBlockID.Value = block_id.ToString(); 

} 

JavaScript代码在aspx页面onclick事件

function clearTextBox(dtActv) { 
    var hBlockID = document.getElementById('<%= hBlockID.ClientID %>').value; 
    document.getElementById(dtActv).value = hBlockID; 
} 

请修改我的代码。

+0

在HTML中,您提供了'clearTextBox' JavaScript函数从来没有使用过,所以你为什么添加它?你有没有尝试在DropdownList属性中设置'AutoPostBack = true'? – Nunners

+0

在页面后面的代码中有一个函数public void check(string blocknum,string tree){dtActv.Attributes [“onclick”] =“clearTextBox(this.id)”; }我在那边调用clearTextBox函数 – user2240189

+0

为什么不直接给文本框赋值? – Nirmal

回答

0

在您的代码中,您将更改下拉列表并通过代码隐藏(C#)获取值,然后在将文本框设置为与隐藏的hBlock元素相同之前,您正在等待文本框事件的onclick

为什么不简单地在页面后面的代码中设置文本框的值?

string block_id = lstd; 
    hBlockID.Value = block_id.ToString(); 
    dtActv.Text = block_id.ToString(); 

那么你不需要使用onclick JavaScript事件设定值做到这一点的页面职位时自动恢复。

所以你check方法将成为:

public void check(string blocknum, string tree) { 
    string tre = ddTreeNo.SelectedValue; 
    string lstd = "", dtemas = ""; 
    string str = " select talltree_master.dt_spatheopen "; 
    str = str + " from talltree_master "; 
    str = str + " where talltree_master.block_id =" + blocknum + " and talltree_master.dtdied is NULL and talltree_master.talltree_id =" + tree + ""; 
    OdbcCommand cmd = new OdbcCommand(str, cn); 
    try { 
     cn.Open(); 
     OdbcDataReader dr = cmd.ExecuteReader(); 
     while (dr.Read()) { 
      if (dr.IsDBNull(0)) { 
       t1 = ""; 
      } else { 
       tt = dr.GetDate(0); 

       lstd = tt.ToShortDateString(); 

      } 
     } 
    } catch (Exception ex) { 
     Response.Write(ex); 

    } finally { 
     cn.Close(); 
    } 

    string block_id = lstd; 
    hBlockID.Value = block_id.ToString(); 
    dtActv.Text = block_id.ToString(); 
} 

而且你可以删除javascript函数。

相关问题