+4 امتیاز

باسلام

من یه برنامه برای انبار نوشتم که الان برای موجودی گرفتن از انبار کمک می خواهم لطفا راهنمایی کنید. باتشکر

 

تمامی کالاهای انبار در یک دیتا گرید ویو نمایش داده می شود :
 برای موجودی گرفتن از چه کدی استفاده کنم ؟؟
توضیحات :
 کالاهای انبار با شماره کالا ذخیره شدن حالا من میخوام وقتی که رو دکمه موجودی کلیک میکنم تمامی کالا ها و تعداد موجود در انبار نمایش داده شود ؟؟

___________________________________________________________________________________________

منظورم از کالاهای انبار : کل کالا ها هست که با نام و شماره ذخیره شدن... که من کلیه اطلاعات انبار رو ( نام کالا ، شماره کالا ، تاریخ خرید ، تعداد ، تاریخ ثبت و نام ثبت کننده و ... ) رو در یک گرید ویو نمایش میدهم حالا میخوام یک موجودی دقیق از کلیه کالاها بگیرم که ببینم چه کالاهایی با چه تعدادی در انبار دارم ...

ضمنا کالاها هم مشخص نیست چون روز به روز اضافه میشوند نمیشه گفت کد کالا و نام کالا ثابت هستن.

 گرید ویو:

نام کالا شماره کالا تاریخ خرید قیمت تعداد
مداد 110 1394/05/26 10000 10
خودکار 120 1394/05/26 10000 5
کاغذ 130 ...... 1000 1000
خودکار 120 ...... 10000 10
کاغذ 130 ....... 100 100
مداد 110 ......... 130 5
....... ....... ......... .... ...

 خروجی:

نام کالا تعداد
مداد 15
خودکار 15
کاغذ 1100
..... ....

من یه همچین جدولی رو در خروجی میخواهم؟؟؟!!!

___________________________________________________________________________________________
تمامی کالا ها به همراه تعدادش نمایش داده شود؟؟
(در دیتا گرید ویو جستجو کنه اگر شماره کالا یکسان بود سطر تعداد رو باهم جمع کنه و در تکس باکس نمایش بدهد... راستی چون جستجو روی شماره کالا انجام میشود زمانی که میخواهد تعداد رو نمایش بده باید نام کالا رو هم نمایش بدهد.)

سلام.

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

"تمامی کالا ها به همراه تعدادش نمایش داده شود؟؟" یعنی اگر کالایی با دو کد یکسان(نام و ...) داشتید هر دو نمایش داده بشه و نام  و مشخصات هر دو بیاد؟

شما کد مورد نظر رو در تکست باکس وارد میکنید و  در دیتا گرید ویو جستجو میکنید؟

یا هدف کلیتون اینه که مثلا انبار مواد غذایی هست دو بار حلوا ثبت کردید حالا میخواهید نام "حلوا" تنها یک بار بیاید اما تعدادشان با هم جمع شود؟

به این صورت:

جدول

 نام تعداد
حلوا 20 
حلوا 30

 

خروجی

نام تعداد
حلوا 50

 

ویرایش شده توسط
توسط (2,595 امتیاز) 5 15 90

باسلام 

منظورم از کالاهای انبار : کل کالا ها هست که با نام و شماره ذخیره شدن... که من کلیه اطلاعات انبار رو ( نام کالا ، شماره کالا ، تاریخ خرید ، تعداد ، تاریخ ثبت و نام ثبت کننده و ... ) رو در یک گرید ویو نمایش میدهم حالا میخوام یک موجودی دقیق از کلیه کالاها بگیرم که ببینم چه کالاهایی با چه تعدادی در انبار دارم ...

ضمنا کالاها هم مشخص نیست چون روز به روز اضافه میشوند نمیشه گفت کد کالا و نام کالا ثابت هستن.

 گرید ویو:

نام کالا شماره کالا تاریخ خرید قیمت تعداد
مداد 110 1394/05/26 10000 10
خودکار 120 1394/05/26 10000 5
کاغذ 130 ...... 1000 1000
خودکار 120 ...... 10000 10
کاغذ 130 ....... 100 100
مداد 110 ......... 130 5
....... ....... ......... .... ...

 خروجی:

نام کالا تعداد
مداد 15
خودکار 15
کاغذ 1100
..... ....

من یه همچین جدولی رو در خروجی میخواهم؟؟؟!!!

توسط (276 امتیاز) 14 37

3 پاسخ

+4 امتیاز
سلام

شما میتونید با یک کوئری تو در تو موجودی انبارتون رو بدست بیارید

یک سلکت با دستور عدم نمایش تکرای ها بنویس که ستون هارو هم با یک سلکت جدا با تابع سام
سلام

باتشکر از راهنمایی شما.

لطفا کد مورد نظر را در صورت امکان بنویسید.
توسط (276 امتیاز) 14 37
+3 امتیاز

select Distinct Sefaresh.IdZir,Zir.NameZir,(select sum(Sefaresh.Tedad) as tedad  

تقریبا مثل کد بالا

اون قسنتی که داخل پارنتز هست رو برای ستونی که میخواین جمع بشه بنویسید و کلمه دیستینک برای عدم نمایش تکراری ها هستش

+4 امتیاز

سلام.

نام ستون نام کالا رو "nam" و  نام ستون تعداد رو "tedad" در نظر گرفتم.

 1- مقادیر نامهای یکسان با هم جمع شده.

 2- منبع داده دیتاگرید ویو برابر با null قرار گرفته.

3- ستونهای دیتا گرید ویو حذف شده.

4- دو ستون جدید برای نام و تعداد در نظر گرفته شده.

5- دیتا گرید ویو مقدار دهی شده.

برای این کد از دیکشنری استفاده شده.

میتونید از این لینک اطلاعاتی راجبش بدست بیارید 

http://www.w3-farsi.com/ساخت-دیکشنری/

ویدئو:

http://www.aparat.com/v/tvqbr/قسمت_پنجاهم%3A_کالکشن_های_جنریک،_Dictionary

 

        private void button1_Click(object sender, EventArgs e)
        {
            Dictionary<string, Int32> dictionery = new Dictionary<string, Int32>();
            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                string name = row.Cells["nam"].Value.ToString();
                bool result = dictionery.ContainsKey(name);
                if (result == false)
                    dictionery.Add(name, Convert.ToInt32(row.Cells["tedad"].Value));
                else
                    dictionery[name] += Convert.ToInt32(row.Cells["tedad"].Value);
            }
            dataGridView1.DataSource = null;
            dataGridView1.Columns.Clear();
            dataGridView1.Columns.Add("nam", "نام");
            dataGridView1.Columns.Add("tedad", "تعداد");
            foreach (KeyValuePair<string, int> item in dictionery)
            {
                dataGridView1.Rows.Add(item.Key, item.Value.ToString());
            }
        }

 

کارایی کد رو تست کنید ببینید تا چه تعداد رکورد خوب جواب میده من تا 80000 امتحان کردم و خوب بود.

اگر کد بهینه تری نیاز بود بگید تا قرار بدم.

پیشنهاد میدم از اس کیو ال سرور استفاده کنید سرعت بالایی داره.

شما میتونید با این کوئری به راحتی و سرعت بالا کاری رو که مد نظرتون است انجام بدید و برنامتون بهتر میشه:

SELECT Name, SUM(tedad) AS tedad
FROM table_name
GROUP BY Name;

Name => ستون نام کالا.

tedad => ستون تعداد کالا.

table_name => نام جدول.

سلام.

این کد  رو بنویسید تا زمان ارور نام ستونها برگشت داده بشه و ببینید که نام ستونها تغییر کرده است که در واقع خطا همین را میگوید

            try
            {
                Dictionary<string, Int32> dictionery = new Dictionary<string, Int32>();
                foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    string name = row.Cells["NamKala"].Value.ToString();
                    bool result = dictionery.ContainsKey(name);
                    if (result == false)
                        dictionery.Add(name, Convert.ToInt32(row.Cells["Tedad"].Value));
                    else
                        dictionery[name] += Convert.ToInt32(row.Cells["Tedad"].Value);
                }
                dataGridView1.DataSource = null;
                dataGridView1.Columns.Clear();
                dataGridView1.Columns.Add("NamKala", "نام");
                dataGridView1.Columns.Add("Tedad", "تعداد");
                foreach (KeyValuePair<string, int> item in dictionery)
                {
                    dataGridView1.Rows.Add(item.Key, item.Value.ToString());
                }
            }
            catch
            {
                // اگر خطا بده این بلوک کد اجار میشه و نام ستونها برگشت داده میشه
                // برای اینکه متوجه شویم آیا نام ستون صحیح است یا خیر
                string columnsName = "";
                foreach (DataGridViewColumn column in dataGridView1.Columns)
                {
                    columnsName += column.Name + Environment.NewLine;
                }
                MessageBox.Show(columnsName);
            }

 

توسط (2,595 امتیاز) 5 15 90
کد رو امتحان کردم صحیحه و مشکلی نداره.
توسط (2,595 امتیاز) 5 15 90
سوال جدید

2,337 سوال

2,871 پاسخ

3,725 دیدگاه

3,924 کاربر

دسته بندی ها

...