You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET GridView中如何检测DropDownList选项是否被修改

解决方案

方法1:利用已添加的HiddenField获取初始值

你已经在EditItemTemplate中添加了HiddenField1存储初始的MemberApproved值,直接在RowUpdating事件中获取该控件的值即可完成对比:

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    DropDownList ddl = (DropDownList)GridView1.Rows[e.RowIndex].FindControl("ddlStatus");
    string NewSelection = ddl.SelectedValue;
    
    // 获取初始值
    HiddenField hiddenInitial = (HiddenField)GridView1.Rows[e.RowIndex].FindControl("HiddenField1");
    string InitialSelection = hiddenInitial.Value;
    
    // 判断是否修改
    if (NewSelection != InitialSelection)
    {
        // 执行值修改后的业务逻辑
    }
}

方法2:通过GridView的DataKeys获取初始值

借助GridView的DataKeys存储初始值,无需额外添加HiddenField:

  1. 修改GridView的DataKeyNames属性,加入MemberApproved:
<asp:GridView ID="GridView1" runat="server" ... DataKeyNames="Id,MemberApproved" ...>
  1. 在RowUpdating事件中直接从DataKeys读取初始值:
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    DropDownList ddl = (DropDownList)GridView1.Rows[e.RowIndex].FindControl("ddlStatus");
    string NewSelection = ddl.SelectedValue;
    
    // 从DataKeys获取初始值
    string InitialSelection = GridView1.DataKeys[e.RowIndex]["MemberApproved"].ToString();
    
    // 对比判断
    if (NewSelection != InitialSelection)
    {
        // 处理修改逻辑
    }
}

方法3:在RowEditing事件中缓存初始值

在用户触发编辑操作时,将初始值存入ViewState,后续在RowUpdating中取出对比:

  1. 添加RowEditing事件处理:
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
    // 获取当前行的初始状态值
    Label lblStatus = (Label)GridView1.Rows[e.NewEditIndex].FindControl("Label1");
    string initialValue = lblStatus.Text;
    
    // 用行Id作为标识存入ViewState,避免多编辑行冲突
    int rowId = Convert.ToInt32(GridView1.DataKeys[e.NewEditIndex]["Id"]);
    ViewState["InitialStatus_" + rowId] = initialValue;
    
    // 进入编辑模式
    GridView1.EditIndex = e.NewEditIndex;
    GridView1.DataBind();
}
  1. 在RowUpdating事件中取出缓存值并对比:
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    DropDownList ddl = (DropDownList)GridView1.Rows[e.RowIndex].FindControl("ddlStatus");
    string NewSelection = ddl.SelectedValue;
    
    // 获取当前行Id并取出缓存的初始值
    int rowId = Convert.ToInt32(GridView1.DataKeys[e.RowIndex]["Id"]);
    string InitialSelection = ViewState["InitialStatus_" + rowId]?.ToString();
    
    if (InitialSelection != null && NewSelection != InitialSelection)
    {
        // 执行修改后的逻辑
    }
    
    // 清理ViewState中的缓存数据
    ViewState.Remove("InitialStatus_" + rowId);
}

内容的提问来源于stack exchange,提问作者AM_MA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 18:12:12