如何在选择下拉列表时在文本框中显示日期?

时间:2013-10-02 13:06:04

标签: c# javascript asp.net

在我的应用程序中使用下拉菜单进行树选择。我使用了一个只读的文本框。如果用户从该下拉菜单中选择树,则该特定树的相应日期应该显示在该文本框中。 对于前在数据库中

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();

}

aspx页面中onclick事件的javascript代码

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

请修改我的代码。

1 个答案:

答案 0 :(得分:0)

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

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

    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函数。