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:
- 修改GridView的
DataKeyNames属性,加入MemberApproved:
<asp:GridView ID="GridView1" runat="server" ... DataKeyNames="Id,MemberApproved" ...>
- 在
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中取出对比:
- 添加
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(); }
- 在
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
相关产品推荐
相关产品推荐

