Возможно, это не самая лучшая идея, но вы можете запросить в базе данных текущее состояние и сравнить с тем, что вы получили с веб-страницы во время нажатия кнопки обратной передачи, или что-то в этом роде.Или вы можете пойти с ответом Brians.
Можно сохранить список объектов в Viewstate и получить к нему доступ при последующей обратной передаче.Единственное, что объект, который вы пытаетесь сохранить, должен быть определен как сериализуемый.
Обновление:
Подход ViewState
Я чувствую, что это может подойти вам, и это требует немного linq.Вам нужно создать класс следующим образом:
[Serializable()]
public class OptionState
{
//the id of the item
int ID {get;set;}
//state of the checkbox
bool Checked {get;set;}
}
Обратите внимание на атрибут Serializable.Это необходимо для того, чтобы экземпляр сохранился в состоянии просмотра.
Добавьте список параметров в состояние просмотра:
var lstOptions = (from x in <your_option_store>
select new OptionState{ID = x.ID, Checked = x.Checked}).ToList();
ViewState.Add("options", lstOptions);
Вот фрагмент кода, который должен войти в ваше нажатие кнопки:
foreach(GridViewRow row in gvOptions.Rows)
{
//not writing the bit of code
//which gets the ID and the
//state of checkbox of
//the gridview row being processed
OptionState currentState = GetOptionStateObjectFromRow(row);
List<OptionState> lstStates = (List<OptionState>) ViewState["options"];
OptionState originalState = lstStates.FirstOrDefault(x => x.ID == currentState.ID);
if(currentState.Checked != originalState.Checked)
{
//the appropriate db call needs to be done here.
}
}