Gridview事件未触发

时间:2012-03-29 18:05:01

标签: c# asp.net gridview

我有一个要求,如果我的网格视图中的任何值发生更改,我必须更新文本框。我有一个2行的gridview ..

一个带有标签的模板字段和另一个带有文本框的模板字段...

我的网格视图看起来像

                   name                 value
                   a                     (empty textbox)
                   b                     (empty textbox)
                   c                      (empty textbox)

现在,当用户在文本框中输入值时,它应自动更新与此链接的另一个文本框。

我的问题是,当有人在文本框中输入值时,应该触发一个事件!

(我从数据库中获取名称a,b,c)。我不希望有一个编辑链接或更新链接,因为要输入的所有值都是强制性的!

我尝试了Grid_SelectedIndexChanged1,但这没有解雇..有什么我缺少或我需要改变,以便evant被解雇,我可以更新其他文本框?

我是ASP.NET的新手,所以请帮忙!

提前致谢!

2 个答案:

答案 0 :(得分:2)

如果更改应在文本更改时触发,则应使用OnTextChanged的{​​{1}}事件,并将TextBox设置为true。

修改

为避免重复工作,使用上述方法,您可以使用 Pankaj Garg 在其答案中概述的技术找到行索引:

AutoPostBack

这种方法的最大警告是,它不能容忍标记的变化。如果您将int rowIndex = ((GridViewRow)((TextBox)sender).NamingContainer).RowIndex; 包装在另一个实现TextBox的控件中,则上面的示例将会中断。例如:

INamingContainer

话虽这么说,你会想要相应地标记你的标记,以便其他开发人员知道在进行更改时要小心。

修改

作为替代方案,您还可以使用<asp:TemplateField> <asp:Panel ID="Panel1" runat="server"> <!-- becomes the naming container --> <asp:TextBox ID="TextBox1" runat="server" onchange='valueChanged(<%# Container.ItemIndex %>);' /> </asp:Panel> </asp:TemplateField> 的{​​{1}}事件在JavaScript中触发回发:

onchange

在代码隐藏中,覆盖TextBox方法,并将更新逻辑放在那里:

<script type="text/javascript">
    valueChanged = function(rowIndex){
        __doPostBack("<%= GridView1.ClientID %>", rowIndex);
    }
</script>
<asp:GridView ID="GridView1" runat="server" DataKeyNames="ID" ...>
    <Columns>
        <asp:TemplateField>
            <asp:TextBox ID="TextBox1" runat="server" onchange='valueChanged(<%# Container.ItemIndex %>);' />
        </asp:TemplateField>
    </Columns>
</asp:GridView>    

答案 1 :(得分:1)

您可以查看当前行索引,如下所示......

((GridViewRow)((TextBox)sender).NamingContainer).RowIndex

OnTextChanged事件创建处理程序并设置AutoPostBack Property True

protected void TextBox_TextChanged(object sender, EventArgs e)
{
     int CurrentGridIndex = ((GridViewRow)((TextBox)sender).NamingContainer).RowIndex
}