2010-07-28 3 views
0

DataGridView 컨트롤을 통해 데이터베이스 값 버전을 구현하려고하지만 솔직히이를 수행하는 데 어려움을 겪고 있습니다. ,Linq-SQL을 사용하여 DataGridView 변경 내용을 제출할 때 문제가 발생했습니다.

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); 
    } 
} 

디버깅 좋아 보인다 어떤 이유로 변경이도 제출하거나 갱신됩니다에 대한 객체는 실제로 업데이트 만되고있다 : 나는 기본적으로 가장 중요한 조각 인 다음, LINQ - 투 - SQL 클래스 및 이벤트를 사용하고 있습니다.

도움이 될 것입니다. 많은 분들께 미리 감사드립니다!

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

을하지만이 (라인 1, 2, FOOBAR_LOREM 속성의 변경 통지) 않습니다 :

+0

을 잠시 동안 나는 DataGridView과 관련이 없다고 결론을 냈습니다. 이 문제에 대한 이상한 해결책으로 코드를 편집했습니다. –

답변

0

어떤 이유로이 작동하지 않습니다이 레슬링 후

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