【问题标题】:Error while binding data in GridView through Row Bound Event通过行绑定事件在 GridView 中绑定数据时出错
【发布时间】:2026-01-17 21:05:01
【问题描述】:

我在 aspx 页面中有以下 gridview:

    <asp:GridView Runat="server" id="gv1" PageSize="20" Visible="False" AllowPaging="True" Width="100%"
        CssClass="clsDataGrid" AutoGenerateColumns="false"  DataKeyNames="intProofSLNo,txtAdminRemarks" CommandArgument='Eval(intProofSLNo,txtAdminRemarks)' 
        OnRowCommand="gv1_RowCommand" OnRowDataBound ="gv1_OnRowDataBound" >
    <asp:BoundField DataField="intProofSLNo" ReadOnly="True" Visible="false" ItemStyle-Wrap="false" HeaderText="Sl No" ItemStyle-CssClass="clsNormalText"></asp:BoundField>

    <asp:TemplateField HeaderText="Action">
<ItemTemplate>

    <asp:LinkButton ID="lnkbtnApprove" runat="server" CommandName="Approve" Text= "Approve / " />
    <asp:LinkButton ID="lnkbtnReject" runat="server" CommandName="Reject" Text= "Reject" />
</ItemTemplate>
    </asp:TemplateField>


    <asp:TemplateField HeaderText="Admin Remarks">
<ItemTemplate>
    <asp:Label ID="lblAdminRemarks" runat="server" ItemStyle-Wrap="True" Text='<%# Bind("txtAdminRemarks")%>'></asp:Label>

</ItemTemplate>
<EditItemTemplate>

    <asp:TextBox ID="txtAdminRemarksEdit" runat="server" cssclass=clsCommonInput  MaxLength="252"   Text='<%# DataBinder.Eval(Container.DataItem, "txtAdminRemarks")%>'></asp:TextBox>

</EditItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Edit">
<ItemTemplate>
    <asp:LinkButton ID="lblEdit" runat="server" Text="Edit" ToolTip="Edit" CommandName="Edit" CommandArgument='<%# Container.DataItemIndex %>'>
    </asp:LinkButton>
</ItemTemplate>
<EditItemTemplate>
    <asp:LinkButton ID="lnkUpdate" Width="38" runat="server" Text="Update|" CommandName="Update"CommandArgument='<%# Container.DataItemIndex %>' CausesValidation="true" ToolTip="Save"> </asp:LinkButton>
   <asp:LinkButton ID="lnkCancel" runat="server" Width="40" Text="Cancel" CommandName="Cancel"
    CausesValidation="false" ToolTip="Reset"></asp:LinkButton>
                                                                            </EditItemTemplate>
                                                                        </asp:TemplateField>    
                                                            </Columns>
                                                        </asp:GridView>

用户单击“编辑”链接,使“更新”和“取消”链接可见。然后在文本框中输入备注并单击“更新”。触发行命令事件,更新数据库中的备注对于该特定行中的条目。同一个事件调用绑定函数:

 Protected Sub gv1_RowCommand(sender As Object, e As GridViewCommandEventArgs)


    If e.CommandName = "Update" Then

                  //some code to update remarks//
                gv1.EditIndex = -1
                subBindDataGrid()

     End If

subBindDataGrid() 触发以下行绑定事件,该事件根据管理员备注隐藏按钮:

 Protected Sub gv1_OnRowDataBound(sender As Object, e As GridViewRowEventArgs)

        If e.Row.RowType = DataControlRowType.DataRow Then

            Dim lblAdminRemarks As Label = DirectCast(e.Row.FindControl("lblAdminRemarks"), Label)
            Dim lnkReject As LinkButton = DirectCast(e.Row.FindControl("lnkbtnReject"), LinkButton)
            Dim lnkApprove As LinkButton = DirectCast(e.Row.FindControl("lnkbtnApprove"), LinkButton)
            Dim lnkEdit As LinkButton = DirectCast(e.Row.FindControl("lblEdit"), LinkButton)
            If DataBinder.Eval(e.Row.DataItem, "txtAdminRemarks").ToString().Trim = "Auto-Approved" Then
                lnkApprove.Visible = False
                lnkReject.Visible = False
                lnkEdit.Visible = False
            Else
                lnkbtnApprove.Visible = True
                lnkbtnReject.Visible = True
              End If 
        End If

备注在数据库中更新。但是,在绑定中存在一些问题,而不是显示网格,页面被重定向到错误页面。调试时任何地方都没有抛出异常。在“编辑”命令中也调用了相同的事件。但是,该功能在那里运行良好。请提出语法是否有任何问题。

【问题讨论】:

  • “重定向到错误页面”是什么意思?如果您使用标准错误处理,您应该看到带有错误消息和堆栈跟踪详细信息的经典黄屏死机,否则您正在使用自定义错误处理。在这种情况下,我建议您暂时关闭自定义处理。

标签: asp.net vb.net gridview


【解决方案1】:

我看到您没有在 GridView 静态定义上定义 DataSourceID,请确保您在 subBindDataGrid 过程中为 GridView 定义了一个 DataSource,否则它将在输入中有一个空数据源。

【讨论】:

  • 我已经在 Gridview 中定义了一个数据源。 PFB subBindDataGrid() 中的一些代码行 - //获取数据集的代码// gv1.DataSource = ds1.Tables(0) gv1.DataBind()