此下拉列表位于网格视图中:
<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
视为null。
所以问题是:
1。如何使用3个值加载下拉列表,其中一个值为空?
2. 如何在不使用onchange或其他任何事件的情况下阅读所选的下拉列值,例如:
CheckBox chk = row.Cells[0].Controls[0] as CheckBox;
bool isChecked = chk.Checked;
答案 0 :(得分:0)
回答你的问题:
您无法将null
设置为ListItem的值,因为null
不是字符串文字。 null
表示缺少值。 null
本身就是&#34;而不是价值&#34;。因此,您需要在代码中处理它:
drpList.SelectedValue = dbObj.FieldValue ?? "(n/a)";
我不确定你在这里问的是什么。我建议使用FindControl而不是使用索引来访问您的控件。
答案 1 :(得分:0)
关于你的问题,请参阅下面的文章,了解asp.net中的下拉列表
http://www.laptrinhdotnet.com/2015/07/su-dung-control-dropdownlist-trong.html