2013-04-27 58 views
1

我有一个从SQL数据库填充GridView中选择更新按钮更新从SQL数据库中的特定记录,在GridView的每一行,然后中有一个更新按钮。现在我所要做的是,当我在一个特定的行,我想我的数据库来设置特定行从活动= true来激活=假的更新按钮点击。我如何让我的Linq查询选择我的数据库中的特定数据行并只更新该项目?从一个GridView

下面是创建我的按钮在GridView

<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#代码我的asp.net代码。

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

是你输入的完全一样的源代码吗?如果是这样的:

cmd.Active = false;后尝试Context.Entry(cmd.Active).State = EntityState.Modified;

这应该告诉的DbContext当你打电话“的SaveChanges”以更新该实体的值。为了确保您的变更实际上是被保存的我会做到以下几点:

var updateSuccessful = db.SaveChanges() > 0; 

如果updateSuccessful等于真,则更新工作。

+0

变种CMD = db.Incidents.FirstOrDefault(X => x.IncidentID ==/*您的值* /); 这不会工作,我需要在GridView知道哪些incidentID我指当我点击删除按钮。 因此,这段代码应该看起来像这样即时猜测 其中i.IncidentID == GridView中的记录的当前ID – user2285916 2013-04-27 15:06:17

+0

cmd.Active = false之后;尝试Context.Entry(cmd.Active).STATE = EntityState.Modified不工作要么VS犯规知道什么Context.Entry是 – user2285916 2013-04-27 15:09:13

+0

什么是父类“上下文”的?我假设它是DbContext或其他实体框架上下文。另外,在你的问题中,你不要指定你的代码运行时得到的结果。你能否添加这些信息? – 2013-05-01 03:01:41

0

你应该尝试这样的SQL命令。 如果您正在使用实体框架,你应该写db.Entry(cmd).State = EntityState.Modified;cmd.Active = false; 后,还要确保在您的数据库激活列实际上是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(); 
} 
0

检查您的提取对象是否为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 . 

}