2013-07-25 56 views
2

所有数据都能正确显示。只有“更新”链接不起作用。我的代码是:绑定到SqlDataSource的My GridView控件不会更新

<asp:SqlDataSource runat="server" ConnectionString="<%$ ConnectionStrings:DefaultConnection %>" 
     DataSourceMode="DataReader" ID="DataFrom" 
     SelectCommand="SELECT * FROM Classes" DeleteCommand="DELETE FROM Classes WHERE [email protected]" 
     UpdateCommand="UPDATE Classes SET [email protected], [email protected] WHERE [email protected]"> 
     <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> 
+1

什么“更新”链接?你可以发布它吗? –

+0

点击“编辑”后,我的意思是GridView中自动生成的更新链接。 – human444

回答

2

你必须采取以下点的护理:

  • GridView控件&因此数据源从未允许其在DataKeyNames属性指定的列的变化。

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

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

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

所以在你的情况下,我猜Id必须是primaryKey。设置属性的DataKeyNames为:

DataKeyNames="Id". 

因为,你要更新名称&密码,所以不包括他们DataKeyNames中。重要的是,通常你应该只提及DatKeyNames属性中的PrimaryKeys。

其余的UpdateCommand完全没问题。

+0

试过了,仍然没有工作。 :( – human444

+0

注意:将更新命令更改为“UPDATE Classes SET Password ='newPass',Name = @ Name WHERE Id = @ Id”正确更新密码为newPass。 – human444

+0

嗨human44,我已经编辑了我的答案。 。 谢谢您的回复。 –

相关问题