在VS2010 / ASP.NET4网页中,我有一个ListView控件用于编辑和添加数据。在里面,我添加了一个DDL:
<td><asp:DropDownList ID="DropDownList2" runat="server" DataSourceID="SqlDataSource7" DataTextField="Unit" DataValueField="UnitID"SelectedValue='<%# Bind("UnitID") %>' AutoPostBack="True"></asp:DropDownList></td>
在编辑数据记录时,DDL确实显示在Unit字段中。我更改了Unit并单击了Update按钮,然后弹出一个错误: 无法将值NULL插入列'UnitID',表'Employee'。
怎么了?
更新:
检查了GridView和ListView代码,发现这两个控件之间有所不同。
GridView使用TemplateField而不是BoundField作为DDL。
<asp:TemplateField HeaderText="UnitID" SortExpression="UnitID"> <EditItemTemplate><asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" DataSourceID="SqlDataSource5" DataTextField="Unit" DataValueField="UnitID" SelectedValue='<%# Bind("UnitID") %>'> </asp:DropDownList></EditItemTemplate>;
和一个ItemTemplate:
<ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# Bind("UnitID") %>'></asp:Label></ItemTemplate> </asp:TemplateField>
我刚刚将DDL添加到ListView的EditItemTemplate:
<EditItemTemplate> <td><asp:DropDownList ID="DropDownList2" runat="server" DataSourceID="SqlDataSource7" DataTextField="Unit" DataValueField="UnitID" SelectedValue='<%# Bind("UnitID") %>' AutoPostBack="True"></asp:DropDownList></td>
ListView的ItemTemplate显示: &LT; ItenTemplate&GT; '/&gt;
显然,我的ListView缺少Text ='&lt;%#Bind(“UnitID”)%&gt;的一些代码。我应该在哪里将此ItemTemplate添加到ListView?
编辑2:
我手动将其添加到
中<asp:ListView ID="ListView2"
runat="server"
DataKeyNames="EmployeeID"
DataSourceID="SqlDataSource3"
InsertItemPosition="LastItem">
<AlternatingItemTemplate>
<tr style="">
<td>
<asp:Button ID="EditButton"
runat="server" CommandName="Edit"
Text="Edit" />
</td>
<td>
<asp:Label ID="EmployeeIDLabel"
runat="server"
Text='<%# Eval("EmployeeID") %>' />
</td>
<td>
<asp:Label ID="OOLIDLabel"
runat="server"
Text='<%# Eval("OOLID") %>' />
</td>
....
</tr>
</AlternatingItemTemplate>
<EditItemTemplate>
<tr style="">
<td>
<asp:Button ID="UpdateButton"
runat="server" CommandName="Update"
Text="Update" />
<asp:Button ID="CancelButton"
runat="server" CommandName="Cancel"
Text="Cancel" />
</td>
<td>
<asp:Label ID="EmployeeIDLabel1"
runat="server"
Text='<%# Eval("EmployeeID") %>' />
</td>
<td>
<asp:TextBox ID="OOLIDTextBox"
runat="server"
Text='<%# Bind("OOLID") %>' />
</td>
<td>
<asp:DropDownList ID="DropDownList2" runat="server" DataSourceID="SqlDataSource7"
DataTextField="Unit" DataValueField="UnitID" SelectedValue='<%# Bind("UnitID") %>' AutoPostBack="True">
</asp:DropDownList>
</td>
<!--<td>
<asp:TextBox ID="UnitIDTextBox"
runat="server"
Text='<%# Bind("UnitID") %>' />
</td>-->
</EditItemTemplate>
<EmptyDataTemplate>
<table runat="server" style="">
<tr>
<td>
No data was returned.</td>
</tr>
</table>
</EmptyDataTemplate>
<InsertItemTemplate>
<tr style="">
</tr>
</InsertItemTemplate>
<ItemTemplate>
<tr style="">
<td>
<asp:Button ID="EditButton"
runat="server" CommandName="Edit"
Text="Edit" />
</td>
<td>
<asp:Label ID="EmployeeIDLabel"
runat="server"
Text='<%# Eval("EmployeeID") %>' />
</td>
<td>
<asp:Label ID="OOLIDLabel"
runat="server"
Text='<%# Eval("OOLID") %>' />
</td>
...
</tr>
</ItemTemplate>
<LayoutTemplate>
...
</LayoutTemplate>
<SelectedItemTemplate>
<tr style="">
<td>
<asp:Button ID="EditButton"
runat="server" CommandName="Edit"
Text="Edit" />
</td>
<td>
<asp:Label ID="EmployeeIDLabel"
runat="server"
Text='<%# Eval("EmployeeID") %>' />
</td>
<td>
<asp:Label ID="OOLIDLabel"
runat="server"
Text='<%# Eval("OOLID") %>' />
</td>
...
</SelectedItemTemplate>
</asp:ListView>
<asp:SqlDataSource ID="SqlDataSource3"
runat="server"
ConnectionString="<%$ ConnectionStrings:EmployeeTestConnectionString %>"
DeleteCommand="DELETE FROM [Employee] WHERE [EmployeeID] = @EmployeeID"
InsertCommand="INSERT INTO [Employee] ([OOLID], ) VALUES (@OOLID, @LASTNAME, "
SelectCommand="SELECT * FROM [Employee] WHERE ([EmployeeID] = @EmployeeID)"
UpdateCommand="UPDATE [Employee] SET [OOLID] = @OOLID, [.... WHERE [EmployeeID] = @EmployeeID">
<DeleteParameters>
<asp:Parameter Name="EmployeeID"
Type="Int32" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="OOLID"
Type="Int32" />
....
</InsertParameters>
<SelectParameters>
<asp:ControlParameter ControlID="GridView1"
Name="EmployeeID"
PropertyName="SelectedValue"
Type="Int32" />
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="OOLID"
Type="Int32" />
<asp:Parameter Name="LASTNAME"
Type="String" />
....
</UpdateParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SqlDataSource7"
runat="server"
ConnectionString="<%$ ConnectionStrings:EmployeeTestConnectionString %>"
SelectCommand="SELECT [UnitID], [Unit] FROM [Unit] order by [Unit] ASC">
</asp:SqlDataSource>