我使用asp:SqlDataSourceElement 来获取数据,然后将其显示在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>