【问题标题】:LINQ query is not retrieving saved dataLINQ 查询未检索保存的数据
【发布时间】:2012-01-07 23:10:28
【问题描述】:

也许我需要重新开始。感谢 datagridview 的有用链接,但我真的不需要提出来。

问题的本质是这样的:我用这个方法做两件事: - 添加新记录时从数据库中获取必要的数据 - 在我更新记录后从数据库中获取必要的数据

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

当我添加新记录时,新数据将保存并加载到 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();
}

【问题讨论】:

  • 行更新后需要刷新网格
  • 这应该会有所帮助:stackoverflow.com/questions/253843/…
  • 更新/插入数据后你有没有调用refreshReservationDetail()方法???
  • 能否请您显示保存更新的代码?
  • 问题不在于保存。我确信它工作得很好。我只是想知道为什么 _oReservationDetail 中的数据没有刷新,尽管我要求再次运行查询。

标签: c# .net linq datagridview


【解决方案1】:

听起来你没有重新绑定你的数据网格视图。保存/更新后,您应该再次调用refreshReservationDetail(),然后您需要再次将数据源设置为该变量并重新绑定它。如果您使用更新面板或类似的方式异步执行此操作,则必须在为保存/更新而触发的事件结束时调用refreshReservationDetail()。如果页面正常回发,那么只要确保您对 gridview 的数据绑定发生,无论它是否是回发。

【讨论】:

    【解决方案2】:

    我已经成功调用了这个循环:

    foreach (var oReservationDetail in
        _oReservationObject.ReservationData.tblReservationDetails)
    

    我已经使用数据库中设置的关系而不是再次查询来获取数据。现在可以了!

    【讨论】:

      猜你喜欢
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-27
      • 2014-09-03
      • 1970-01-01
      • 2019-02-14
      • 1970-01-01
      相关资源
      最近更新 更多