PDA

View Full Version : سوال: مشکل در آپدیت کردن آیتم های لیست ویو



پروگرامنویس
چهارشنبه 27 مهر 1390, 16:52 عصر
سلام
من یه برنامه رستوران دارم مینویسم تو فرم صدور فاکتور یه لیست ویو و سه تا تکست باکس برای وود اسم غذا،تعداد و قیمت دارم وقتی روی تکست باکس تعداد اینتر میزنم ،نام غذا،قیمت و تعدادش تو لیست ویو ظاهر میشه تا ینجا مشکلی ندارم، حالا میخوام وقتی کاربر غذایی که قبلا در لیست ویو هست رو دوباره وارد می کنه رکورد جدیدی اضافه نشه و روی همون رکورد قبلی غذا فقط تعداد و قیمتش به روز شه راستش راه های زیادی امتحان کردم از جمله استفاده از متد items.find() لیست ویو و یا استفاده از حلقه تکرار در ستون غذا واسه پیدا کردن نام غذای مشابه در تکست باکس نام غذا، ولی هر بار یه جاش مشکل داره اگه ممکنه کد این عمل رو برام بنویسید .تشکر

nilmil_nil
چهارشنبه 27 مهر 1390, 19:15 عصر
یه راه پیشنهاد میکنم
بیاید یه datatable besazid و هر دفه که عملیات انجام میشه روی دیتا تیبل انجام بشه و بعد با یه تابع اون اطلاعات دیتا تیبل رو بریز توی لیست ویو
اینجوری دیگه همچین مشکلی نداری

پروگرامنویس
چهارشنبه 27 مهر 1390, 20:28 عصر
راستش منظورتون رو متوجه نشدم ولی اگه اشتباه نکرده باشم شمابا این پیشنهاد بین نام مشابه غذا یا غیر مشابه فرق نمیزارید،من میخوام اگه نام غذا تکراری نبود یه رکورد جدید اضافه شه و اگه از قبل این غذا وجود داشت تعداد و قیمتش توی لیست ویو آپدیت شه ،البته اگه شمام همین منظورتون بود عذر میخوام ،اگه ممکنه کد انجام اینکار رو هم بنویسید خیلی ممنون میشم.

پروگرامنویس
چهارشنبه 27 مهر 1390, 20:58 عصر
سلام به نظر من از chklistbox استفاده کنید خیلی بهتره.اونایی که چک خوردن رو با یه foreche میتونی ذخیره کنی.

ببخشید یعنی چی؟با چک لیست باکس چیکار کنم؟

پروگرامنویس
چهارشنبه 27 مهر 1390, 21:48 عصر
لیست غذاها رو با یه Foreche از بانک می خونی و قرار میدی تو cheklistbox حالا کاقیه غذایی که مشتری می خواد رو تیک بزنی و با یه foreche دیگه اونو ذخیره کنی تو یه تیبل و تو گزارشت بیاری.اینطوری دیگه تکرار انتخاب رو هم نداری

فکر نکنم نظر خوبی باشه،شما میگید بجای لیست ویو از چک لیست باکس استفاده کنم؟من میخوام اطلاعات رو توی لیست ویو نشون بدم.لطفا اگه میدونید چطور میشه لیست ویو رو آپدیت کنم یا راه حل بهتری دارید بدید،خیلی گیرم

nilmil_nil
پنج شنبه 28 مهر 1390, 08:44 صبح
سلام
من الگوریتم کار رو بهتون گفتم
دوباره هم میگم
کدشو خودتون سعی کنید بنویسید
اینجوری بهتر یاد میگیرید
شما باید قبل از اینکه اطلاعات رو توی لیست ویو نشون بدی
اون توی دیتا تیبل بریزی و همونجا جستجو کنی اگه اون مورد توی دیتا تیبل وجود داشت عملیات لازم انجام بشه
بعد از اینکه عملیات رو انجام دادی
حالا میتونی دیتا تیبل رو به لیست ویو اضاف کنی
که این کار هم با یه حلقه for به سادگی قابل پیاده سازی هست
با تشکر

پروگرامنویس
پنج شنبه 28 مهر 1390, 15:59 عصر
باشه ممنون من اینکار روهم انجام میدم، ولی میخوام اینجا کدهایی که خودم نوشتم رو بزارم ،بابا از نظر منطقی این کدها که نوشتم باید جواب بده ولی نمیدونم چرا قسمت شرط برابری نام غذا اجرا نمیشه و قسمت else اجرا میشه ،اگه شما دلیلی براش پیدا کردین ،بگید خیلی خیلی ممنون میشم دوباره.

متد اول(جالب اینجاس تو این متد برنامم درست کار میکنه اما فقط برای اولین رکورد !یعنی مثلا اگه به ترتیب تو لیست ویو اول کباب بعد جوجه باشه و بعد بار سوم کباب وارد کنم متد درست کار میکنه و توی همون رکورد اول کباب تعداد و قیمتش آپدیت میشه ولی اگه بار سوم دوباره جوجه وارد کنم یه رکورد جدید اضافه میشه و رکورد جوجه آپدیت نمیشه.آرایه های ghaza[0],ghaza[1],ghaza[2],ghaza[3], برای نگهداری نام ،تعداد،قیمت وقیمت کل میباش.

try
{
if (txtTedad.Text == "")
return;
if (e.KeyCode == Keys.Enter)
{
string strfood = txtCode.Text.Trim();

if (lvfac.Items.Count == 0)
{
TempPool = NewFood.Gheymat;
TedadGhaza = Int32.Parse(txtTedad.Text);
Pool = (TedadGhaza * TempPool);
Ghaza[1] = txtTedad.Text;
Ghaza[3] = Pool.ToString();
ListViewItem lvi = new ListViewItem(Ghaza);
lvfac.Items.Add(lvi);
JamePool += Pool;
txtTedad.Text = "";
txtCode.Text = "";
txtShEsh.Text = "";
txtCode.Focus();
lblPool.Text = JamePool.ToString();
}
else
{

for (int i = 0; i <= lvfac.Items.Count; i++)
{
if (lvfac.Items[i].SubItems[0].Text.ToString() == strfood)
{
int tedad_ghaza_ghabli = int.Parse(lvfac.Items[i].SubItems[1].Text);
int tedad_ghaza_baedi = int.Parse(txtTedad.Text) + tedad_ghaza_ghabli;
Ghaza[1] = tedad_ghaza_baedi.ToString();
TempPool = NewFood.Gheymat;
JamePool = (tedad_ghaza_baedi * TempPool);
Ghaza[3] = JamePool.ToString();
lvfac.Items[i].SubItems[0].Text = Ghaza[0];
lvfac.Items[i].SubItems[1].Text = Ghaza[1];
lvfac.Items[i].SubItems[2].Text = TempPool.ToString();
lvfac.Items[i].SubItems[3].Text = JamePool.ToString();
//ListViewItem lvi = new ListViewItem(Ghaza);
//lvfac.Items.Add(lvi);
txtTedad.Text = "";
txtCode.Text = "";
txtShEsh.Text = "";
txtCode.Focus();
lblPool.Text = "if";
break;
}
else if(lvfac.Items[i].SubItems[0].Text.ToString()!=strfood)
{
TempPool = NewFood.Gheymat;
TedadGhaza = Int32.Parse(txtTedad.Text);
JamePool = (TedadGhaza * TempPool);
Ghaza[1] = txtTedad.Text;
Ghaza[3] = JamePool.ToString();
ListViewItem lvi = new ListViewItem(Ghaza);
lvfac.Items.Add(lvi);
txtTedad.Text = "";
txtCode.Text = "";
txtShEsh.Text = "";
txtCode.Focus();
lblPool.Text = "else";
break;
}
}
}
}
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
txtTedad.Text = "";
}

متد دوم(تو این متد حتی یک بار هم بخش شرط اجرا نمیشه)

if (txtTedad.Text == "")
return;
if (e.KeyCode == Keys.Enter)
{
string strfood = Ghaza[0];
var theSameItems = lvfac.Items.Find(strfood, false);
if (theSameItems.Count() >= 1)
{
int tedad_ghaza_ghabli = int.Parse(lvfac.Items[theSameItems.First().Index].SubItems[1].Text);
int tedad_ghaza_baedi = int.Parse(txtTedad.Text) + tedad_ghaza_ghabli;
Ghaza[2] = tedad_ghaza_baedi.ToString();
TempPool = NewFood.Gheymat;
JamePool = (tedad_ghaza_baedi * TempPool);
Ghaza[3] = JamePool.ToString();
lvfac.Items[theSameItems.First().Index].SubItems[0].Text = Ghaza[0];
lvfac.Items[theSameItems.First().Index].SubItems[1].Text = Ghaza[1];
lvfac.Items[theSameItems.First().Index].SubItems[2].Text = TempPool.ToString();
lvfac.Items[theSameItems.First().Index].SubItems[3].Text = JamePool.ToString();
// ListViewItem lvi = new ListViewItem(Ghaza);
// lvfac.Items.Add(lvi);
txtTedad.Text = "";
txtCode.Text = "";
txtShEsh.Text = "";
txtCode.Focus();
lblPool.Text = "if";
}
else
{
TempPool = NewFood.Gheymat;
TedadGhaza = Int32.Parse(txtTedad.Text);
JamePool = (TedadGhaza * TempPool);
Ghaza[2] = txtTedad.Text;
Ghaza[3] = JamePool.ToString();
ListViewItem lvi = new ListViewItem(Ghaza);
lvfac.Items.Add(lvi);
txtTedad.Text = "";
txtCode.Text = "";
txtShEsh.Text = "";
txtCode.Focus();
lblPool.Text = "else";
}
}

پروگرامنویس
پنج شنبه 28 مهر 1390, 17:02 عصر
سلام دوستان،بلاخره کشف کردم مشکل سر چی بود "یه متغیر بولین کوچیک"کد درست رو براتون میزارم
متد اول:

try
{
bool n = false;
if (txtTedad.Text == "")
return;
if (e.KeyCode == Keys.Enter)
{
string strfood = txtCode.Text.Trim();

if (lvfac.Items.Count == 0)
{
TempPool = NewFood.Gheymat;
TedadGhaza = Int32.Parse(txtTedad.Text);
Pool = (TedadGhaza * TempPool);
Ghaza[1] = txtTedad.Text;
Ghaza[3] = Pool.ToString();
ListViewItem lvi = new ListViewItem(Ghaza);
lvfac.Items.Add(lvi);
txtTedad.Text = "";
txtCode.Text = "";
txtShEsh.Text = "";
txtCode.Focus();
}
else
{

for (int i = 1; i <= lvfac.Items.Count; i++)
{
if (lvfac.Items[i-1].SubItems[0].Text.ToString() == strfood)
{
int tedad_ghaza_ghabli = int.Parse(lvfac.Items[i-1].SubItems[1].Text);
int tedad_ghaza_baedi = int.Parse(txtTedad.Text) + tedad_ghaza_ghabli;
Ghaza[1] = tedad_ghaza_baedi.ToString();
TempPool = NewFood.Gheymat;
JamePool = (tedad_ghaza_baedi * TempPool);
Ghaza[3] = JamePool.ToString();
lvfac.Items[i-1].SubItems[0].Text = Ghaza[0];
lvfac.Items[i-1].SubItems[1].Text = Ghaza[1];
lvfac.Items[i-1].SubItems[2].Text = TempPool.ToString();
lvfac.Items[i-1].SubItems[3].Text = JamePool.ToString();
txtTedad.Text = "";
txtCode.Text = "";
txtShEsh.Text = "";
txtCode.Focus();
n = true;

}
}
if (n == false)
{
TempPool = NewFood.Gheymat;
TedadGhaza = Int32.Parse(txtTedad.Text);
JamePool = (TedadGhaza * TempPool);
Ghaza[1] = txtTedad.Text;
Ghaza[3] = JamePool.ToString();
ListViewItem lvi = new ListViewItem(Ghaza);
lvfac.Items.Add(lvi);
txtTedad.Text = "";
txtCode.Text = "";
txtShEsh.Text = "";
txtCode.Focus();
}

}
JamePool = 0;
for (int i = 1; i <= lvfac.Items.Count; i++)
{

string txt = lvfac.Items[i - 1].SubItems[3].Text;
JamePool += Int32.Parse(txt);

}
lblPool.Text = JamePool.ToString();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
txtTedad.Text = "";
}