绑定asp:asp:SqlDataSource到Database字段中的参数

时间:2013-11-06 16:18:48

标签: c# asp.net sql

我使用asp:SqlDataSource元素获取数据,然后将其显示在asp:ListView中。

为了简单起见,我们假设数据库由行idauthor组成(实际上更多,但这无关紧要)。

这是我使用的代码:

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

我的问题是,我为idUpdateParameters定义的参数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>

1 个答案:

答案 0 :(得分:2)

asp:ListView上有一个名为DataKeyNames的属性,向此添加id会使其存储该参数值,而不需要隐藏元素。

有关DataKeyNames属性的详细信息,请参阅:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.datakeynames(v=vs.110).aspx