在gridview中的特定控件上添加事件

时间:2016-05-04 05:29:31

标签: c# asp.net gridview

我有一个场景,我需要将一个事件(textchanged)附加到文本框。如果代码是“code2”,它应该只触发。请检查以下代码; value_TextChanged未触发:

<asp:GridView runat="server" ID="gv1"  AutoGenerateColumns="false" 
            onrowcreated="gv1_RowCreated1" >
    <Columns>
    <asp:TemplateField>
    <ItemTemplate>
    <asp:Label runat="server" ID="code" Text='<%# Bind("[code]") %>'></asp:Label>
    </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField>
    <ItemTemplate>
    <asp:TextBox runat="server" ID="val" Text='<%# Bind("[value]") %>'></asp:TextBox>
    </ItemTemplate>
    </asp:TemplateField>
    </Columns>
    </asp:GridView>

protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                DataBind();
            }
        }

        void DataBind()
        {
            DataTable dt = new DataTable();
            dt.TableName = "tb1";
            dt.Columns.Add("code");
            dt.Columns.Add("value");
            dt.Rows.Add("code1", "Red");
            dt.Rows.Add("code2", "Green");
            dt.Rows.Add("code3", "Blue");
            gv1.DataSource = dt;
            gv1.DataBind();
        }

        protected void gv1_RowCreated1(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                string code = (String)DataBinder.Eval(e.Row.DataItem, "code");
                TextBox value = (TextBox)e.Row.FindControl("val");
                if (code == "code2")
                {
                    value.AutoPostBack = true;
                    value.TextChanged += new EventHandler(value_TextChanged);
                }
            }
        }

        void value_TextChanged(object sender, EventArgs e)
        {
            throw new NotImplementedException();
        }

1 个答案:

答案 0 :(得分:0)

要触发TextChange,您需要在标记中添加AutoPostBack="true";要使用TextChange附加事件,您无需依赖gv1_RowCreated,也可以在标记中指定。

<asp:TextBox AutoPostBack="true" OnTextChanged="value_TextChanged" 
runat="server" ID="val" Text="" ></asp:TextBox>
  

请注意另外一件事,该事件将在textBox时触发   失去焦点