【发布时间】:2015-12-21 19:01:10
【问题描述】:
此下拉列表位于网格视图中:
<asp:TemplateField HeaderText="Test">
<ItemTemplate>
<asp:DropDownList ID="Hello" runat="server" SelectedValue='<%# Eval("beta") %>'>
<asp:ListItem Value="" Text="-">-</asp:ListItem>
<asp:ListItem Value="0" Text="0">0</asp:ListItem>
<asp:ListItem Value="1" Text="1">1</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
每次必须加载包含此 gridview 的页面时,我都会遇到异常:
{"'beta' has a SelectedValue which is invalid because it does not exist in the list of items.\r\nParameter name: value"}
beta 的值为 null,然而,
<asp:ListItem Value="null" Text="null">null</asp:ListItem>
不起作用... 注意 beta 来自数据库作为下一个可能的值:null、0 或 1。还尝试从另一个下拉列表中获取值但不起作用,我试过这个:
GridViewRow row = GridView1.Rows[i]; //this is inside a for loop
var ddl = row.Cells[8].Controls[0] as DropDownList;
string test= ddl.SelectedIndex;
调试时我总是将ddl 设为空。
所以问题是:
1.如何加载下拉列表中的三个值,其中一个为空?
2. 如何在不使用 onchange 之类的任何事件或其他任何事件的情况下读取选定的下拉值,例如:
CheckBox chk = row.Cells[0].Controls[0] as CheckBox;
bool isChecked = chk.Checked;
【问题讨论】:
-
第一个问题答案你不能
null代表一个空对象,你在值和文本 null 中提到的任何一个实际上是一个字符串。您可以通过使用可空运算符来克服空值并分配默认值,例如<%# Eval("beta") ?? "1" %> -
@Suprabhat 是的,但是有没有办法让它为空? 'beta' 字段实际上是
boolean?所以它可以是:true|false|null -
就像我说的那样分配默认值,比如修改你的标记
<asp:ListItem Value="" Text="-1">-</asp:ListItem>并使用<%# Eval("beta") ?? "-1" %> -
@Suprabhat 是的,刚刚尝试过,但仍然是同样的错误 pff
-
好的,我在之前的评论中得到了它,我在文本字段
<asp:ListItem Value="" Text="-1">-</asp:ListItem>中分配了一个默认值,但我通过值选择它,将您的标记修改为此<asp:ListItem Value="-1" Text="--">-</asp:ListItem>
标签: asp.net .net gridview webforms user-controls