【发布时间】:2011-12-09 22:56:50
【问题描述】:
在 ASP.NET 页面上,我有一个 gridview,它在其中一个列中包含一个下拉列表。虽然 gridview 中的其他列是数据绑定的,但下拉列表不是,并且仅包含 3 个预设值“Frank”、“Yes”和“No”。 (以“Frank”为例,这样我就不会从我喜欢的空白选项中得到错误的读数)
<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
问题是这样的:无论在任何下拉列表中选择什么项目,我的页面都认为它们中的每一个都设置为“Frank”,即第一个项目。此外,如果我在for循环的顶部放置一个断点,表示为“调查代码”,然后与页面交互如下:
- 为不同的行选择不同的下拉列表选项。
- 点击更新按钮。
...我的调试代码告诉我没有选择任何项目! 没有一个!!我可以在页面上查看 2 个是和 3 个否,而我在 VS2008 中的调试工具告诉我每个下拉列表都没有选择任何内容 .
这怎么可能? (注意:我已经尝试过将 EnableViewState 设置为 true,并且在页眉中甚至没有提到 EnableViewState。)
谢谢。
【问题讨论】:
标签: c# asp.net gridview drop-down-menu