PDA

View Full Version : حرفه ای: مشکل با لیست در سی شارپ



amin2004
شنبه 29 فروردین 1394, 21:50 عصر
سلام

using (cmd = new SQLiteCommand(query, con))
{
using(SQLiteDataReader reader = cmd.ExecuteReader())
{
if(reader != null)
{
eventlist.Clear();
while(reader.Read())
{
event_info.eventrow = Convert.ToInt16(reader["row"].ToString());
event_info.EventTitle = reader["title"].ToString();
event_info.EventType = Convert.ToBoolean(reader["type"].ToString());
event_info.IsHoliday = Convert.ToBoolean(reader["holiday"].ToString());
event_info.EventDate = Convert.ToDateTime(reader["date"].ToString());
eventlist.Add(event_info);
ret = "1";
}
reader.Close();
}
}
}


من تو کد بالا داده ها رو درون لیست ذخیره می کنم
ولی وقتی میخوام با دستور زیر اطلاعات رو بخونم فقط مقدار آخری رو به جاب همه برمبگردونه
به نظرتون مشکل از کجاست؟


for (int i = 0; i < x; i++)
{
event_detail = EventsList.Commands.eventlist[i];
cbxTitle.Items.Add(event_detail.EventTitle);
}


کسی تا حالا چنین مشکلی داشته؟

behzaf
دوشنبه 31 فروردین 1394, 11:47 صبح
سلام
eventlist.Add(event_info);

من تو کد بالا داده ها رو درون لیست ذخیره می کنم
ولی وقتی میخوام با دستور زیر اطلاعات رو بخونم فقط مقدار آخری رو به جاب همه برمبگردونه
به نظرتون مشکل از کجاست؟


for (int i = 0; i < x; i++)
{
event_detail = EventsList.Commands.eventlist[i];
cbxTitle.Items.Add(event_detail.EventTitle);
}


کسی تا حالا چنین مشکلی داشته؟

در خطی که پررنگ کردم شما دارید هربار رفرنس به یک event_info object رو به لیست اضافه می کنید. فقط محتویات اون ابجکت تغییر میکنه در نتیجه تمامی رفرنس های لیست به این آبجکت بخصوص بر میگرده. سعی کنید هربار یک event_info جدید بسازید

malizergani
دوشنبه 31 فروردین 1394, 14:09 عصر
سلام دوست عزیز

چرا توی لود در کمبو اد نمی کنید؟


using (cmd = new SQLiteCommand(query, con))
{
using(SQLiteDataReader reader = cmd.ExecuteReader())

{
if(reader != null)
{
eventlist.Clear();
while(reader.Read())
{
event_info.eventrow = Convert.ToInt16(reader["row"].ToString());
event_info.EventTitle = reader["title"].ToString();
event_info.EventType = Convert.ToBoolean(reader["type"].ToString());
event_info.IsHoliday = Convert.ToBoolean(reader["holiday"].ToString());
event_info.EventDate = Convert.ToDateTime(reader["date"].ToString());
eventlist.Add(event_info);
ret = "1";

cbxTitle.Items.Add(event_detail.EventTitle);
}

reader.Close();
}
}
}




و چرا با LINQ کار نمی کنید؟

amin2004
دوشنبه 31 فروردین 1394, 21:40 عصر
در خطی که پررنگ کردم شما دارید هربار رفرنس به یک event_info object رو به لیست اضافه می کنید. فقط محتویات اون ابجکت تغییر میکنه در نتیجه تمامی رفرنس های لیست به این آبجکت بخصوص بر میگرده. سعی کنید هربار یک event_info جدید بسازید


قیقتر میشه توضیح بدید.
یعنی چطور بنویسم؟
منظورتون از اینکه هربار یه event_info جدید تفریف کنم چیه؟
من هر بار محتویات رکوردی که می خونم رو درون این object می ریزم بعد این آبجکت رو به لیست اضافه می کنم.

amin2004
دوشنبه 31 فروردین 1394, 21:46 عصر
سلام دوست عزیز

چرا توی لود در کمبو اد نمی کنید؟


using (cmd = new SQLiteCommand(query, con))
{
using(SQLiteDataReader reader = cmd.ExecuteReader())

{
if(reader != null)
{
eventlist.Clear();
while(reader.Read())
{
event_info.eventrow = Convert.ToInt16(reader["row"].ToString());
event_info.EventTitle = reader["title"].ToString();
event_info.EventType = Convert.ToBoolean(reader["type"].ToString());
event_info.IsHoliday = Convert.ToBoolean(reader["holiday"].ToString());
event_info.EventDate = Convert.ToDateTime(reader["date"].ToString());
eventlist.Add(event_info);
ret = "1";

cbxTitle.Items.Add(event_detail.EventTitle);
}

reader.Close();
}
}
}




و چرا با LINQ کار نمی کنید؟


واسه اینکه این کد و چندتا کد شبیه این درون DLL های مختلف هست که از اونها فراخوانی می کنم
فقط این نیست چندتا دیگه مثل این هست
--
در آخر هم باید بگم که عادت کردم به این
LINQزیاد کار نکردم

malizergani
سه شنبه 01 اردیبهشت 1394, 01:30 صبح
using (cmd = new SQLiteCommand(query, con))
{
using (SQLiteDataReader reader = cmd.ExecuteReader())
{
if (reader != null)
{
eventlist.Clear();
while (reader.Read())
{
// Event_Info == این یک کلاس است
// event_info == این متغیر این کلاس
event_info = new Event_Info();
event_info.eventrow = Convert.ToInt16(reader["row"].ToString());
event_info.EventTitle = reader["title"].ToString();
event_info.EventType = Convert.ToBoolean(reader["type"].ToString());
event_info.IsHoliday = Convert.ToBoolean(reader["holiday"].ToString());
event_info.EventDate = Convert.ToDateTime(reader["date"].ToString());

// eventlist = این یک لیست از کلاس بالاست
eventlist.Add(event_info);
ret = "1";
}
reader.Close();
}
}
}

var events = (from m in eventlist
select new { EventTitle = m.EventTitle }).ToArray();
cbxTitle.DataSource = events;
cbxTitle.DisplayMember = "EventTitle";

amin2004
سه شنبه 01 اردیبهشت 1394, 19:02 عصر
سلام
ممنون از همگی
مشکل با کمک و راهنمایی روستان عزیز حل شد.
event_info = new Event_Info();
مشکل تو همین یه تیکه کد بود که با آوردن اون درون حلقه While مشکل حل شد.
با تشکر از malizergani (http://barnamenevis.org/member.php?191480-malizergani) و behzaf (http://barnamenevis.org/member.php?357492-behzaf)