我遇到了我写的应用程序的问题。基本上它是一个月历,由每月的每一天的面板/列表框组成。我使用以下内容填充列表框:
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
而不是数据表的临时内存版本。
如果我遵循这些程序,我的问题就会发挥作用:
我的表的主键是EventDate和EmployeeGuid。如果我在删除后查询SQL表,则没有记录,但我的应用程序仍然认为该记录仍然存在。我知道记录在记忆中。
我已尝试以下操作将其从内存中删除但不起作用:
DataSetCalendar.vwGet_CalendarDetails.FindByEmployeeGUID(SelectedCalendarEvent.EmployeeGUID).Delete();
DataSetCalendar.vwGet_CalendarDetails.AcceptChanges();
我也尝试使用Remove
删除记录,但我的应用程序仍然认为记录存在。我不知道还能做什么或尝试什么。任何帮助都会很棒。
答案 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();
}