0

我使用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>
4

1 回答 1

2

asp:ListView被调用的有一个属​​性DataKeyNames,添加id到这个应该使它存储该参数值而不需要隐藏元素。

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

于 2013-11-06T16:46:00.537 回答