3

コードビハインドとしてC#を使用してasp.netページでカスタムイベントを処理したいと思います。検索テキストボックスをクリックするとサイズが大きくなります。ややこんな感じになります…

StackOverflowsearchTextBoxSnapShot

これはイベントとデリゲートを使用して実行できることを知っています。何かを試しましたが、正確にいつイベントを発生させるべきかわからないため、単にtxtSearch_TextChangedイベントで発生させています。

スニペットは次のとおりです。

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;


delegate void MessageEventHandler(object sender, EventArgs e);

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {

    if (Session["Redirected"] != null)
    {
        Session["Redirected"] = null;
        if (Session["FirstName"] != null)
            txtSearch.Text = Session["FirstName"].ToString();
        if (Session["Gender"] != null)
            ddlGen.SelectedValue = Session["Gender"].ToString();
        btnSearch_Click(sender, e);
    }


    if (!Page.IsPostBack)
    {   
        BindGrid();
    }
}

private void BindGrid()
{
    //Get dataset
    //bind
    string query = "select EmployeeId,FirstName,Password,Address,sex,Deptno,act_book,actTV,DOJ,isActiveYN from employees";

    DataSet ds = new DataSet("Employees");
    SqlConnection con = new SqlConnection("Password=admin;User ID=admin;Initial Catalog=asptest;Data Source=dbsvr");
    SqlDataAdapter da = new SqlDataAdapter(query, con);

    da.Fill(ds);
    gvSession.DataSource = ds;        
    gvSession.DataBind();
}

protected void btnSearch_Click(object sender, EventArgs e)
{

    string query = "Select EmployeeId,FirstName,Password,Address,sex,Deptno,act_book,actTV,DOJ,isActiveYN from employees where 1=1";

    if (txtSearch.Text != "")
    {
        query += " and FirstName like '%" + txtSearch.Text + "%'";            
        Session["FirstName"] = txtSearch.Text;   
    }

    if (ddlGen.SelectedValue != "")
    {
        query += "  and sex='" + ddlGen.SelectedValue.ToUpper() + "'";            
        Session["Gender"] = ddlGen.SelectedValue;
    }


    DataSet ds = new DataSet("Employees");
    SqlConnection con = new SqlConnection("Password=admin;User ID=admin;Initial Catalog=asptest;Data Source=dbsvr");
    SqlDataAdapter da = new SqlDataAdapter(query, con);            


    da.Fill(ds);
    gvSession.DataSource = ds;
    gvSession.DataBind();


}


private event MessageEventHandler texBoxOnClick;

void _Default_texBoxOnClick(object sender, EventArgs e)
{
    //this function auto generates when you use += and tab twice in Visual Studio
    //handle the event here
    txtSearch.Width = Convert.ToInt32(300);
    //throw new Exception("The method or operation is not implemented.");
} 

private void OnTextBxClicked(EventArgs e)
{
    if (texBoxOnClick != null)
        texBoxOnClick(this, e);
}

protected void txtSearch_TextChanged(object sender, EventArgs e)
{
    //adding handler
    this.texBoxOnClick += new MessageEventHandler(_Default_texBoxOnClick);
    //Raising a Notification
    OnTextBxClicked(e);
    Session["FirstName"] = "";

}

protected void ddlGen_SelectedIndexChanged(object sender, EventArgs e)
{
    Session["Gender"] = "";   

    }
}

最後に編集した後、ポストバックでテキスト変更が発生するため、検索ボタンがクリックされたときにイベントが発生します。私の問題はOnTextBxClicked(e);、テキストボックスがクリックされたときに発生させたいcozを正確に呼び出すタイミングを判断できないことです。(このウェブサイト自体のリンク)

4

2 に答える 2

4

TextChangedイベントは、ページがポストバックされたときにのみサーバーで発生するため、サーバーで処理してテキストボックスの幅を広げることはできますが、クライアント側でこれを実行することをお勧めします。

<script type="text/javascript" language="javascript"> 
<!--
    $(document).ready(function () {
        $('#myTextBoxID').focus(function () {
            $(this).width(500)
        });
    }) 
//--> 
</script>
于 2011-08-09T11:24:59.170 に答える
2

これは、ほとんどの場合、JavaScriptまたはその他のクライアントテクノロジを介してクライアント側で実行する必要があります。

于 2011-08-09T12:29:53.893 に答える