2011-11-28 5 views
2

어쩌면 다시 시작해야합니다. Thx는 DataGridview에 대한 유용한 링크를 제공하지만 실제로 가져올 필요는 없습니다.LINQ 쿼리가 저장된 데이터를 검색하지 않습니다.

문제의 본질은 이것이다 : 나는이 일을 위해이 방법을 사용 을 - 새 레코드 을 추가 할 때 데이터베이스에서 필요한 데이터를 얻을 - 나 '후 데이터베이스에서 필요한 데이터를 얻을 수 ve 업데이트 기록

public void refreshReservationDetail() 
{ 
    _oReservationDetail = (from rd in _oReservation.tblReservationDetails 
          where rd.ReservationID == _oReservationObject.ID 
          select rd).ToList(); 
} 

새 레코드를 추가하면 새 데이터가 저장되고 DataGridview에로드됩니다. 그래서 이것은 잘 작동합니다.

기존의 레코드 (이미 datagridview에 표시되어 있음)를 업데이트하면 변경된 내용도 제대로 저장되지만 위의 방법은 저장된 데이터를 제공하지만 이전 데이터는 제공하지 않습니다. 어째서?

는 여기에 당신이 당신의 DataGridView에 리 바인딩되지 않습니다처럼

//frmReservationDetail 
public event dRefresh SavedActivity; 

private void btnOk_Click(object sender, EventArgs e) 
{ 
    _oReservationDetail.ReservationDetailData.ReservationID = _oReservationDetail.ReservationObjectData.ID; 
    _oReservationDetail.ReservationDetailData.StartTime = Convert.ToDateTime(_oReservationDetail.ReservationObjectData.StartTime.Value.ToString("dd/MM/yyyy") + " " + _oDateTime[cboStartTime.getSelectedID()]); 
    _oReservationDetail.ReservationDetailData.EndTime = Convert.ToDateTime(_oReservationDetail.ReservationObjectData.StartTime.Value.ToString("dd/MM/yyyy") + " " + _oDateTime[cboEndTime.getSelectedID()]); 
    if (this.cboLanguage.SelectedItem != null) 
    { 
     _oReservationDetail.ReservationDetailData.LanguageID = this.cboLanguage.getSelectedID(); 
    } 
    else 
     _oReservationDetail.ReservationDetailData.LanguageID = null; 

    if (this.cboTargetgroup.SelectedItem != null) 
    { 
     _oReservationDetail.ReservationDetailData.TargetgroupID = this.cboTargetgroup.getSelectedID(); 
    } 
    else 
     _oReservationDetail.ReservationDetailData.TargetgroupID = null; 

    if (this.cboExcursion.SelectedItem != null) 
    { 
     _oReservationDetail.ReservationDetailData.ExcursionID = this.cboExcursion.getSelectedID(); 
    } 
    else 
     _oReservationDetail.ReservationDetailData.ExcursionID = null; 

    _oReservationDetail.ReservationDetailData.Participants = int.Parse(this.txtParticipants.Text); 
    _oReservationDetail.ReservationDetailData.Leaders = int.Parse(this.txtLeaders.Text); 
    _oReservationDetail.ReservationDetailData.Remarks = this.txtRemarks.Text; 
    _oReservationDetail.save(); 

    if(SavedActivity != null) 
     SavedActivity(); 

    this.Close(); 
    } 

//clsReservationDetail 
public void save() 
{ 
    int i = _oReservationDetail.ID; 
    if (_oReservationDetail.ID == 0) 
    { 
      _oReservation.tblReservationDetails.InsertOnSubmit(_oReservationDetail); 
      _oReservation.SubmitChanges(); 
    } 
    _oReservation.SubmitChanges(); 
} 
+1

당신은 행이 갱신 된 후 그리드를 새로 고침 할 필요가 – abatishchev

+0

이 도움이 될해야합니다 http://stackoverflow.com/questions/253843/simple-datagridview-refresh-question – TheBoyan

+0

당신이 업데이트 한 후'refreshReservationDetail()' 방법을 불렀다/데이터 삽입하기 ??? –

답변

1

그것은 소리 내 데이터를 저장합니다. 저장/업데이트 한 후에 refreshReservationDetail()을 다시 호출해야합니다. 그런 다음 데이터 소스를 해당 변수로 다시 설정하고 리 바인드해야합니다. 업데이트 패널이나 이와 같은 방법으로 비동기 적으로 수행하는 경우 저장/업데이트를 위해 발동되는 이벤트의 끝에서 refreshReservationDetail()으로 전화해야합니다. 페이지가 정상적으로 게시 될 경우 다시 게시 여부에 관계없이 gridview에 대한 데이터 바인딩이 발생하는지 확인하십시오.

0

나는이 루프를 호출하여 성공 :

foreach (var oReservationDetail in 
    _oReservationObject.ReservationData.tblReservationDetails) 

나는 데이터를 얻기 위해 다시 쿼리 대신 데이터베이스에 살고 있고 관계를 사용했다. 이제 작동합니다!

관련 문제