Elementを使用して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
私が問題を修正することを可能にした1つのハック(ただし、更新の場合のみ)は、バインドした非表示を挿入することでし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>