asp.net - 在 RowEditing 上设置 EditIndex 时,GridView 不会更改为编辑模式

标签 asp.net vb.net gridview edit

我正在使用 Visual Studio 2010、VB.NET、目标框架 .NET 4.0。

我有一个 GridView,我将其绑定(bind)到某个对象集合,其中有一个 CommandField 列,该列应该允许编辑所选行。

我正在 RowEditing 事件处理程序中正确设置 EditIndex 属性。

问题是:当我单击生成的“编辑”链接时,显然没有任何反应,该行再次以“查看模式”而不是“编辑模式”呈现。

但是,如果我进行一些随机回发,例如单击“doNothing”按钮,则该行会在下一次回发中以“编辑模式”呈现。

我已经成功地在以下代码中重现了该问题:

ASPX:

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="MyForm.aspx.vb" Inherits="MySandBox.MyForm" %>

<%@ Register Src="MyControl.ascx" TagName="MyControl" TagPrefix="uc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:GridView ID="gvInfrator" runat="server" AutoGenerateColumns="false">
        <Columns>
            <asp:CommandField ShowEditButton="true" />
            <asp:BoundField HeaderText="MyField" DataField="MyField" />
        </Columns>
    </asp:GridView>
    <asp:Button ID="btnDoNothing" runat="server" Text="Just do a postback" />
    </form>
</body>
</html>

背后代码:

Public Class MyDto
    Public Property MyField As String
End Class

Public Class MyForm
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Me.BindMyData()
    End Sub

    Private Sub BindMyData()
        Dim myData As New MyDto
        myData.MyField = "My field value"

        Me.gvInfrator.DataSource = New MyDto() {myData}
        Me.gvInfrator.DataBind()
    End Sub

    Protected Sub gvInfrator_RowEditing(sender As Object, e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles gvInfrator.RowEditing
        Me.BindMyData() 

        Me.gvInfrator.EditIndex = e.NewEditIndex
    End Sub

End Class

我做错了什么吗?这是 .NET Framework 4 中的错误吗?有什么解决办法吗?

最佳答案

您需要在设置 GridView 的 EditIndex 之后绑定(bind)数据。

Protected Sub gvInfrator_RowEditing(sender As Object, e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles gvInfrator.RowEditing
    Me.gvInfrator.EditIndex = e.NewEditIndex
    Me.BindMyData() 
End Sub

关于asp.net - 在 RowEditing 上设置 EditIndex 时,GridView 不会更改为编辑模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26653613/

相关文章:

c# - 在父窗体中居中 MessageBox

vb.net - 枚举类型实现位于类实现内部还是外部

android - 网格回收器 View ,子 wrap_content

asp.net - aspnetdb.mdf 是否曾经用于生产在线 Web 应用程序?

c# - Global.asax 中的自动事件连接

wpf - 线程是使用不接受参数的 ThreadStart 委托(delegate)创建的

android - 自定义对话框与 imageview 到 gridview

flutter - 如何在 flutter 中制作填字游戏类型的拼图?

asp.net - 关于asp.net网格控件的思考

asp.net - (asp.net) 我的 sql 代码(更新语句)在数据库中有效,但在程序中无效