2

すべてのデータが正しく表示されます。「更新」リンクのみが機能していません。私のコードは次のとおりです。

<asp:SqlDataSource runat="server" ConnectionString="<%$ ConnectionStrings:DefaultConnection %>"
        DataSourceMode="DataReader" ID="DataFrom"
        SelectCommand="SELECT * FROM Classes" DeleteCommand="DELETE FROM Classes WHERE Id=@Id"
        UpdateCommand="UPDATE Classes SET Password=@Password, Name=@Name WHERE Id=@Id">
        <DeleteParameters><asp:Parameter Name="Id" /></DeleteParameters>
        <UpdateParameters>
            <asp:Parameter Name="Id" />
            <asp:Parameter Name="Password" Type="String" /><asp:Parameter Name="Name" Type="String" />
        </UpdateParameters>
    </asp:SqlDataSource>
    <asp:GridView runat="server" ID="Main" DataSourceID="DataFrom" AutoGenerateColumns="false" AllowSorting="True" DataKeyNames="Id,Password,Name"
        AutoGenerateDeleteButton="True" AutoGenerateEditButton="True" AutoGenerateSelectButton="False">
        <Columns>
            <asp:BoundField DataField="Id" HeaderText="Class ID" InsertVisible="False" ReadOnly="True" />
            <asp:BoundField DataField="Password" HeaderText="Password" />
            <asp:BoundField DataField="Name" HeaderText="Name" />
        </Columns>
    </asp:GridView>
4

1 に答える 1

2

以下の点に注意する必要があります。

  • GridView & したがって、DataSource では、DataKeyNamesプロパティで指定された列を変更することはできません。

  • PrimaryKey 列を更新しようとしないでください。これは許可されません。更新をクリックしてもエラーは表示されませんが、データベースの値を確認すると、変更は適用されません。

  • Update コマンドが主キーに新しい値を設定しようとしていないことを確認してください。その結果、主キーを設定しようとしても、完全な更新コマンドは拒否されます。つまり、他の非主キー列でさえも変更されません。したがって、Idが主キーの場合、 に新しい値を指定すると、以下の更新コマンドは拒否されますId

    UpdateCommand="UPDATE Classes SET Id=@Id,Password=@Password,Name=@Name WHERE Id=@Id"

したがって、あなたの場合はId、primaryKey でなければならないと思います。プロパティ DataKeyNames を次のように設定します。

DataKeyNames="Id".

名前とパスワードを更新したいので、それらを DataKeyNames に含めないでください。DatKeyNames重要なことは、通常、プロパティの PrimaryKeys のみを言及する必要があるということです。

UpdateCommand の残りの部分はまったく問題ありません。

于 2013-07-26T01:08:01.643 に答える