我有一个从SQL数据库填充的GridView,gridview中的每一行都有一个更新按钮。现在我要做的是当我点击特定行的更新按钮时,我希望我的数据库将该特定行设置为active = true为active = false。如何让我的Linq查询选择我的数据库中的特定数据行并仅更新该项?
这是我的asp.net代码,它在gridView
中创建我的Button<telerik:GridTemplateColumn UniqueName="TemplateUpdateColumn">
<ItemTemplate>
<asp:LinkButton ID="UpdateLink" runat="server" CommandName="Update" Text="Update" OnClientClick="return confirm('You are about to update this Incident. \nAre you sure?')"><img src="../Images/icons/Trash.png" class="images" alt="Action" style="margin-left:5px"/></asp:LinkButton><br />Delete
</ItemTemplate>
</telerik:GridTemplateColumn>
这是我的C#代码,它应该更新我的数据库中的特定记录。
protected void grdIncidents_UpdateCommand(object sender, GridCommandEventArgs e)
{
Context db = new Context();
var cmd = (from i in db.Incidents
where i.IncidentID == //8
select i).FirstOrDefault();
cmd.Active = false;
db.SaveChanges();
}
答案 0 :(得分:0)
您输入的源代码与您输入的完全相同吗?如果是这样的话:
在cmd.Active = false;
尝试Context.Entry(cmd.Active).State = EntityState.Modified;
这应该告诉DbContext在调用“SaveChanges”时更新该实体的值。为了确保您的更改实际上已保存,我将执行以下操作:
var updateSuccessful = db.SaveChanges() > 0;
如果updateSuccessful
等于true,则更新有效。
答案 1 :(得分:0)
你应该像这样尝试sql命令。
如果您使用的是实体框架,则应在db.Entry(cmd).State = EntityState.Modified;
之后编写cmd.Active = false;
还要确保数据库中的Active列实际上是bool类型。
protected void grdIncidents_UpdateCommand(object sender, GridCommandEventArgs e)
{
Context db = new Context();
var cmd = db.Incidents.FirstOrDefault(x=> x.IncidentID == /*your value*/);
cmd.Active = false;
db.SubmitChanges();
}
答案 2 :(得分:0)
检查您获取的对象是否为null。如果它为null则无法更新。
protected void grdIncidents_UpdateCommand(object sender,GridCommandEventArgs e) { Context db = new Context();
Incident cmd = (from i in db.Incidents
where i.IncidentID == //8
select i).FirstOrDefault();
if (cmd !=null)
{
cmd.Active = false;
db.SaveChanges();
}
else
//Show some kind of message here like unable to update .
}