TextBox.TextChanged事件不会立刻发生的,就算不是放在datagird里也是这样,
他仍然需要按submit等按钮提交到服务器端才会得到处理,我觉得你这个想法不太可能实现你可以使用EditCommandColumn的更新来提交更新

解决方案 »

  1.   

    set AutoPostBack=true on the textbox
      

  2.   

    我试过模板列中DownDrawList控件,其选定事件无法捕捉到
    模板列中的TextBox控件应该也如此
    看来.net还是很多缺陷啊
      

  3.   

    我也碰到同样的问题,在模板列中的TextBox控件无法捕捉!痛苦!
      

  4.   

    AutoPostBack=true
    的确,
    但是如何捕捉这个TextChanged事件?因为我知道模板列中的textbox控件需要你去find,这时候,那么这个被找到的控件TextChanged事件该如何写呢?该如何定义?各位给个提示啊~~~
      

  5.   

    自己给这个TextBox注册事件处理
      

  6.   

    acewang(**^o^**):如何给TextBox注册事件?请把过程源码写出来(vb),我很着急啊~~~~谢谢!!!
    zsww() :谢谢~~~
      

  7.   

    奇怪!!!!!
    我用
     Dim _textbox As New System.Web.UI.WebControls.TextBox
                _textbox = CType(e.Item.FindControl("TextBox1"), System.Web.UI.WebControls.TextBox)
                AddHandler _textbox.TextChanged, AddressOf TextBoxChanged
    事件就是无法激活,按理论上应该是当我更改了文本筐内值后,
    随便点击网页的一处,事件就应该被激发。

       Dim _SButton As New System.Web.UI.WebControls.Button
                _SButton = CType(e.Item.FindControl("SButton"), System.Web.UI.WebControls.Button)
                AddHandler _SButton.Click, AddressOf TextBoxChanged
    点击按钮事件立即响应。
    按钮和文本筐在通一列以上代码位于DataGrid1_ItemCreated事件过程定义如下
     Protected Sub TextBoxChanged(ByVal sender As Object, ByVal e As System.EventArgs)
    注页面代码:
    <asp:TextBox ID="TextBox1" Runat=server 
     Width="60" Height="20" AutoPostBack=True  ></asp:TextBox>我不知道问题在何处~~~,我想是不是因为事件的响应前,文本筐内的值就已经被
    填充了?各位有何高见啊~~~请不吝赐教,谢谢了!!!
      

  8.   

    用DataGrid.Items[index].FindControl();
      

  9.   

    remember, "AddHandler" hooks up event handlers dynamically. So upon postback, you have to re-hook up the event handler. But if you addeed the event handler declaratively, then the initialization code will do that for you
    <asp:TextBox ID="TextBox1" Runat=server OnTextChanged="TextBoxChanged"
     Width="60" Height="20" AutoPostBack=True  ></asp:TextBox>
      

  10.   

    我试验了一下
    在MyDataGrid_ItemCreated中
    TextBox t1 = (TextBox) e.item.FindControl("Text1");
    调试发现t1为空值,即没有找到这个Textbox控件,怎么回事?
      

  11.   

    to  ue(似敌是友)
    可否看一下你的源程序?
    [email protected]
      

  12.   


    问题是如何注册事件
    首先,设计时是不行的,只有在运行的时候
    由于TextBox是在datagrid的模板列中,所以应该不能在pageLoad的时候
    楼主是在ItemCreated事件中,我觉得是对的
    然后就是要找到这个TextBox控件,然后才能给它注册
    我试验了一下
    在MyDataGrid_ItemCreated中
    TextBox t1 = (TextBox) e.item.FindControl("Text1");
    调试发现t1为空值,即没有找到这个Textbox控件
    然后就进行不下去了
      

  13.   

    注册事件可以这样:<asp:TextBox ID="TextBox1" Runat=server OnTextChanged="TextBoxChanged"
     Width="60" Height="20" AutoPostBack=True  ></asp:TextBox>
    然后,在.CS或.VB文件中定义TextBoxChanged 事件,事件的域必须是public or protected 
      

  14.   

    首先感谢各位帮助和支持!!!鞠躬!!!到现在似乎已经发现了问题的原因。
    (不敢肯定是因为我没有再作更彻底的测试,等有时间再作)问题原因:
    是因为此控件的上一级控件每次加载时,不论首次加载还是回调控件,
    它都会从数据库读取初始化数据,
    这导致了它的子控件内数据重新绑定,
    这个DataGrid完全象新的一样,这可能是原因。最终我选择了用DataGrid编辑按钮完成,数据更新。
    这样的话,只有当用数据点击更新按钮后,数据才可以更新。因为我考虑到,即便是我用的TextBoxChanged响应了,那么我如何得到此行的控件实例呢?
    参数中的e, 我想虽然它不是DataGrid事件参数,
    但是应该可以通过它得到确切控件的实例。
    但是我并不清楚这如何实现。所以我选择了其他方法解决。
    目前敢肯定是这根注册事件没有关系。
    我想主要原因还是在回送的DataGrid状态保存上。出现这些问题,技术上的原因是:
    我并不了解asp.net控件的事件模型。我感觉这方面的资料真的很少!!!如果可能我希望saucer(思归)能为我们提供这些资料。我现在软件架构是经过过去和各位的讨论得到的,
    有时真怕我用的架构跟控件事件模型冲突。
      

  15.   

    TextBox.TextChanged和DropDownList控件不一样,当DropDownList的AutoPostBack为true,选项的改变立刻响应相关事件,但TextBox.TextChanged的响应机制是不一样的,那怕AutoPostBack为true,也不会立即响应,它需要在页面提交到服务器的时候才会得到处理,页面提交需要其他的控件来触发,TextBox.TextChanged本身不会导致页面提交