Вы можете использовать объект Dictionary в состоянии просмотра для сохранения нескольких значений, например
Dictionary<int, string> ddlValues = new Dictionary<int, string>()
, где int - индекс строки, а string - выбранное значение ddl.Конечно, это может быть int / guid или что-то еще, в зависимости от фактического значения, хранящегося в ddl или int, если вы хотите вместо этого работать с selectedIndex.
на событии страницы, которое вам нужно будет сделать
protected void MyGridView_PageIndexChanging(Object sender, GridViewPageEventArgs e)
{
for(int rowIndex = 0; rowIndex < myGridView.Rows.Length; rowIndex++)
{
DropdownList ddl = myGridView.Rows[rowIndex].FindControl("ddlId") as DropDownList
if(ddl != null)
{
if(ddl.SelectedIndex > 0) //.. or sensible check appropriate to you
{
int ddlIndex = rowIndex * e.NewPageIndex + 1;
//.. add pageIndex and selectedValue to dictionary
ddlValues.Add(ddlIndex, ddl.SelectedValue);
}
}
}
}
Не беспокойтесь о значениях ddl текущей страницы.Они будут сохранены с viewstate обычным способом.Это «скрытые» страницы, которые мы учитываем.Следовательно, мы повторно заполняем словарь, когда страницы сетки.
Словарь можно затем сохранить в session / viewState и использовать для повторного увлажнения выпадающего списка, выполнив процесс в обратном порядке.Например, когда страница загружается (проверка !isPostBack
) или когда сетка перезагружается в зависимости от того, как именно вы ее настроили