网格视图事件未激发

本文关键字:事件 视图 网格 | 更新日期: 2023-09-27 18:29:37

我有一个要求,如果网格视图中的任何值发生更改,我必须更新文本框。。我有一张两排的格子图。。

一个是带有标签的模板字段,另一个是带文本框的模板字段。。。

我的网格视图看起来像

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

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

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

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

我尝试了Grid_SelectedIndexChanged1,但没有启动。。是我缺少了什么,还是我需要更改,以便启动evant,然后我可以更新另一个文本框??

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

提前感谢!

网格视图事件未激发

如果更新应该在文本更改时触发,则应使用TextBoxOnTextChanged事件,并将AutoPostBack设置为true。

编辑

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

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>

也就是说,您希望相应地标记标记,以便其他开发人员知道在进行更改时要小心。

编辑

作为替代方案,您还可以使用TextBox:的onchange事件在JavaScript中触发回发

<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>    

在后面的代码中,覆盖RaisePostBackEvent方法,并将更新逻辑放在那里:

protected override void RaisePostBackEvent(IPostBackEventHandler source, string eventArgument)
{
    base.RaisePostBackEvent(source, eventArgument);
    if (source == GridView1)
    {
        int rowIndex = int.Parse(eventArgument);
        TextBox txt = GridView1.Rows[rowIndex].FindControl("TextBox1") as TextBox;
        if (txt != null)
        {
            var id = (int)GridView1.DataKeys[rowIndex]["ID"];
            var text = txt.Text.Trim();
            //update the database
        } 
    }    
}

您可以检查当前行索引,如下所示。。。

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

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

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