我正在使用V2005 C#。
我的.aspx页面中有一个GridView,我可以使用EditItemTemplate中的DropDownList控件更新我的数据库。
我的性别列的DDL:
<asp:TemplateField HeaderText="Gender" SortExpression="Gender">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList2" runat="server" SelectedValue='<%# Bind("Gender") %>'>
<asp:ListItem>M</asp:ListItem>
<asp:ListItem>F</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Gender") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
在我的性别列的DDL EditItemTemplate中,我使用了硬编码值,它可以工作。
但是,我尝试在另一列上实现DDL。这一次,我使用了一个SqlDataSource,它从另一个表中选择数据,而不是使用固定值,但是他们给了我一个错误:
'DropDownList3' has a SelectedValue which is invalid because it does not exist in the list of items.Parameter name: value
我也试图实现SelectedValue='<%# Bind("MemberType") %>'
,但它没有用。
以下是我的MemberType
DDL EditItemTemplate:
<asp:TemplateField HeaderText="MemberType" SortExpression="MemberType">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList3" runat="server" DataSourceID="SqlDataSource2"
DataTextField="MemberType" DataValueField="MemberType" SelectedValue='<%# Bind("MemberType") %>'>
</asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("MemberType") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
有人知道这里有什么问题吗?
谢谢
答案 0 :(得分:0)
嗯......也许这是一个愚蠢的问题,但实际上是在SqlDatasource SELECT查询中返回的列表中的值?一个常见的问题是,如果查询中没有NULL值,那么它不在列表中,因此只要切换到编辑模式,就会抛出错误,因为默认值为null。
我的库中有一个Misc函数,它接受DropDownList引用并添加一个空行。
编辑添加一些代码:
我们使用Telerik Rad Controls,因此这适用于RadComboBox,但由于该控件只是扩展了DropDownList(我认为,它们可能扩展了TextBox ...),添加空项的语法应该类似于我在下面的内容。
// If there is already an empty row, we will not add an aditional empty row
RadComboBoxItem emptyItem = null;
emptyItem = rcbObject.FindItemByValue(null) ?? rcbObject.FindItemByValue("");
if (emptyItem !=null)
return;
// Add a Empty(null) item to the dropdown list
RadComboBoxItem item_null = new RadComboBoxItem();
item_null.Text = "";
item_null.Value = null;
rcbObject.Items.Insert(0, item_null);
希望这有帮助!