У меня есть простая страница ASP с сеткой привязки данных (привязана к источнику объекта). Сетка находится на странице мастера и имеет флажок «выбрать» для каждой строки.
На одном этапе мастера я связываю GridView:
protected void Wizard1_NextButtonClick(object sender, WizardNavigationEventArgs e)
{
...
// Bind and display matches
GridViewMatches.EnableViewState = true;
GridViewMatches.DataSource = getEmailRecipients();
GridViewMatches.DataBind();
И когда нажимается кнопка «Готово», я перебираю строки и проверяю, что выбрано:
protected void Wizard1_FinishButtonClick(object sender, WizardNavigationEventArgs e)
{
// Set the selected values, depending on the checkboxes on the grid.
foreach (GridViewRow gr in GridViewMatches.Rows)
{
Int32 personID = Convert.ToInt32(gr.Cells[0].Text);
CheckBox selected = (CheckBox) gr.Cells[1].FindControl("CheckBoxSelectedToSend");
Но на этом этапе GridViewMatches.Rows.Count = 0! Я не переплетаю сетку, мне не нужно, верно? Я ожидаю, что view-state сохранит состояние. (Также, если я перепривязываю сетку, мои флажки выбора будут сняты)
NB. На этой странице также динамически добавляются пользовательские элементы управления в методе OnInit. Я слышал, что это может мешать состоянию представления, но, насколько я могу судить, я делаю это правильно, и состояние представления для этих добавленных элементов управления, кажется, работает (значения сохраняются между обратными передачами)
Заранее большое спасибо за любую помощь!
Райан
ОБНОВЛЕНИЕ: Может ли это быть связано с тем, что я устанавливаю источник данных программно? Мне было интересно, связывает ли механизм asp базу данных в течение жизненного цикла страницы с источником данных, который еще не определен. (На тестовой странице GridView автоматически «привязывается к данным». Я не хочу, чтобы сетка была связана заново, я просто хочу значения из состояния просмотра из предыдущего поста!
Кроме того, у меня есть это в заголовке asp: ViewStateEncryptionMode = "Никогда" - это должно было разрешить случайное сообщение "Недействительный MAC-адрес проверки состояния"
Для справки, мой GridView определен следующим образом:
<asp:GridView ID="GridViewMatches" runat="server" AllowSorting="True" AutoGenerateColumns="False"
BackColor="White" BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px" CellPadding="3"
OnDataBinding="GridViewMatches_OnBinding">
<Columns>
<asp:BoundField DataField="PersonID"><ItemStyle CssClass="hidden"/></asp:BoundField>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="CheckBoxSelectedToSend" runat="server"
Checked='<%# DataBinder.Eval(Container.DataItem, "SelectedToSend") %>'/>
</ItemTemplate>
...