删除或刷新数据表

本文关键字:数据表 刷新 删除 | 更新日期: 2023-09-27 18:02:50

我编写的一个应用程序遇到了问题。基本上,它是一个月的日历,由面板/列表框组成,每个月的每一天。我使用以下代码填充列表框:

private void PopulateEventListBoxes(int offsetNumber, int monthDays)
{
    string locationSelected = this.LocationComboBox.Text.ToLower();
    for (int i = 0; i <= (monthDays - 1); i++)
    {
        DateTime dateSelected = Convert.ToDateTime(m_ArrayDateLabel[offsetNumber + i].Text).Date;
        var tempCalendar = new Data.DataSet.vwGet_CalendarDetailsDataTable();
        switch (locationSelected)
        {
            case "all":
                Data.Manager.CalendarDetailsTableAdapter.FillByDate(tempCalendar, dateSelected);
                break;
            default:
                Data.Manager.CalendarDetailsTableAdapter.FillByDateCity(tempCalendar, dateSelected, locationSelected);
                break;
        }
        foreach (Data.DataSet.vwGet_CalendarDetailsRow row in tempCalendar)
        {
            ((ListBox)m_ArrayEventListBox[offsetNumber + i]).Items.Add(row.Name + " - " + row.StatusCode);
        }
    }
}

我使用var tempCalendar = new Data.DataSet.vwGet_CalendarDetailsDataTable();作为DataTable,因为我需要将日期事件加载到每个列表框中。这个数据来自SQL server的一个视图。

一旦日历加载,用户就可以通过弹出的带有当天日历详细信息的对话框添加/编辑/删除项目。当对话框加载到添加/编辑时,我这样填充它:

private void SearchForEventsByDate()
{
    switch (m_LocationSelected)
    {
        case "all":
            Data.Manager.CalendarDetailsTableAdapter.FillByDate(DataSetCalendar.vwGet_CalendarDetails, m_DateSelected);
            CalendarDetailsBindingSource.DataSource = DataSetCalendar.vwGet_CalendarDetails;
            break;
        default:
            Data.Manager.CalendarDetailsTableAdapter.FillByDateCity(DataSetCalendar.vwGet_CalendarDetails, m_DateSelected, m_LocationSelected);
            CalendarDetailsBindingSource.DataSource = DataSetCalendar.vwGet_CalendarDetails;
            break;
    }
    RefreshRepRecordCount();
}

这一次,当加载数据时,我使用DataSetCalendar.vwGet_CalendarDetails调用而不是数据表的临时内存版本。

如果我遵循以下步骤,我的问题就会起作用:

  1. 为员工添加新事件
  2. 删除刚才添加的事件
  3. 尝试在同一天为员工重新添加新的事件-应用程序抛出一个错误,GUID已经存在于表中。

表的主键是EventDate和EmployeeGuid。如果我在删除后查询SQL表,没有记录,但我的应用程序仍然认为记录仍然存在。我知道记录在记忆里。

我已经尝试了以下方法从内存中删除它,但它不起作用:

DataSetCalendar.vwGet_CalendarDetails.FindByEmployeeGUID(SelectedCalendarEvent.EmployeeGUID).Delete();
DataSetCalendar.vwGet_CalendarDetails.AcceptChanges();

我也尝试过使用Remove来摆脱记录,但我的应用程序仍然认为记录存在。我不知道还能做什么或尝试什么。任何帮助都太好了。

删除或刷新数据表

如何在客户端"存储"日历?知道了这些,你就会找到答案。听起来你在客户端有某种类型的缓存。

如果在客户端缓存,则在服务器端更改数据时需要刷新缓存

我可以通过添加Clear()

来修复这个问题
private void SearchForEventsByDate()
{
    switch (m_LocationSelected)
    {
       case "all":
         Data.Manager.Data.SM_T_Employee_Status.Clear();
         DataSetCalendar.vwGet_CalendarDetails.Clear();
         Data.Manager.CalendarDetailsTableAdapter.FillByDate(DataSetCalendar.vwGet_CalendarDetails, m_DateSelected);
          CalendarDetailsBindingSource.DataSource = DataSetCalendar.vwGet_CalendarDetails;
          break;
       default:
          Data.Manager.Data.SM_T_Employee_Status.Clear();
          DataSetCalendar.vwGet_CalendarDetails.Clear();
          Data.Manager.CalendarDetailsTableAdapter.FillByDateCity(DataSetCalendar.vwGet_CalendarDetails, m_DateSelected, m_LocationSelected);
          CalendarDetailsBindingSource.DataSource = DataSetCalendar.vwGet_CalendarDetails;
          break;
     }
 RefreshRepRecordCount();
 }