2010-07-28 74 views
0

我试图通过一个DataGridView控件实现数据库价值版本,但老实说,我很难试图做到这一点。我基本上使用LINQ到SQL类和事件,以下是最显著片段:提交DataGridView更改与Linq到SQL的问题

var data = from q in data.FOOBARS 
      select new 
      { 
       ID = q.FOOBAR_ID, 
       LOREM = q.FOOBAR_LOREM, 
       IPSUM = q.FOOBAR_IPSUM 
      }; 

DataGridView grid = new DataGridView(); 
grid.DataSource = data; 

// grid EVENTS  
private void grid_CellDoubleClick(object sender, DataGridViewCellEventArgs e) 
{ 
    this.grid.CurrentCell.ReadOnly = false; 
    this.grid.BeginEdit(true); 
} 

private void grid_CellLeave(object sender, DataGridViewCellEventArgs e) 
{ 
    if (this.grid.CurrentCell.IsInEditMode) 
    { 
     // METHOD CALL    
     this.SetVariableValue(this.grid.CurrentRow.Cells["ID"].Value.ToString(), this.grid.CurrentCell.OwningColumn.Name, this.grid.CurrentCell.FormattedValue.ToString(), this.grid.CurrentCell.EditedFormattedValue.ToString()); 
    } 

    this.grid.CommitEdit(DataGridViewDataErrorContexts.Commit); 
    this.grid.EndEdit(); 
} 

// METHOD IMPL 
private void SetVariableValue(string id, string type, string current, string edited) 
{ 
    try 
    { 
     if (current != edited) 
     { 
      using (FOOBARDataClassesDataContext data = new FOOBARDataClassesDataContext(this.BuildConnection())) 
      { 
       data.ExecuteCommand("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED"); 

       switch (type) 
       { 
        case "LOREM": 
         var currentLorem = data.FOOBARS.SingleOrDefault(v => v.FOOBAR_ID == Convert.ToInt32(id)).FOOBAR_LOREM; 
         currentLorem = edited; 
         data.SubmitChanges(ConflictMode.ContinueOnConflict); 
         break; 

        case "IPSUM": 
         var currentIpsum = data.FOOBARS.SingleOrDefault(v => v.FOOBAR_ID == Convert.ToInt32(id)).FOOBAR_IPSUM; 
         currentIpsum = edited; 
         data.SubmitChanges(ConflictMode.ContinueOnConflict); 
         break; 

        default: 
         break; 
       } 
       data.Refresh(RefreshMode.OverwriteCurrentValues); 
      } 
     } 
    } 
    catch (Exception error) 
    { 
     if (logger.IsErrorEnabled) logger.Error(error.Message); 
    } 
} 

调试看起来不错,对象实际上正在更新但既不提交某种原因变化,也不更新。

任何帮助肯定会感激。非常感谢你们!

+0

摔跤此为后一段时间我已经断定与DataGridView无关。我用这个问题的绝对奇怪的解决方案编辑了代码。 – 2010-07-29 20:05:18

回答

0

出于某种原因,这并不NOT WORK

var currentLorem = data.FOOBARS.SingleOrDefault(v => v.FOOBAR_ID == Convert.ToInt32(id)).FOOBAR_LOREM; 
currentLorem = edited; 
data.SubmitChanges(ConflictMode.ContinueOnConflict); 

但这DOES(请注意线1和2,FOOBAR_LOREM属性的变化):

var currentLorem = data.FOOBARS.SingleOrDefault(v => v.FOOBAR_ID == Convert.ToInt32(id)); 
currentLorem.FOOBAR_LOREM = edited; 
data.SubmitChanges(ConflictMode.ContinueOnConflict);