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

}

aspx 页面中 onclick 事件的 javascript 代码

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

请修改我的代码。

4

1 回答 1

0

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

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

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

然后您不需要使用onclickjavascript 事件来设置值,因为这是在页面回发时自动完成的。

所以你的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 函数。

于 2013-10-02T13:55:30.953 回答