ASP.NET GridView不会将更新保存在数据库中
SELECT works,Edit按钮可以工作,但是在编辑之后,当我按下“Save”时,Grid将返回到更改之前并且数据库中没有更改。 SELECT使用3个表,UPDATE应该只更新主表,但仍然没有任何反应。ASP.NET GridView不会将更新保存在数据库中
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="idw" AllowSorting="True" DataSourceID="SqlDataSourceGrid">
<Columns>
<asp:CommandField ShowEditButton="True" />
<asp:BoundField DataField="idw" HeaderText="idw" InsertVisible="False" ReadOnly="True" SortExpression="idw" />
<asp:BoundField DataField="name" HeaderText="name" ReadOnly="True" SortExpression="name" />
<asp:BoundField DataField="surname" HeaderText="surname" ReadOnly="True" SortExpression="surname" />
<asp:BoundField DataField="item_name" HeaderText="item_name" ReadOnly="True" SortExpression="item_name" />
<asp:BoundField DataField="item_serial" HeaderText="item_serial" ReadOnly="True" SortExpression="item_serial" />
<asp:BoundField DataField="date_taken" HeaderText="date_taken" SortExpression="date_taken" />
<asp:BoundField DataField="notes" HeaderText="notes" SortExpression="notes" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSourceGrid" runat="server" ConnectionString="<%$ ConnectionStrings:WarehouseConnectionString %>"
SelectCommand="SELECT idw, name, surname, item_name, item_serial, date_taken, notes FROM Warehouse w JOIN Users u ON w.idu=u.idu JOIN Items i ON i.ids=i.ids"
UpdateCommand="UPDATE Warehouse SET [email protected]_taken, [email protected] WHERE [email protected]">
<UpdateParameters>
<asp:Parameter Name="date_taken" />
<asp:Parameter Name="notes" />
<asp:Parameter Name="idw" />
</UpdateParameters>
我读过的多个例子和教程,一切都应该罚款。我已经在SqlDataSource中“手动”编写了SELECT和UPDATE命令,也许这就是问题所在?
在此先感谢您的任何建议。
我用代码隐藏解决方案,最终,手动编码:
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
string id = ...
string notes = ...
UpdateDB(id, notes);
GridView1.EditIndex = -1;
bind_grid();
}
可能实际上给我过来的数据更多的控制。
maybe that's the problem?
最后一个音符后,现在我看到你已经在您尝试更新的值设置ReadOnly="True"
。将其更改为false(或将其删除),并且它们将被更新。
请参见本例以下,并尝试更改代码如下:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="EmployeeId" DataSourceID="SqlDataSource1">
<Columns>
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True"
ShowSelectButton="True" />
<asp:BoundField DataField="EmployeeId" HeaderText="EmployeeId"
InsertVisible="False" ReadOnly="True" SortExpression="EmployeeId" />
<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
<asp:BoundField DataField="Salary" HeaderText="Salary"
SortExpression="Salary" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
DeleteCommand="DELETE FROM [Employee] WHERE [EmployeeId] = @EmployeeId"
InsertCommand="INSERT INTO [Employee] ([Name], [Salary]) VALUES (@Name, @Salary)"
SelectCommand="SELECT * FROM [Employee]"
UpdateCommand="UPDATE [Employee] SET [Name] = @Name, [Salary] = @Salary WHERE [EmployeeId] = @EmployeeId">
<DeleteParameters>
<asp:Parameter Name="EmployeeId" Type="Int64" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="Name" Type="String" />
<asp:Parameter Name="Salary" Type="String" />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name="Name" Type="String" />
<asp:Parameter Name="Salary" Type="String" />
<asp:Parameter Name="EmployeeId" Type="Int64" />
</UpdateParameters>
</asp:SqlDataSource>
这与我的不同?我不需要删除和插入。 – yosh 2012-03-23 14:44:16
您可以标记通过设置它的只读属性为True一个GridView列不可编辑。尝试删除此属性。另外,设置更新参数的类型 - 即DateTime,string和int32。
没有帮助。我没有ReadOnly上我更新的列... – yosh 2012-03-23 14:40:21
您必须手动编写从后面的代码:
SqlDataSourceGrid.UpdateCommand = "UPDATE Warehouse SET date_taken=date_taken1, notes=note1 WHERE idw=1";
您是否阅读了本文** http://msdn.microsoft.com/en-us/library/ms972948.aspx** – 2012-03-23 09:57:56
@huMptyduMpty是的,我想我的代码是相似的。当我使用自定义选择查询时,我无法自动生成插入,更新和删除。 – yosh 2012-03-23 10:04:09