我使用asp:SqlDataSource
Element 来获取数据,然后将其显示在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
。
允许我解决问题的一个技巧(但仅适用于更新案例)是插入一个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>