如何在处理OnRowEditing时获取ASP.NET GridView中的单元格内容?

时间:2010-11-19 14:54:56

标签: asp.net events gridview

我有一个带有BoundField列的GridView和一些项目模板,如下所示:

<asp:GridView ID="gvUsers" runat="server" AutoGenerateColumns="False" OnRowCommand="gvUsers_RowCommand" 
OnRowDataBound="gvUsers_RowDataBound" DataKeyNames="UserId" OnRowEditing="gvUsers_OnRowEditing" 
OnRowUpdating="gvUsers_OnRowUpdating" OnRowUpdated="gvUsers_OnRowUpdated"
     DataSourceID="DataSource1" Width="807px" Height="105px" 
    AllowPaging="True" >
<Columns>
    <asp:BoundField DataField="UserName" HeaderText="User Name" 
        SortExpression="UserName" />
    <asp:TemplateField HeaderText="Approver">
        <ItemTemplate>
            <asp:CheckBox ID="cbApprover" runat="server" Enabled="false" />
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Auditor">
        <ItemTemplate>
            <asp:CheckBox ID="cbAuditor" runat="server" Enabled="false" />
        </ItemTemplate>
    </asp:TemplateField>
     <asp:TemplateField>
        <ItemTemplate>
            <asp:LinkButton ID="btnEdit" runat="server" 
                CommandArgument='<%# Eval("UserName") %>' CommandName="Edit" Text="Edit" />
            <asp:Label ID="lblPipe1" runat="server" Text=" | " />
            <asp:LinkButton ID="btnUpdate" runat="server" 
                CommandArgument='<%# Eval("UserName") %>' CommandName="Update" Text="Update" />
            <asp:Label ID="lblPipe" runat="server" Text=" | " />
            <asp:LinkButton ID="btnDelete" runat="server" 
                CommandArgument='<%# Eval("UserName") %>' CommandName="Remove" 
                OnClientClick="return confirm('Are you sure you want to delete this user?');" 
                Text="Delete" />
        </ItemTemplate>
    </asp:TemplateField>
</Columns>

在处理Edit链接按钮时,我需要使用BoundField,UserName中的值。不幸的是,在OnRowEditing处理程序中,所有字符串都为空“”。在随后的OnRowDataBound处理程序中,e.Row.RowState == DataControlRowState.Edit所涉及的行也是如此。有没有办法在用户点击编辑链接后获取此值,并开始OnRowEditing事件?

2 个答案:

答案 0 :(得分:1)

我找到了一个比我希望的更复杂的解决方案。我稍后会显示代码但是我会执行以下操作:

  1. 创建了一个HiddenField来保存 我要编辑的单元格的值 它的观点状态。
  2. 在OnRowDataBound处理程序中,我将值赋给了
    HiddenField。
  3. 如上所示,ItemTemplate将UserName作为一个发送 论点。我存储了这个值 HiddenField。
  4. 在命令处理程序之后触发OnRowEditing。那是我的地方 阅读HiddenField。
  5. 如果有人有更简单的解决方案,我很乐意听到它。

答案 1 :(得分:0)

你是否在没有EditItemTemplates的TemplatedItems中使用后期绑定?