PDA

View Full Version : دسترسی به مقدار سلول دیتا گرید



svhasvha
پنج شنبه 02 اسفند 1397, 11:30 صبح
سلام دوستان
من یه جا تو برنامه میخوام بگم موقع وارد کردن عدد تو سلول دیتا گرید اگر کار بر فلان کلید رو زد (مثلا+) مقدار رو ضرب در 1000 کن (در واقع عملکردش شبیه به کلید ستا صفر ماشین حساب
حالا مشکل کجاست
سلول خالیه و کار بر شروع میکنه عدد رو وارد میکنه مثلا123 حالا کلید تعریف شده رو میزنه متد فراخوانی و میخواد مقدار رو ضرب در 1000 کنه ولی خطا میده مقدار سلول نال هست(به خاطر اینکه هنوز ثبت نشده) باید چیکار کرد کدشم میزارم این زیر ببینید


private void DGSanad_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 43)
{
if (DGSanad.CurrentCell.ColumnIndex == DGSanad.Columns["BED"].Index || DGSanad.CurrentCell.ColumnIndex == DGSanad.Columns["BES"].Index)
{
DGSanad.CurrentCell.Value = (Convert.ToInt64(DGSanad.CurrentCell.Value.ToStrin g()) * 1000).ToString();

}
}
}


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

رامین مرادی
پنج شنبه 02 اسفند 1397, 11:43 صبح
سلام دوستان
من یه جا تو برنامه میخوام بگم موقع وارد کردن عدد تو سلول دیتا گرید اگر کار بر فلان کلید رو زد (مثلا+) مقدار رو ضرب در 1000 کن (در واقع عملکردش شبیه به کلید ستا صفر ماشین حساب
حالا مشکل کجاست
سلول خالیه و کار بر شروع میکنه عدد رو وارد میکنه مثلا123 حالا کلید تعریف شده رو میزنه متد فراخوانی و میخواد مقدار رو ضرب در 1000 کنه ولی خطا میده مقدار سلول نال هست(به خاطر اینکه هنوز ثبت نشده) باید چیکار کرد کدشم میزارم این زیر ببینید


private void DGSanad_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 43)
{
if (DGSanad.CurrentCell.ColumnIndex == DGSanad.Columns["BED"].Index || DGSanad.CurrentCell.ColumnIndex == DGSanad.Columns["BES"].Index)
{
DGSanad.CurrentCell.Value = (Convert.ToInt64(DGSanad.CurrentCell.Value.ToStrin g()) * 1000).ToString();

}
}
}


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


مشکل شما مربوط به نوع داده اون سلول هست.
https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.datagridviewcell.valuetype?vi ew=netframework-4.7.2

svhasvha
پنج شنبه 02 اسفند 1397, 12:09 عصر
مشکل شما مربوط به نوع داده اون سلول هست.
https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.datagridviewcell.valuetype?vi ew=netframework-4.7.2

ممنون از وقتی که گذاشتین میشه یه خورده بیشترتوضیح بدین

رامین مرادی
پنج شنبه 02 اسفند 1397, 14:10 عصر
ممنون از وقتی که گذاشتین میشه یه خورده بیشترتوضیح بدین

چون شما موقع ایجاد دیتا گریدتون و ستونهاش datatype همون int, string, ... اونو مشخص نمیکنید این خطا بوجود میاد. انگار شما تو اسکیو ال ستونی از نوع intدارید و به زور میخواید توش رشته بریزید. قبل ریختن مقدار جدید نوع ستونتون رو متناسب با داده هاتون در نظر بگیرید.


یه احتمال دیگه هم میدم بررسی کنید اون مقداری که دارید تبدیل میکنید به ToInt64 مقدارش نال نباشه

این رو هم قبل عملیات ضرب برسی کنید.

if(DGSanad.CurrentCell.Value !=DBNull.Value)