0

私のアプリケーションでは、ツリーの選択にドロップダウン メニューを使用しています。そして、読み取り専用のテキストボックスを1つ使用しました。ユーザーがそのドロップダウン メニューからツリーを選択すると、その特定のツリーに対応する日付がそのテキスト ボックスに表示されます。例のために。データベース内

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

ユーザーがドロップダウンを使用してツリー 105 を選択すると、2010 年 5 月 18 日の日付がすぐにそのテキスト ボックスに表示されます。

データを正しくフェッチするコードを作成しました。私が直面している問題は、データの表示中です。ユーザーがそのテキストボックスをクリックしたときにのみデータがテキストボックスに表示されます(これは、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();

その後、値を設定するために javascript イベントを使用する必要はありませんonclick。これは、ページがポストバックされたときに自動的に行われるためです。

したがって、あなたの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 に答える