删除或刷新DataTable

时间:2011-07-20 20:15:47

标签: c# winforms datatable

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

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,因为我需要将day事件加载到每个列表框中。此数据来自SQL Server的视图。

加载日历后,用户可以通过弹出对话框添加/编辑/删除项目,其中包含当天的日历详细信息。当Dialog加载到Add / Edit时,我会这样填充:

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已存在于表中的错误。
  4. 我的表的主键是EventDate和EmployeeGuid。如果我在删除后查询SQL表,则没有记录,但我的应用程序仍然认为该记录仍然存在。我知道记录在记忆中。

    我已尝试以下操作将其从内存中删除但不起作用:

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

    我也尝试使用Remove删除记录,但我的应用程序仍然认为记录存在。我不知道还能做什么或尝试什么。任何帮助都会很棒。

2 个答案:

答案 0 :(得分:0)

您如何在客户端“存储”日历?知道这会引导你找到答案。听起来你在客户端有一些类型的缓存。

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

答案 1 :(得分:0)

我可以通过添加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();
 }