Diskuze: Vracení pole položek z databáze.
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Caw, tym seznamem myslis "items"??...Lebo ak to vidim dobre tak doteho seznamu ukladas len ten objekt "item" stale dokola...Natej metode z List<> to vidis ze tam stale pridavas items.Add(item), ten isty objekt dokola
Ten item se vždy změní dle dalšího řádku v dataTable. Když to kontroluji za běhu. Přidá ho do listu. Při dalším dalším řádku je item jiný. A vloží se do listu. Ale přepíše to i ten původní item v listu jsou už dva itemy, ale uplně stejné. Pak se načte další item je zase jiný dle řádku. A vloží se do listu. už jsou tam 3 itemy, ale ten nový přepíše zase ty dva původní. Tak už jsou tam 3 stejné itemy a takhle stále dokola.
Do toho itemu se vkládají nová data z těch proprertyInfo. Tak by neměl být problém že je stejný. Ale asi se pletu.
Koukám na to krok za krokem. A když se vloží první item do listu a pak se přes to foreach načítá další řádek. Tak se to souběžně mění postupně i na těch vložených itemech v listu. To mi hlava nebere.
Tak už jsem to asi pochopil. Bude to tím že je to ten samý objekt. Nevytváří se nový? Jen se mění data proto se to mění i v tom listu? Akorát nevím jak to vyřešit. Díky Tadeáši.
Jo tes mna to napadlo ze to bude tim...Musis si spravit klony teho itemu a tim menit vlastnosti
Konkretne bude problem asi vtem SetValue(item, value) kde vlastne stale
nastavujes hodnotu tej istej referncii...Pak to ulozis do zeznamu cez
items.Add(item), ale to vlastne len vytvoris novu referenciu(odkaz) na ten isti
object, takze proste 3x odkazujes na to iste...Ked chces aby to vytvorilo vzdy
novy obejct tak pred tim SetValue musis spravit kopiu teho obejctu a vlozit tam
tu, ne ten povodny...Dufam ze sem pomohel
Jop děkuji určitě. Už jsem to vyřešil. Sice nebyl takový plán. Ale snad to nebude tak špatný.
Tady to požaduje pouze jeden objekt a pak to skládá dohromady list.
public static List<ContiUser> GetUsers(this ContiUserConnect connect)
{
List<ContiUser> users = new List<ContiUser>();
DataTable table = connect.GetData();
for (int i = 0; i < table.Rows.Count; i++)
{
DataRow row = table.Rows[i];
users.Add((ContiUser)connect.GetData(row, new ContiUser()));
}
return users;
}
Tady to je ta původní metoda.
public object GetData(DataRow row, object item)
{
PropertyInfo[] props = item.GetType().GetProperties();
foreach (var prop in props)
{
string value = row[prop.Name].ToString();
prop.SetValue(item, value);
}
return item;
}
A už to funguje tak jak potřebuji.
Zobrazeno 10 zpráv z 10.