PDA

View Full Version : سوال: سياه شدن سلول هاي گريد ويو در زمان محاسبه فيلدها با فرمول



tara1367
شنبه 11 آذر 1391, 10:49 صبح
سلام دوستان
من در برنامم گريد ويويي دارم كه كاربر مقدار تعدادي از ستون ها رو وارد كرده و با زدن دكمه محاسبه كه در آن تعدادي فرمول تعريف كردم ، ساير فيلد هاي گريد ويو نيز پر ميشوند. ولي متأسفانه بعد از زدن اين دكمه تعدادي از سلول ها سياه مي شوند و اسكرول رو كه جابجا ميكنم دوباره تعدادي ديگر سياه مي شوند . كسي ميدنه مشكل چيه؟
با تشكر

tara1367
شنبه 11 آذر 1391, 11:22 صبح
دوستان اگه كسي ميدونه خواهشمندم راهنمايي كنه.

FastCode
شنبه 11 آذر 1391, 12:00 عصر
هیچکس نمیدونه چون کسی کد شما رو ندیده.
واقعاً چه فکری میکنید که اینطوری پست میدین؟

tara1367
شنبه 11 آذر 1391, 12:10 عصر
يعني چي ؟!!! خوب من كه دقيقا گفتم كاربر مقدار تعدادي از فيلدها رو وارد ميكنه بعد ميزنه روي دكمه محاسبه فرض كنيد كار اين دكمه جمع كردن مقدار فيلد 1و2 با هم هست و آن را در فيلد سوم ميريزه ولي سياه ميشه.

tara1367
شنبه 11 آذر 1391, 12:16 عصر
حالا بازم من كد داخل Button رو ميزارم:

for (int i = 0; i < DGVKarkard.RowCount; i++)
{

DGVKarkard.Rows[i].Cells["PHGHTMonth"].Value =
(((decimal.Parse(codes.SeperatorCamma(DGVKarkard.R ows[i].Cells["HGHOfOneHour"].Value.ToString()))) * 160) *
(decimal.Parse(codes.SeperatorCamma(txtmablaghkilo kol.Text)))) / (dSumOfTotalHGH);

DGVKarkard.Rows[i].Cells["TotalPHGHT"].Value =
((decimal.Parse(codes.SeperatorCamma(DGVKarkard.Ro ws[i].Cells["TotalHGH"].Value.ToString()))) *
(decimal.Parse(codes.SeperatorCamma(txtmablaghkilo kol.Text)))) / (dSumOfTotalHGH);

DGVKarkard.Rows[i].Cells["DaryaftiKhales"].Value =
(decimal.Parse(codes.SeperatorCamma(DGVKarkard.Row s[i].Cells["TotalPHGHT"].Value.ToString()))) -
(decimal.Parse(codes.SeperatorCamma(DGVKarkard.Row s[i].Cells["Bime"].Value.ToString())));

DGVKarkard.Rows[i].Cells["TotalDaryafti"].Value =
(decimal.Parse(codes.SeperatorCamma(DGVKarkard.Row s[i].Cells["DaryaftiKhales"].Value.ToString()))) +
(decimal.Parse(codes.SeperatorCamma(DGVKarkard.Row s[i].Cells["Padash"].Value.ToString())));

if ((int.Parse(codes.SeperatorCamma(DGVKarkard.Rows[i].Cells["OtherHGH"].Value.ToString()))) != 0)
DGVKarkard.Rows[i].Cells["OtherVajh"].Value =
(decimal.Parse(codes.SeperatorCamma(DGVKarkard.Row s[i].Cells["OtherHGH"].Value.ToString()))) -
(decimal.Parse(codes.SeperatorCamma(DGVKarkard.Row s[i].Cells["DaryaftiKhales"].Value.ToString())));
if ((int.Parse(codes.SeperatorCamma(DGVKarkard.Rows[i].Cells["OtherHGH"].Value.ToString()))) == 0)
DGVKarkard.Rows[i].Cells["OtherVajh"].Value = 0;

DGVKarkard.Rows[i].Cells["FinalHGH"].Value =
(decimal.Parse(codes.SeperatorCamma(DGVKarkard.Row s[i].Cells["TotalDaryafti"].Value.ToString()))) +
(decimal.Parse(codes.SeperatorCamma(DGVKarkard.Row s[i].Cells["OtherVajh"].Value.ToString())));

DGVKarkard.Rows[i].Cells["FinalHourHGH"].Value =
((decimal.Parse(codes.SeperatorCamma(DGVKarkard.Ro ws[i].Cells["FinalHGH"].Value.ToString()))) +
(decimal.Parse(codes.SeperatorCamma(DGVKarkard.Row s[i].Cells["Bime"].Value.ToString())))) /
((decimal.Parse(codes.SeperatorCamma(DGVKarkard.Ro ws[i].Cells["WorkHour"].Value.ToString()))) +
(decimal.Parse(codes.SeperatorCamma(DGVKarkard.Row s[i].Cells["AddWorkHour"].Value.ToString()))));

}

veniz2008
شنبه 11 آذر 1391, 12:18 عصر
سلام دوستان
من در برنامم گريد ويويي دارم كه كاربر مقدار تعدادي از ستون ها رو وارد كرده و با زدن دكمه محاسبه كه در آن تعدادي فرمول تعريف كردم ، ساير فيلد هاي گريد ويو نيز پر ميشوند. ولي متأسفانه بعد از زدن اين دكمه تعدادي از سلول ها سياه مي شوند و اسكرول رو كه جابجا ميكنم دوباره تعدادي ديگر سياه مي شوند . كسي ميدنه مشكل چيه؟
با تشكر
سلام. سوالی که شما پرسیدید یه سوال کلی هست. کاش اون قسمت از کدهاتونو که باعث این مشکل میشه رو میذاشتید ولی یه احتمالی که ممکنه وجود داشته باشه بخاطر کم بودن بافر هستش. فرم شما یک خاصیت داره به نام DoubleBuffered. این خاصیت رو True کنید و دوباره تست کنید ببینید مشکلتون حل میشه یا نه. در غیر اینصورت کدهاتونو بذارید.

tara1367
شنبه 11 آذر 1391, 12:27 عصر
سلام. سوالی که شما پرسیدید یه سوال کلی هست. کاش اون قسمت از کدهاتونو که باعث این مشکل میشه رو میذاشتید ولی یه احتمالی که ممکنه وجود داشته باشه بخاطر کم بودن بافر هستش. فرم شما یک خاصیت داره به نام DoubleBuffered. این خاصیت رو True کنید و دوباره تست کنید ببینید مشکلتون حل میشه یا نه. در غیر اینصورت کدهاتونو بذارید.



ممنون دوست عزيز اين خاصيت رو true كردم ولي بازهم جواب نداد ولي كد رو براتون گذاشتم.

veniz2008
شنبه 11 آذر 1391, 12:44 عصر
این حلقه چندبار انجام میشه؟. احتمال داره که تعداد دفعات انجام حلقه اونقدر زیاد باشه که چنین مشکلی پیش بیاد. شما شرط حلقه رو بر روی تعداد محدودی تست کنید ببینید نتیجه چی میشه. اگر با تعداد تکرار کم مشکل حل شد اونوقت پیشنهاد میکنم از Backgroundworker استفاده کنید( کار کردن باهاش خیلی ساده است و جای نگرانی نیست) . مهم اینه که دلیل این مشکل رو شناسایی کنید.

tara1367
شنبه 11 آذر 1391, 12:55 عصر
این حلقه چندبار انجام میشه؟. احتمال داره که تعداد دفعات انجام حلقه اونقدر زیاد باشه که چنین مشکلی پیش بیاد. شما شرط حلقه رو بر روی تعداد محدودی تست کنید ببینید نتیجه چی میشه. اگر با تعداد تکرار کم مشکل حل شد اونوقت پیشنهاد میکنم از Backgroundworker استفاده کنید( کار کردن باهاش خیلی ساده است و جای نگرانی نیست) . مهم اینه که دلیل این مشکل رو شناسایی کنید.


ممنون دوست عزيز ديتاگريد ويو حداكثر 4 تا سطر داره زياد نيست. تعداد ستون هام زياده حدود 20 تا در حالت عادي سياه نميشه وقتي اسكرول گريدويو رو جابجا ميكنم سياه ميشه و همچنين وقتي فيلد Bime رو پر ميكنم.

veniz2008
شنبه 11 آذر 1391, 13:10 عصر
احتمال خیلی زیاد بخاطر مصرف بیش از حد رم باشه (خیلی راحت میتونید از tast manager تست کنید که هنگام استفاده از این کدها، چقدر از منابع سیستم شما گرفته میشه). پیشنهاد من همون backgroundworker هست.

برای این کار از ToolBox و از بخش Component شی BackgroundWorker را به فرم اضافه کنید،حال برای دو رویداد این شی کدهای زیر را مینویسیم:

رویداد Dowork :
درون این رویداد کدهای اصلی برنامه ( همین کدهایی که گذاشتید رو میزاریم).
RunWorkerCompleted رویداد :
در این رویداد هم چک می کنیم که آیا خطایی رخ داده است یا نه. کد داخل این رویداد بصورت زیر میشه :

if (e.Error == null)
MessageBox.Show("بدون خطا");
else
MessageBox.Show("خطا", "هشدار");

داخل دکمه محاسبه هم کد زیر رو مینویسید:

if (!backgroundWorker1.IsBusy)
backgroundWorker1.RunWorkerAsync();

FastCode
دوشنبه 13 آذر 1391, 13:11 عصر
اگر از اول کامل توضیح میدادید کافی بود

علتش Transparent یا null بودن BackgroundColor ه یکی از DefaultCellStyle هاست.

tara1367
سه شنبه 14 آذر 1391, 10:27 صبح
ممنون دوستان هر دو كار رو انجام دادم ولي مشكلم حل نشد.
سورس رو براتون ميذارم.
http://s3.picofile.com/file/7573562147/FrmHGH.rar.html

tara1367
سه شنبه 14 آذر 1391, 11:22 صبح
خواهشمندم اگه كسي ميدونه راهنمايي كنه چون با اين مشكل نميتونم برنامم رو ادامه بدم اكثر سلول هاش سياه مي شوند و داده هاي دورن اون قابل خوندن نيست.
با تشكر

veniz2008
سه شنبه 14 آذر 1391, 11:37 صبح
:عصبانی:

95989

tara1367
سه شنبه 14 آذر 1391, 11:52 صبح
:عصبانی:

95989

http://s2.picofile.com/file/7573644515/FrmHGH.rar.html
ببخشيد حواسم نبود پاكش كردم الان دوباره گذاشتمش

veniz2008
سه شنبه 14 آذر 1391, 12:27 عصر
با این فایلی که گذاشتید چه کمکی میشه کرد؟
شما میزان رم سیستمتون رو چک کردید؟. آیا موقعی که این مشکل پیش میاد سیستم شما رم کافی داره؟(این فقط یه احتمال هست که باید مدنظرتون باشه)
ظاهرا از dotnetbar استفاده کردید. من رو سیستمم این کامپوننت رو نصب ندارم. یه لینک پیدا کردم که ظاهرا مشکلش شبیه به مشکل شماست. اینو ببنید شاید مشکلتون حل شد:
http://www.codeproject.com/Questions/261678/Datagridview-cell-backcolor-becomes-black-when-edi

tara1367
سه شنبه 14 آذر 1391, 12:50 عصر
حل نشد ولي از شما ممنونم.

tara1367
دوشنبه 20 آذر 1391, 08:51 صبح
دوستان كس ديگه نميدونه مشكل من چيه ؟ واقعا برنامم گير اين مشكله ممنون ميشم كسي كمكم كنه.

tara1367
دوشنبه 20 آذر 1391, 11:20 صبح
دوستان خواهشا كمك كنيد

veniz2008
دوشنبه 20 آذر 1391, 11:38 صبح
شما هنوز این مشکل رو حل نکردید؟. از backgroundworker استفاده کن دوست من. بهرحال این مشکل شما یه مشکل عمومی نیست که بشه راه حل مشخصی براش ارائه داد. مگر اینکه شخصی قبلا با این مشکل مواجه شده باشه که بتونه راه حل دقیقی ارائه بده. شما هنوز این سوال منو جواب ندادید :
شما میزان رم سیستمتون رو چک کردید؟. آیا موقعی که این مشکل پیش میاد سیستم شما رم کافی داره؟(این فقط یه احتمال هست که باید مدنظرتون باشه)

kienshien
دوشنبه 20 آذر 1391, 11:43 صبح
مشكل از DefaultCellStyle هست و بهترم هست كه عملياتت رو در يك backgroundworker انجام دهيد سپس وارد گريد كنيد.
بايد از تو پروپرتيهاي گريدت و Autosizerowmodes و AutosizeColumnMode را رو None بگذاري ، بعد از اينكه محاسبت تمام شد داخل كد استايل رو تنظيم كنيد.
اميدوارم مشكلت حل بشه.

tara1367
سه شنبه 21 آذر 1391, 12:05 عصر
شما هنوز این مشکل رو حل نکردید؟. از backgroundworker استفاده کن دوست من. بهرحال این مشکل شما یه مشکل عمومی نیست که بشه راه حل مشخصی براش ارائه داد. مگر اینکه شخصی قبلا با این مشکل مواجه شده باشه که بتونه راه حل دقیقی ارائه بده. شما هنوز این سوال منو جواب ندادید :
شما میزان رم سیستمتون رو چک کردید؟. آیا موقعی که این مشکل پیش میاد سیستم شما رم کافی داره؟(این فقط یه احتمال هست که باید مدنظرتون باشه)

ممنون با backgroundworkwr كه مشكلم حل نشد ولي چطور ميتوان رم سيستم رو در زمان اجراي اين مشكل چك كرد؟

tara1367
سه شنبه 21 آذر 1391, 12:07 عصر
مشكل از DefaultCellStyle هست و بهترم هست كه عملياتت رو در يك backgroundworker انجام دهيد سپس وارد گريد كنيد.
بايد از تو پروپرتيهاي گريدت و Autosizerowmodes و AutosizeColumnMode را رو None بگذاري ، بعد از اينكه محاسبت تمام شد داخل كد استايل رو تنظيم كنيد.
اميدوارم مشكلت حل بشه.

ممنون دوست عزيز ولي با backgroundworker كار كردم بازم مشكلم حل نشد و هر دو گزينه Autosizerowmodes و AutosizeColumnMode خودشان none بودند.

veniz2008
سه شنبه 21 آذر 1391, 15:56 عصر
ممنون با backgroundworkwr كه مشكلم حل نشد ولي چطور ميتوان رم سيستم رو در زمان اجراي اين مشكل چك كرد؟
راه سادش اینه که از task manager ویندوز، گزینه performance رو بیاری. بعد از این کار برنامه خودتون رو اجرا کنید و اون فرمی که مشکل باهاش دارید رو اجرا کنید. ببینید چقدر از رم سیستم شما مصرف میشه.

tara1367
سه شنبه 28 آذر 1391, 09:21 صبح
راه سادش اینه که از task manager ویندوز، گزینه performance رو بیاری. بعد از این کار برنامه خودتون رو اجرا کنید و اون فرمی که مشکل باهاش دارید رو اجرا کنید. ببینید چقدر از رم سیستم شما مصرف میشه.

رم سيستم رو چك كردم كم بود ديگه واقعا نميدونم مشكل از كجاست چون يه بار ديگه هم از اول gridview رو توي يه فرم جديد طراحي كردم ولي بازم اين مشكل پيش اومد. :ناراحت:

veniz2008
سه شنبه 28 آذر 1391, 10:26 صبح
رم سيستم رو چك كردم كم بود ديگه واقعا نميدونم مشكل از كجاست چون يه بار ديگه هم از اول gridview رو توي يه فرم جديد طراحي كردم ولي بازم اين مشكل پيش اومد. :ناراحت:
برنامه تون رو در یک سیستم دیگه که امکانات سخت افزاری مناسبی داره ، تست کنید. من خودم بعضی مواقع که چندین برنامه نسبتا" سنگین رو همزمان اجرا میکنم ( مثل کار با ویژوال استودیو و sql server و اسکن سیستم با آنتی ویروس و مثلا رندر کردن یک فایل ویدئویی، در چنین حالتی بعضی مواقع این مشکل واسم پیش میاد (البته در حد چند ثانیه) ولی بعدش درست میشه.

tara1367
سه شنبه 28 آذر 1391, 10:35 صبح
گفتم شايد مشكلش از گرافيك سيستمم باشه بنابراين خودم روي يه سيستم ديگه امتحان كردم ولي بازم همين مشكل پيش اومد.

tara1367
چهارشنبه 29 آذر 1391, 12:20 عصر
دوستان گرامي اگر كسي راه حل مشكل من رو ميدونه راهنمايي كنه لطفا