如何在RowUpdating Event GridView中获取单元格值?

时间:2014-06-30 10:12:26

标签: c# asp.net

我想在gridview rowUpdating事件中获取单元格的新值:

 roles.RoleName = gvRoles.Rows[e.RowIndex].Cells[GetColumnIndexByName(row, "RoleName")].Text;

但价值是空的。

我检查过e.NewValues这是一个有序的词典。它包含新更改的值。如何检索更新的新值?

aspx设计是:

<asp:GridView ID="gvRoles" DataKeyNames="RoleId" runat="server" 
    AutoGenerateColumns="False" GridLines="Vertical" CssClass="table 
    table-striped table-bordered" AutoGenerateEditButton="True" 
    OnRowCancelingEdit="gvRoles_RowCancelingEdit" OnRowUpdating="gvRoles_RowUpdating" 
    OnRowEditing="gvRoles_RowEditing">
    <Columns>
        <asp:BoundField DataField="RoleId" HeaderText="RoleId" ReadOnly="True" />
        <asp:BoundField DataField="RoleName" HeaderText="RoleName" ReadOnly="false" />
        <asp:BoundField DataField="Role_Description"  HeaderText="Role Description"  ReadOnly="false" />
        <asp:TemplateField HeaderText="RoleStatus">
            <EditItemTemplate>
                <asp:DropDownList ID="ddlStatus" runat="server" SelectedValue='<%# Bind("Role_Status") %>' >
                <asp:ListItem>True</asp:ListItem>
                <asp:ListItem>False</asp:ListItem>
                </asp:DropDownList>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="lblRoleStatus" runat="server" 
                    Text='<%# Bind("Role_Status") %>'>
                </asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

4 个答案:

答案 0 :(得分:3)

我发现最简单的方法是发现e.NewValues。正如我上面提到的,它是一个有序的字典,只有我需要管理它。

我需要从这个字典中检索新值,这是以这种方式完成的。

if (!string.IsNullOrEmpty(e.NewValues["RoleName"].ToString()))
            {
                roles.RoleName = e.NewValues["RoleName"].ToString();
            }

如果您有模板字段,它也适用于它;

  if (!string.IsNullOrEmpty(e.NewValues["Role_Status"].ToString()))
        {
            roles.Role_Status = Convert.ToBoolean(e.NewValues["Role_Status"].ToString());
        }

这是我发现的最简单的事情。在此之前我只想使用Find控件和转换然后检索所有批次代码。

还有e.OldValues有序字典。每个人都可以用它来比较旧值和新值。如果值相同,则可以通知用户更改值(给出新的单元格值)。

答案 1 :(得分:1)

GridViewRow row = (GridViewRow)gvRoles.Rows[e.RowIndex];

TextBox textRName = (TextBox)row.Cells[1].Controls[0];

string rname=textRname.Text;

答案 2 :(得分:1)

试试这个:

protected void gvRoles_RowUpdating(object sender, GridViewUpdateEventArgs e)
{    
  GridViewRow row = gvRoles.Rows[e.RowIndex];
  TextBox txtBox= (TextBox)(row.Cells[1].Controls[0]);
  if(txtBox!=null)
  {
   String str = txtBox.Text;
  }
}

答案 3 :(得分:0)

经过长时间的努力搜寻,我发现了一篇很好的文章解决了我的问题。如果您在回帖后绑定,请查看页面加载,然后在您能够访问它们之前更新值。

请点击此链接了解更多详情 - &gt; https://taditdash.wordpress.com/2014/06/30/why-gridview-rowupdating-event-is-not-giving-the-updated-values/