Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 绑定到SqlDataSource的GridView控件未更新_Asp.net_Sql_Sql Server_Gridview_Sqldatasource - Fatal编程技术网

Asp.net 绑定到SqlDataSource的GridView控件未更新

Asp.net 绑定到SqlDataSource的GridView控件未更新,asp.net,sql,sql-server,gridview,sqldatasource,Asp.net,Sql,Sql Server,Gridview,Sqldatasource,所有数据都正确显示。只有“更新”链接不起作用。我的代码是: <asp:SqlDataSource runat="server" ConnectionString="<%$ ConnectionStrings:DefaultConnection %>" DataSourceMode="DataReader" ID="DataFrom" SelectCommand="SELECT * FROM Classes" DeleteCommand="DELE

所有数据都正确显示。只有“更新”链接不起作用。我的代码是:

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

您必须注意以下几点:

  • GridView&因此数据源从不允许更改在
    DataKeyNames
    属性中指定的列

  • 不要尝试更新PrimaryKey列。这是不允许的。虽然单击“更新”时不会显示错误,但如果检查数据库中的值,则不会应用更改

  • 确保Update命令未尝试为主键设置新值。因此,如果您甚至尝试设置主键,则完整更新命令将被拒绝。i、 即使是其他非主键列也不会更改。因此,如果
    Id
    是主键,则如果为
    Id
    指定新值,则下面的更新命令将被拒绝:

    UpdateCommand=“更新类集合Id=@Id,密码=@Password,Name=@Name,其中Id=@Id”

所以在你的情况下,我想,
Id
必须是一个primaryKey。将属性DataKeyName设置为:

DataKeyNames="Id".
因为,您想要更新名称和密码,所以不要将它们包含在DataKeyName中。重要的是,通常只应在
DatKeyNames
属性中提及PrimaryKeys


其余的更新命令都很好。

什么“更新”链接?你也可以发布它吗?我指的是在点击“编辑”后在GridView中自动生成的更新链接。注意:将更新命令更改为“更新类设置密码='newPass',Name=@Name,其中Id=@Id”可以正确地将密码更新为newPass。嘿,human44,我已经编辑了我的答案。请现在检查。谢谢你的回复。