删除或刷新数据表
本文关键字:数据表 刷新 删除 | 更新日期: 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
调用而不是数据表的临时内存版本。
如果我遵循以下步骤,我的问题就会起作用:
- 为员工添加新事件
- 删除刚才添加的事件
- 尝试在同一天为员工重新添加新的事件-应用程序抛出一个错误,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();
}