我在 GridView 中有一个列,在 EditTemplate 中有一个下拉列表
此下拉列表的数据在用户进入该行的编辑模式后动态添加 (items.add())。
foreach (var bgElement in userCropList.FirstOrDefault(c => c.Crop == cropToBeUpdated).BGs)
{
ddl.Items.Add(bgElement.BG);
}
ddl.SelectedIndex = userCropList.FirstOrDefault(c => c.Crop == cropToBeUpdated).BGs.FindIndex(d => d.Default == true);
当用户单击更新按钮以保存他的更改时,页面会进行回发,因此会丢失项目以及我在 RowUpdating 事件中的后续位需要的 selectedindex。
DropDownList ddl = (DropDownList)GVCrops.Rows[e.RowIndex].FindControl("ddlAvailableBGs");
updatedCrop.BGs.FirstOrDefault(c => c.BG == ddl.SelectedValue).Default = true;
我想到的是将用户选择的值放入视图状态变量中,并在 RowUpdating 事件中从中读取。
我在问我是否有一个更容易(不是很难)或已经可用的东西,我错过了这对我来说可能吗?
编辑:
好吧,原来我的方法..
行编辑():
ViewState.Add("SelectedBGIndex", ddl.SelectedValue);
行更新():
if (ViewState["SelectedBGIndex"] != null)
{
updatedCrop.BGs.FirstOrDefault(c => c.BG == ViewState["SelectedBGIndex"].ToString()).Default = true;
}
..显然不会出于同样的原因工作。当用户单击该行的更新按钮时,它将回发,并且下拉列表被重置,没有选择,也没有里面的项目。
似乎解决方案将是一个 JavaScript 函数。任何想法如何处理它?