0

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であるということです。データベース フィールドに関連付けられていないようです。DeleteParametersnullid

私が問題を修正することを可能にした1つのハック(ただし、更新の場合のみ)は、バインドした非表示を挿入することでしasp:Labelid(作成者フィールドをテキストボックスにバインドしたように)。

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>
4

1 に答える 1