<p>今天使用ListView控件连接了数据库,在数据库配置中,使用了乐观并发控制。</p>
在页面上,可以进行添加、修改,但是在删除行时,却出现如下错误:
You have specified that your delete command compares all values on SqlDataSource 'SqlDataSource_Holiday', but the dictionary passed in for values is empty. Pass in a valid dictionary for delete or change your mode to OverwriteChanges.
在网上找了很久也没有找到相应的解决办法,后来,仔细看ListView的代码,部分如下:
<asp:ListView ID="ListView_Holiday" runat="server" DataKeyNames="idHoliday" DataSourceID="SqlDataSource_Holiday" InsertItemPosition="LastItem"> <ItemTemplate> <tr style="background-color:#DCDCDC;color: #000000;"> <td> <asp:Label ID="idHolidayLabel" runat="server" Text='<%# Eval("idHoliday") %>' /> </td> <td> <asp:Label ID="holidayDateLabel" runat="server" Text='<%# Eval("holidayDate") %>' /> </td> <td> <asp:Label ID="nameLabel" runat="server" Text='<%# Eval("name") %>' /> </td> <td> <asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="删除" /> <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="修改" /> </td> </tr> </ItemTemplate> <AlternatingItemTemplate> <tr style="background-color:#FFF8DC;"> <td> <asp:Label ID="idHolidayLabel" runat="server" Text='<%# Eval("idHoliday") %>' /> </td> <td> <asp:Label ID="holidayDateLabel" runat="server" Text='<%# Eval("holidayDate") %>' /> </td> <td> <asp:Label ID="nameLabel" runat="server" Text='<%# Eval("name") %>' /> </td> <td> <asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="删除" /> <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="修改" /> </td> </tr> </AlternatingItemTemplate> ……
可以见到在<asp:Label />中的数据绑定全是使用的Eval()方式,网上说Eval()是单向的数据绑定方式。于是猜是不是这个问题,便将Eval全替换成了Bind,结果真就可以删除了!
原来以为<asp:Label />只能使用Eval()绑定,而<asp:TextBox />才能使用Bind()绑定呢。