我在GridView中有一个列,在EditTemplate
中有一个Dropdownlist在用户进入该行的编辑模式后,动态添加此下拉列表的数据(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;
我想到的是将用户在viewstate变量中选择的值放入RowUpdating事件中并从中读取。
我在问是否有一个更容易(不是很难)或已经可用的东西,我可能会错过哪些对我来说?
修改
好的,结果我的方法..
RowEditing():
ViewState.Add("SelectedBGIndex", ddl.SelectedValue);
RowUpdating():
if (ViewState["SelectedBGIndex"] != null)
{
updatedCrop.BGs.FirstOrDefault(c => c.BG == ViewState["SelectedBGIndex"].ToString()).Default = true;
}
..显然不会出于同样的原因。 当用户单击该行的更新按钮时,它将回发并重置下拉列表,没有选择,也没有内容。
似乎解决方案将是一个JavaScript函数。 有任何想法如何处理它?</ p>