В программе есть фрагмент. Он выполняется нормально, но в некоторых ситуациях начинает вывешивать такие кренделя:
Тот самый код:
private void load(int cell) // загрузка из ячейки
{
lock (this)
{
this.bsPoddon.Filter = "(cell_id=" + cell.ToString() + ") AND (stacker_id=1)";
bsPoddon.MoveFirst();
int count = bsPoddon.Count;
for (int i = 0; i < count; i++)
{
edit_cell_info(-1);
bsPoddon.MoveNext();
}
this.stacker1.SetCellFree(cell);
//this.bsPoddon.Filter = this.bsPoddon.Filter;
bsPoddon.Filter = bsPoddon.Filter;
//productlistTableAdapter.Update(this.dbTiaraDataSet4);
stacker1.refresh();
}
}
private void edit_cell_info(int cell_id)
{
object theitem = bsPoddon.Current;
if (!bsPoddon.AllowEdit) return;
if (theitem.GetType() == typeof(DataRowView))
{
DataRowView dr = ((DataRowView)bsPoddon.Current);
//DataRowView dr = ((DataRowView)theitem);
if (dr != null)
{
dr["cell_id"] = cell_id;
dr["changed"] = DateTime.Now;
}
}
else
{
CurrencyManager cmgr = bsPoddon.CurrencyManager;
DataRow dr = ((DataRowView)cmgr.Current).Row;
//DataRowView dr = ((DataRowView)theitem);
dr["cell_id"] = cell_id;
dr["changed"] = DateTime.Now;
}
bsPoddon.EndEdit();
}
private void unload(int cell) // выгрузка в ячейку
{
lock (this)
{
this.bsPoddon.Filter = "(cell_id=-1) AND (stacker_id=1)";
bsPoddon.MoveFirst();
int count = bsPoddon.Count;
for (int i = 0; i < count; i++)
{
edit_cell_info(cell);
this.bsPoddon.MoveNext();
}
this.stacker1.SetCellOccupied(cell);
this.bsPoddon.Filter = this.bsPoddon.Filter;
//productlistTableAdapter.Update(this.dbTiaraDataSet4);
stacker1.refresh();
}
}
Причем и с локом и без. И с EndEdit и без.