正如标题所述,我在代码中间为空。
我不做任何后台工作/线程工作,因此它无法在执行代码的中间清空自身。每次都会在某个特定点将其清空。
ObservableCollection
在我的情况下是proizvod.GrupeIPodgrupe
这是发生的地方:
private void NamestiGrupeIPodgrupe()
{
foreach (TreeNode n in treeView1.Nodes)
{
if (proizvod.GrupeIPodGrupe.Grupe.Any(g => g.Id == (int)n.Tag))
{
n.Checked = true;
foreach (TreeNode n1 in n.Nodes) //Here it empty
{
if (proizvod.GrupeIPodGrupe.Podgrupe.Any(pg => pg.PodGrupaId == (int)n1.Tag))
{
n1.Checked = true;
}
}
}
else
n.Checked = false;
}
}
下面是我逐步调试时的图像:
这里是发生此问题的Form类的完整代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Magacin.Sajt;
namespace Magacin
{
public partial class Sajt_Proizvod : Form
{
private Proizvod proizvod;
private Komercijalno.Roba roba;
public Sajt_Proizvod(int proizvodID)
{
InitializeComponent();
UcitajGrupeIPodgrupe();
this.roba = new Komercijalno.Roba(proizvodID);
UcitajProizvod(proizvodID);
k_jm_txt.Text = roba.Jm;
k_katBr_txt.Text = roba.KatBr;
k_naziv_txt.Text = roba.Naziv;
k_pdv_txt.Text = String.Format("{0:#.00}%", roba.Pdv);
k_robaid_txt.Text = roba.RobaId.ToString();
NamestiGrupeIPodgrupe();
}
private void PodesiPremaPravima()
{
if (!Korisnik.ImaPravo(200103))
{
w_naziv_txt.Enabled = false;
w_naziv_txt.BackColor = SystemColors.Info;
slika_txt.Enabled = false;
slika_txt.BackColor = SystemColors.Info;
w_opis_rtxt.Enabled = false;
w_opis_rtxt.BackColor = SystemColors.Info;
akcijskiArtikal_cb.Enabled = false;
akcijskiArtikal_cb.BackColor = SystemColors.Info;
aktivan_cb.Enabled = false;
aktivan_cb.BackColor = SystemColors.Info;
button2.BackColor = SystemColors.Info;
}
else
{
w_naziv_txt.Enabled = true;
w_naziv_txt.BackColor = SystemColors.Window;
slika_txt.Enabled = true;
slika_txt.BackColor = SystemColors.Window;
w_opis_rtxt.Enabled = true;
w_opis_rtxt.BackColor = SystemColors.Window;
akcijskiArtikal_cb.Enabled = true;
akcijskiArtikal_cb.BackColor = SystemColors.Window;
aktivan_cb.Enabled = true;
aktivan_cb.BackColor = SystemColors.Window;
}
}
private void NamestiGrupeIPodgrupe()
{
foreach (TreeNode n in treeView1.Nodes)
{
if (proizvod.GrupeIPodGrupe.Grupe.Any(g => g.Id == (int)n.Tag))
{
n.Checked = true;
foreach (TreeNode n1 in n.Nodes)
{
if (proizvod.GrupeIPodGrupe.Podgrupe.Any(pg => pg.PodGrupaId == (int)n1.Tag))
{
n1.Checked = true;
}
}
}
else
n.Checked = false;
}
}
private void UcitajProizvod()
{
proizvod = new Proizvod(proizvod.PROIZVODID);
w_proizvodId_txt.Text = proizvod.PROIZVODID.ToString();
w_naziv_txt.Text = proizvod.NAZIV.ToString();
w_katBr_txt.Text = proizvod.KATBR.ToString();
w_pdv_txt.Text = String.Format("{0}%", proizvod.PDV);
w_jm_txt.Text = proizvod.JM.ToString();
slika_txt.Text = proizvod.SLIKA.ToString();
kratakOpis_txt.Text = proizvod.KratakOpis;
w_opis_rtxt.Text = proizvod.OPIS;
akcijskiArtikal_cb.Checked = (proizvod.AKCIJSKI_ARTIKAL == 1) ? true : false;
aktivan_cb.Checked = (proizvod.AKTIVAN == 1) ? true : false;
}
private void UcitajProizvod(int poizvodId)
{
proizvod = new Proizvod(poizvodId);
w_proizvodId_txt.Text = proizvod.PROIZVODID.ToString();
w_naziv_txt.Text = proizvod.NAZIV.ToString();
w_katBr_txt.Text = proizvod.KATBR.ToString();
w_pdv_txt.Text = String.Format("{0}%", proizvod.PDV);
w_jm_txt.Text = proizvod.JM.ToString();
slika_txt.Text = proizvod.SLIKA.ToString();
kratakOpis_txt.Text = proizvod.KratakOpis;
w_opis_rtxt.Text = proizvod.OPIS;
akcijskiArtikal_cb.Checked = (proizvod.AKCIJSKI_ARTIKAL == 1) ? true : false;
aktivan_cb.Checked = (proizvod.AKTIVAN == 1) ? true : false;
}
private void UcitajGrupeIPodgrupe()
{
List<Grupa> grupe = Grupa.ListaSvihGrupa();
foreach(Grupa gp in grupe)
{
TreeNode tn = new TreeNode(gp.Naziv);
List<PodGrupa> pg = PodGrupa.ListaSvihPodgrupa(gp.Id);
if(pg != null && pg.Count > 0)
{
foreach(PodGrupa pgp in pg)
{
TreeNode tn1 = new TreeNode(pgp.Naziv);
tn1.Tag = pgp.PodGrupaId;
tn1.ToolTipText = "PodGrupa";
tn.Nodes.Add(tn1);
}
}
tn.Tag = gp.Id;
tn.ToolTipText = "Grupa";
treeView1.Nodes.Add(tn);
}
}
private void sacuvaj_btn_Click(object sender, EventArgs e)
{
if (Korisnik.ImaPravo(200103))
{
proizvod.Update();
MessageBox.Show(proizvod.errorMessage);
}
else
{
MessageBox.Show("Nemate pravo pristupa modulu [ 200103 ] ");
}
}
private void odbaci_btn_Click(object sender, EventArgs e)
{
UcitajProizvod();
}
private void novi_btn_Click(object sender, EventArgs e)
{
using (Sajt_NoviProizvod np = new Sajt_NoviProizvod())
{
np.ShowDialog();
}
}
private void w_naziv_txt_TextChanged(object sender, EventArgs e)
{
proizvod.NAZIV = w_naziv_txt.Text;
sacuvaj_btn.Enabled = true;
odbaci_btn.Enabled = true;
}
private void w_jm_txt_TextChanged(object sender, EventArgs e)
{
proizvod.JM = w_jm_txt.Text;
}
private void w_opis_rtxt_TextChanged(object sender, EventArgs e)
{
proizvod.OPIS = w_opis_rtxt.Text;
sacuvaj_btn.Enabled = true;
odbaci_btn.Enabled = true;
}
private void akcijskiArtikal_cb_CheckedChanged(object sender, EventArgs e)
{
proizvod.AKCIJSKI_ARTIKAL = Convert.ToInt32(akcijskiArtikal_cb.Checked);
sacuvaj_btn.Enabled = true;
odbaci_btn.Enabled = true;
}
private void aktivan_cb_CheckedChanged(object sender, EventArgs e)
{
proizvod.AKTIVAN = Convert.ToInt32(aktivan_cb.Checked);
sacuvaj_btn.Enabled = true;
odbaci_btn.Enabled = true;
}
private void button2_Click(object sender, EventArgs e)
{
using (Sajt_Paketi sp = new Sajt_Paketi(proizvod.PROIZVODID))
{
sp.ShowDialog();
}
}
private void slika_txt_TextChanged(object sender, EventArgs e)
{
proizvod.SLIKA = slika_txt.Text;
sacuvaj_btn.Enabled = true;
odbaci_btn.Enabled = true;
}
private void kratakOpis_txt_TextChanged(object sender, EventArgs e)
{
proizvod.KratakOpis = kratakOpis_txt.Text;
sacuvaj_btn.Enabled = true;
odbaci_btn.Enabled = true;
}
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
if (e.Node.Parent != null)
{
if (e.Node.Parent.Parent != null)
{
e.Node.Parent.Parent.Checked = true;
}
e.Node.Parent.Checked = true;
}
if (e.Node.Tag.ToString() == "Grupa")
{
foreach (TreeNode tn in e.Node.Nodes)
{
tn.Checked = false;
}
}
ProveriGrupeIPodgrupe();
sacuvaj_btn.Enabled = true;
odbaci_btn.Enabled = true;
}
private void ProveriGrupeIPodgrupe()
{
proizvod.GrupeIPodGrupe.Reset();
foreach (TreeNode tn in treeView1.Nodes)
{
if (tn.Checked)
{
foreach (TreeNode tn1 in tn.Nodes)
{
if (tn1.Checked)
{
proizvod.GrupeIPodGrupe.Podgrupe.Add(new PodGrupa { PodGrupaId = Convert.ToInt32(tn1.Tag), GrupaId = Convert.ToInt32(tn.Tag) });
}
}
}
}
}
private void odbaci_btn_EnabledChanged(object sender, EventArgs e)
{
if (odbaci_btn.Enabled)
odbaci_btn.BackColor = Color.White;
else
odbaci_btn.BackColor = Color.DimGray;
}
private void sacuvaj_btn_EnabledChanged(object sender, EventArgs e)
{
if (sacuvaj_btn.Enabled)
sacuvaj_btn.BackColor = Color.White;
else
sacuvaj_btn.BackColor = Color.DimGray;
}
}
}
这是我的Proizvod
班
public class Proizvod
{
#region Variables
public int PROIZVODID { get { return _PROIZVODID; } set { _PROIZVODID = value; } }
public string NAZIV { get { return _NAZIV; } set { _NAZIV = value; } }
public string OPIS { get { return _OPIS; } set { _OPIS = value; } }
public string JM { get { return _JM; } set { _JM = value; } }
public int AKCIJSKI_ARTIKAL { get { return _AKCIJSKI_ARTIKAL; } set { _AKCIJSKI_ARTIKAL = value; } }
public int AKTIVAN { get { return _AKTIVAN; } set { _AKTIVAN = value; } }
public string KATBR { get { return _KATBR; } set { _KATBR = value; } }
public double PDV { get { return _PDV; } set { _PDV = value; } }
public string SLIKA { get { return _SLIKA; } set { _SLIKA = value; } }
public string KratakOpis { get { return _KratakOpis; } set { _KratakOpis = value; } }
public GrupeIPodgrupe GrupeIPodGrupe { get { return _GrupeIPodGrupe; } }
public List<Paket> Paketi { get { return _Paketi; } }
public string errorMessage { get { return _errorMessage; } }
private int _PROIZVODID;
private string _NAZIV;
private string _OPIS;
private string _JM;
private int _AKCIJSKI_ARTIKAL;
private int _AKTIVAN;
private string _KATBR;
private double _PDV;
private string _SLIKA;
private string _KratakOpis;
private GrupeIPodgrupe _GrupeIPodGrupe;
private List<Paket> _Paketi;
private string fileNameSlika;
private string pathSlika;
string _errorMessage = "Sve je ok!";
#endregion
#region classes
public class GrupeIPodgrupe
{
public ReadOnlyCollection<Grupa> Grupe
{
get
{
return _Grupe.AsReadOnly();
}
}
public ObservableCollection<PodGrupa> Podgrupe
{
get
{
return _PodGrupe;
}
set
{
_PodGrupe = value;
}
}
private List<Grupa> _Grupe;
private ObservableCollection<PodGrupa> _PodGrupe;
private void HandleChange(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Add)
{
foreach (PodGrupa pg in e.NewItems)
{
if (_Grupe.Count < 1 || !_Grupe.Any(g => g.Id == pg.GrupaId))
{
_Grupe.Add(new Grupa { Id = pg.GrupaId });
}
}
}
}
public GrupeIPodgrupe()
{
_PodGrupe = new ObservableCollection<PodGrupa>();
_PodGrupe.CollectionChanged += HandleChange;
}
public GrupeIPodgrupe(int proizvodId)
{
this._Grupe = Grupa.ListaGrupaProizvoda(proizvodId);
if(this.Grupe.Count > 0)
{
this.Podgrupe = PodGrupa.ListaPodgrupaProizvoda(Grupe[0].Id, proizvodId);
}
}
public GrupeIPodgrupe(TreeView treeView)
{
_Grupe = new List<Grupa>();
_PodGrupe = new ObservableCollection<PodGrupa>();
_PodGrupe.CollectionChanged += HandleChange;
foreach (TreeNode n in treeView.Nodes)
{
if(n.Checked)
{
foreach(TreeNode n1 in n.Nodes)
{
if(n1.Checked)
_PodGrupe.Add(new PodGrupa { GrupaId = (int)n.Tag, PodGrupaId = (int)n1.Tag });
}
}
}
}
public void Reset()
{
_Grupe = new List<Grupa>();
_PodGrupe = new ObservableCollection<PodGrupa>();
}
}
public class Paket
{
public int PaketId;
public int ProizvodId;
public double CenaBezPdv;
public double Kolicina;
}
#endregion
private Proizvod()
{
}
/// <summary>
/// Kreira klasu sa podacima proizvoda sa web-a
/// </summary>
/// <param name="ROBAID">Unikatni ID za stavku/proizvod/robu</param>
public Proizvod(int ROBAID)
{
if(ROBAID == null ) { throw new Exception("ROBAID ne moze biti NULL!"); }
string url = "censoredLink";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string resp = new StreamReader(response.GetResponseStream()).ReadToEnd();
switch (resp)
{
case "0": //Nije pronadjen proizvod
_errorMessage = "Proizvod nije pronadjen u web bazi!";
break;
default:
Proizvod p = JsonConvert.DeserializeObject<Proizvod>(resp);
if(p == null)
{
MessageBox.Show("Unhandled error!");
return;
}
this._PROIZVODID = p.PROIZVODID;
this._NAZIV = p.NAZIV;
this._OPIS = p.OPIS;
this._JM = p.JM;
this._AKCIJSKI_ARTIKAL = p.AKCIJSKI_ARTIKAL;
this._AKTIVAN = p.AKTIVAN;
this._KATBR = p.KATBR;
this._PDV = p.PDV;
this._SLIKA = p.SLIKA;
this._KratakOpis = p.KratakOpis;
this._GrupeIPodGrupe = new GrupeIPodgrupe(p.PROIZVODID);
break;
}
}
public Proizvod(int RobaId, string Naziv, string Opis, string Jm, bool AkcijskiArtikal, bool Aktivan, string KatBr, double PDV, string Slika, string KratakOpis, GrupeIPodgrupe gip, List<Paket> paketi, string fileNameSlika, string filePathSlika)
{
this._PROIZVODID = RobaId;
this._NAZIV = Naziv;
this._OPIS = Opis;
this._JM = Jm;
this._AKCIJSKI_ARTIKAL = (AkcijskiArtikal) ? 1 : 0;
this._AKTIVAN = (Aktivan) ? 1 : 0;
this._KATBR = KatBr;
this._PDV = PDV;
this._SLIKA = Slika;
this._KratakOpis = KratakOpis;
this._GrupeIPodGrupe = gip;
this._Paketi = paketi;
this.fileNameSlika = fileNameSlika;
this.pathSlika = filePathSlika;
}
/// <summary>
/// Updateuje trenutne vrednosti proizvoda na sajt!
/// </summary>
public void Update()
{
#region Proizvod table
string url = String.Format("censoredLink");
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string resp = new StreamReader(response.GetResponseStream()).ReadToEnd();
switch (resp)
{
case "0": //Nije pronadjen proizvod
_errorMessage = "Doslo je do greske!";
break;
case "1":
_errorMessage = "Uspesno updateovan prozvod na WEB-u";
break;
case "2":
_errorMessage = "Proizvod sa tim ID-em nije pronadjen u bazi!";
break;
default:
break;
}
#endregion
DeGrupisi();
Grupisi();
}
public void Publish()
{
PublishProizvod();
Grupisi();
PublishPakete();
Thread t = new Thread(PublishSliku);
t.Start();
}
public static List<Proizvod> SviProizvodi()
{
List<Proizvod> list = new List<Proizvod>();
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
string url = "censoredLink";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string resp = new StreamReader(response.GetResponseStream()).ReadToEnd();
switch (resp)
{
case "0": //Nije pronadjen proizvod
break;
default:
list = JsonConvert.DeserializeObject<List<Proizvod>>(resp);
break;
}
return list;
}
/// <summary>
/// Skida proizvodu bilo kakvu grupu i podgrupu
/// </summary>
private void DeGrupisi()
{
string url = "censoredLink";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string resp = new StreamReader(response.GetResponseStream()).ReadToEnd();
switch (resp)
{
case "0":
_errorMessage = "Doslo je do greske prilikom brisanja proizvoda iz grupa i podgrupa";
break;
case "1":
_errorMessage = "Uspesno degrupisani proizvodi!";
break;
default:
_errorMessage = "Unhandled error";
break;
}
}
private void Grupisi()
{
foreach(PodGrupa pg in GrupeIPodGrupe.Podgrupe)
{
string url = string.Format("censoredLink");
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string resp = new StreamReader(response.GetResponseStream()).ReadToEnd();
switch (resp)
{
case "0":
_errorMessage = "Doslo je do greske prilikom grupisanja proizvoda";
break;
case "1":
_errorMessage = "Proizvod je uspesno grupisan!";
break;
case "2":
_errorMessage = "Proizvod je vec u grupi!";
break;
default:
_errorMessage = "Unhandled error";
break;
}
}
}
private void PublishProizvod()
{
string url = string.Format("censoredLink");
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string resp = new StreamReader(response.GetResponseStream()).ReadToEnd();
switch (resp)
{
case "0":
_errorMessage = "Doslo je do greske prilikom kreiranja proizvoda";
break;
case "1":
_errorMessage = "Proizvod je uspesno kreiran!";
break;
case "2":
_errorMessage = "Proizvod vec postoji u web bazi!";
break;
default:
_errorMessage = "Unhandled error";
break;
}
}
private void PublishPakete()
{
foreach (Proizvod.Paket p in Paketi)
{
string url = string.Format("censoredLink");
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string resp = new StreamReader(response.GetResponseStream()).ReadToEnd();
switch (resp)
{
case "0":
_errorMessage = "Doslo je do greske prilikom dodavanja paketa";
break;
case "1":
_errorMessage = "Paketi uspesno dodati!";
break;
default:
_errorMessage = "Unhandled error";
break;
}
}
}
private void PublishSliku()
{
if (!string.IsNullOrWhiteSpace(_SLIKA))
{
M.preventClosing = true;
MessageBox.Show("Dodavanje slike ce potrajati i zavisi od brzine interneta koju imate i nece vam dozvoliti zatvaranje programa!\nDodavanje slike se vrsi u pozadini te mozete nastaviti sa radom u programu!");
using (WebClient client = new WebClient())
{
client.Credentials = new NetworkCredential("username", "password");
client.UploadFile("censoredLink");
}
M.preventClosing = false;
}
}
}
答案 0 :(得分:1)
您的代码正在呼叫:
proizvod.GrupeIPodGrupe.Reset()
正在清空ObservableCollection
。