На странице ASP.NET у меня есть сетка, которая содержит раскрывающийся список в одном из столбцов. В то время как другие столбцы в представлении таблицы привязаны к данным, раскрывающийся список НЕТ и содержит только 3 предустановленных значения: «Франк», «Да» и «Нет». («Фрэнк» используется в качестве примера, так что я не получаю ложные показания из моего предпочтительного пустого параметра)
<asp:GridView ID="testGrid" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="Code1" HeaderText="Code1" />
<asp:BoundField DataField="Code2" HeaderText="Code2" />
<asp:TemplateField HeaderText="Like Frank?">
<ItemTemplate>
<asp:DropDownList runat="server" ID="ddlLikeFrank">
<asp:ListItem>Frank</asp:ListItem>
<asp:ListItem>Yes</asp:ListItem>
<asp:ListItem>No</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
<asp:HyperLinkField ... HeaderText="File" />
</Columns>
</asp:GridView>
<br />
<asp:Button ID="cmdUpdate" runat="server" Text="Update" OnClick="cmdUpdate_Click" /></div>
Мне не нужен AutoPostBack для этих выпадающих списков, поскольку я хочу учитывать их выбранные значения только при нажатии кнопки cmdUpdate.
protected void cmdUpdate_Click(object sender, EventArgs e)
{
bool likesFrank = false;
string selected = "";
DropDownList ddl = null;
GridViewRow current = null;
// Go through each row and check the dropdown list.
for (int i = 0; i < testGrid.Rows.Count; i++)
{
current = testGrid.Rows[i];
...
ddl = (DropDownList)(current.FindControl("ddlLikeFrank"));
/* THIS FOR LOOP IS WAS USED FOR INVESTIGATING THIS ISSUE*/
for (int j = 0; j < ddl.Items.Count; j++)
{
if (ddl.Items[j].Selected)
{
continue;
}
}
selected = ddl.SelectedItem.Value;
switch (selected)
{
case LIKE: // "Yes"
likesFrank = true;
break;
case DONT_LIKE: // "No"
likesFrank = false;
break;
default: // If nothing is selected in the drop-down list, move on.
continue;
} // end switch block
/* USE THE DERIVED BOOLS HERE */
} // end for loop on grid rows
} // end method cmdUpdateClick
Проблема в следующем: Независимо от того, какой элемент выбран в любом из выпадающих списков, моя страница считает, что для каждого из них установлено значение "Франк", то есть первый элемент. Более того, если я поставлю точку останова в верхней части цикла for, обозначенного как «Код расследования», а затем взаимодействую со страницей следующим образом:
- Выберите различные параметры выпадающего списка для разных строк.
- Нажмите кнопку Обновить.
... мой код отладки говорит мне, что ни один из пунктов не выбран! Ни один из них !! Я могу посмотреть на 2 Да и 3 Нет на странице, и мои инструменты отладки в VS2008 говорят мне, что в каждом раскрывающемся списке ничего не выбрано .
Как это возможно? (ПРИМЕЧАНИЕ: я пробовал это с EnableViewState, установленным в true, и с EnableViewState, даже не упомянутым в заголовке страницы.)
Спасибо.