我使用asp:SqlDataSource
元素获取数据,然后将其显示在asp:ListView
中。
为了简单起见,我们假设数据库由行id
,author
组成(实际上更多,但这无关紧要)。
这是我使用的代码:
<asp:SqlDataSource ID="NewsDataSource" runat="server"
ConnectionString="<%$ connectionStrings:RemoteSqlConnection %>"
ProviderName="System.Data.SqlClient"
SelectCommand="SELECT * FROM [news]"
UpdateCommand="UPDATE [news] SET author=@author WHERE id=@id"
DeleteCommand="DELETE FROM [news] WHERE id=@id"
InsertCommand="INSERT INTO [news] (author) VALUES (@author)">
<UpdateParameters>
<asp:Parameter Name="id" Type="Int32" />
</UpdateParameters>
<DeleteParameters>
<asp:Parameter Name="id" Type="Int32" />
</DeleteParameters>
</asp:SqlDataSource>
我的问题是,我为id
和UpdateParameters
定义的参数DeleteParameters
始终为null
。
它似乎与数据库字段id
无关。
允许我解决问题的一个hack(但仅限于更新案例)是插入一个不可见的asp:Label
,我绑定了id
(就像我将作者字段绑定到一个文本框)。
我不认为ListView代码应该是相关的,但我会尝试在这里包含一些相关的行:
<asp:ListView runat="server" DataSourceID="NewsDataSource">
<LayoutTemplate>
<div id="itemPlaceholder" runat="server"></div>
</LayoutTemplate>
<ItemTemplate>
<%# Eval("author")%>
</ItemTemplate>
<EditItemTemplate>
<!-- This line is only the workaround solution --><asp:Label ID="idLabel" runat="server" Text='<%# Bind("id")%>'></asp:Label>
<asp:TextBox ID="authorTextbox" runat="server" Text='<%# Bind("author")%>'></asp:TextBox>
</EditItemTemplate>
</asp:ListView>
答案 0 :(得分:2)
asp:ListView
上有一个名为DataKeyNames
的属性,向此添加id
会使其存储该参数值,而不需要隐藏元素。
有关DataKeyNames
属性的详细信息,请参阅:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.datakeynames(v=vs.110).aspx