我有一个要求,如果我的网格视图中的任何值发生更改,我必须更新文本框。我有一个2行的gridview ..
一个带有标签的模板字段和另一个带有文本框的模板字段...
我的网格视图看起来像
name value
a (empty textbox)
b (empty textbox)
c (empty textbox)
现在,当用户在文本框中输入值时,它应自动更新与此链接的另一个文本框。
我的问题是,当有人在文本框中输入值时,应该触发一个事件!
(我从数据库中获取名称a,b,c)。我不希望有一个编辑链接或更新链接,因为要输入的所有值都是强制性的!
我尝试了Grid_SelectedIndexChanged1,但这没有解雇..有什么我缺少或我需要改变,以便evant被解雇,我可以更新其他文本框?
我是ASP.NET的新手,所以请帮忙!
提前致谢!
答案 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
}