خطاش مشخصه!
یا در گریدتون سطر خاصی انتخاب نشده و یعنی اینکه مقدار dataGridView1.CurrentRow برابر null هست
و یا اینکه مقدار ستون 0 از سطر انتخاب شده ی گرید null هست.
برای اینکه بفهمید کدومش برنامه رو تریس کنید و در این خط چک کنید و ببینید که کدوم یکی مقدارش null هستش.
برای تریس کردن باید در خط مورد نظر یک برک پوینت بذارین.
و بعد برنامه رو با F5 اجرا کنید.
هر وقت که به اون خط برسه متوجه میشین.
و بعد با نگه داشتن موس بر روی متغیر خاص میتونید مقدارش رو مشاهده کنید.
اگه متوجه نشدین چطوری تریس کنید. این کدها رو قبل از اون خط که خطا میده بذارین و برنامه رو اجرا کنید.
بعد ببینید چه پیامی نشون میده.
if(dataGridView1.CurrentRow == null)
{
MessageBox.Show("CurrentRow is null");
return;
}
if(dataGridView1.CurrentRow.Cells[0].Value == null)
{
MessageBox.Show("Cell Value is null");
return;
}
دوستان ممنون از راهنماییتون
مشکل حذف رو حل کردم ولی الان برای ویرایش ارور میگیره:
تا جاییکه من متوجه میشم مشکل اینه :
شما توی جدول کالاهاتون دو یا چند تا کالا با ID یکسان دارین.
خطا هم به این خاطره که عبارت این :
db.kalas.Where(c => c.ID = m)
چند کالا رو برمیگردونه در صورتی که باید حتم یک کالا رو برگردونه.
مگه این ID توی جدول کالا ستون اصلی نیست؟
اول اینکه هیچکس نه تنها در این تاپیک بلکه در تاپیک های دیگر (البته منظورم از هیچکس بچه هایی هست که تو تالار فعالیت دارن) پاسخ الکی نمیدن بلکه تجربیاتشون رو در اختیار دیگران قرار میدهند. دوم اینکه پاسخ هایی که به شما داده شد همه درست بوند. حالا یکی تجربش کمتر و یکی بیشتر به جای تشکر اینگونه جواب دوستان رو میدید؟
@ در مورد سوالتون :
دوستان ممنون از راهنماییتون
مشکل حذف رو حل کردم ولی الان برای ویرایش ارور میگیره:db.kalas.Where(c => c.ID == m)
c => c.ID == m یعنی چی؟
بگرد جایی که c بیشتر مساوی c.id مساوی با m ?
]چه معنی داره؟
داره میگه اوپراتورها نا معتبر استفاده کردید!!
دوستان چطور میتونم کاری بکنم که فیلد ID بطور اتوماتیک شماره دهی بشه؟
یعنی کاربر نتونه دستکاریش کنه. موقعی که داره اون سطر رو درج میکنه خودش مقدار بگیره.
بسم الله الرحمن الرحیم
با سلام
فکر میکنم باید اون 2 تا کلید اصلی دیگه هم تو شرط دخیل کنید؛ چون چند تا کد اصلی دارید طبیعتا ترکیب اون چند تا برای شما رکورد یکتایی ایجاد میکند مگر اینکه بخواهید تمام رکوردهایی که IDشون برابر m هست حذف کنید که بعید میدونم.
یه چیزی شبیه به کد زیر:
int m2 = int.Parse(dataGridView1.CurrentRow.Cells[1].Value.ToString());
var QDel = db.kalas.Where(c => (c.ID == m) && (c.Id_Kala==m2)).First();
موفق باشید.
من فیلد ID رو از دیتابیسم پاک کردم اما بازم توی برنامه ارور این رو میگیره که مقدار ID وجود نداره.
دوست عزیز من نگفتم که الکی پاسخ میدین منظور من این بود که پاسخ شما اصلا ربطی به این بحث نداشت!!ول اینکه هیچکس نه تنها در این تاپیک بلکه در تاپیک های دیگر (البته منظورم از هیچکس بچه هایی هست که تو تالار فعالیت دارن) پاسخ الکی نمیدن بلکه تجربیاتشون رو در اختیار دیگران قرار میدهند. دوم اینکه پاسخ هایی که به شما داده شد همه درست بوند. حالا یکی تجربش کمتر و یکی بیشتر به جای تشکر اینگونه جواب دوستان رو میدید؟
خودتون بگین کامنت کردن اون سطر چه دخلی داره آخه؟؟؟؟!!!!!!!!!!
به این نوع دستورات میگن LINQc => c.ID == m یعنی چی؟
بگرد جایی که c بیشتر مساوی c.id مساوی با m ?
]چه معنی داره؟
داره میگه اوپراتورها نا معتبر استفاده کردید!!
بیشتر دقت کن دوست عزیز...
ببین دوست عزیز همونطور که گفتم اون مشکل به این خاطر بود که خروجی اون دستور چند رکورد بود.
و همونطور که خودتون گفتین چند تا کلید اصلی دارین.
پس شما یا باید این چند کلید اصلی رو ترکیب کنید و یه کلید اصلی بسازین.
و یا اینکه طبق گفته ی یکی از دوستان همه ی کلیدهای اصلی رو هم توی شرط دخیل کنید.
تا خروجی اون دستور حتما یک رکورد بیشتر نباشه.
موفق باشید
الان به یه مشکل دیگه خوردم
من الان 2 تا کلید اصلی دارم
Id_kala و Color ، وقتی دو تا رکورد فیلد Id_kalaشون یکی باشه موقع ویرایش یا حذف همون ارور رو میده.
حالا چطور میتونم اون شرط رو برای دو تا فیلد بزارم که درست بشه؟
var QDel = db.kalas.Where(c => (c.Id_Kala==m2)&&(c.Color==m)).First();
وقتی این کد رو میزنم از پرانتز دوم که c.Color==m باشه این ارور رو میگیره: Operrator == cannot be applied to operands of type string and int
متن خطاش رو بخونید خیلی تابلوئه!!!!
متغیر m شما از نوع int هستش و ستون color از نوع String
پس نمیشه اینطوری باهم مقایسشون کنی.
اینطوری بنویس :
c.Color==m.ToString()
بازم از متن خطا مشخصه که دستور مورد نظر خروجی نداره!!!
به این دستور خودتون دقت کنین :
var QDel = db.kalas.Where(c => (c.Id_Kala==m2)&&(c.Color==m.ToString())).First();
وقتی توی این دستور خطای ذکر شده رو میده یعنی اینکه توی جدول هیچ رکوردی نیست که دو شرط رو همزمان داشته باشه!
یعنی هیچ رکوردی نیست که ستون Id_Kala اون برابر m2 باشه و همچنین ستون Color اون برابر m باشه.
متوجه شدین؟
برای اینکه بفهمین دلیلش چیه بهترین روش همونی هست که قبلا بهتون گفتم : استفاده از تریس کردن برنامه
برنامه رو تریس کنید ببینید مقدارهای که در متغیرهای m2 و m هستن واقعا در یک رکورد به طور همزمان هستن یا نه.
موفق باشید
دستورم برای ویرایش و حذف اینه، اون بالایی اشتباه بود:
int m = int.Parse(dataGridView1.CurrentRow.Cells[0].Value.ToString());
var QEdit = db.kalas.Where(c => (c.Id_kala == m) && (c.Colot==m.ToString()))).First();
پس با وجود 2 تا کلید اصلی چه شرطی باید بزارم برای ویرایش و حذف ؟
ببینید دستورتون درسته ولی مقادیری که دارین برای شرط میذارین اشتباهه!
مثلا الان شما مطمئنید که رکورد مورد نظر شما هم ستون Id_Kala اون و هم ستون Colot مقدارشون یکی هست و برابر مقدار m ؟؟؟؟؟؟
به نظرم شما باید اینطوری بنویسید :
int Id = int.Parse(dataGridView1.CurrentRow.Cells[0].Value.ToString());
string MyColot = dataGridView1.CurrentRow.Cells[1].Value.ToString();
var QEdit = db.kalas.Where(c => (c.Id_kala == m) && (c.Colot==MyColot))).First();
فقط در دستورهای اول و دوم مطمئن بشید که شماره ستون مربوط به ستون مورد نظر باشه.
و البته به جای شماره من توصیه میکنم از نام ستون استفاده کنید، به این صورت :
string MyColot = dataGridView1.CurrentRow.Cells["CellName"].Value.ToString();
سلام به همه
من کل تاپیک رو دیدم. مرتضی جان (morteza271) چی کشیدی تو داداش. کاش منم صبر شما رو داشتم.
دوستان محبت کنن خودشونم کمی تلاش و خلاقیت به خرج بدن تا کسائیکه پاسخ سوالات رو میدن اینقد اذیت نشن.
آقا مجتبای گل شما هم کد نویسیتون کلا غلطه دوست عزیز.
بنظر من بهتره که خیلی باز تر کد بنویسید تا بهتر متوجه شید اشکال کارتون گذاشت. بعدا اگر خاستید کدتون حرفه ای تر شه خلاصش کنید.
مثلا بجای این کدی که گذاشتید :
int m = int.Parse(dataGridView1.CurrentRow.Cells[0].Value.ToString());
var QEdit = db.kalas.Where(c => (c.Id_kala == m) && (c.Colot==m.ToString()))).First();
بنویسید:
var CellValue = dataGridView1.CurrentRow.Cells[0].Value;
var QEdit = db.kalas.Where(c => c.Id_kala == Convert.ToInt(CellValue) && c.Colot== CellValue.ToString())).FirstOrDefault();
میشه بگید کجای کارم کلا اشتباه بوده؟
در ضمن فکر نمیکنم همه کسایی که توی این سایت هستن از توی شکم مادرشون برنامه نویس به دنیا اومدن.
همه ما اینجا جمع شدیم تا از هم چیز یاد بگیریم و برنامه نویسمون رو بهتر کنیم.
منم قبول دارم برنامه نویسیم خوب نیست ، اما اومدم تاپیک زدم سوال میکنم تا یاد بگیرم، وگرنه میتونستم مث خیلی های دیگه از روی پروژه هایی که هست کپی بکنم.
کاش میشد تو شکم مادر برنامه نویس می شدیم.
var CellValue = dataGridView1.CurrentRow.Cells[0].Value;
var QEdit = db.kalas.Where(c => c.Id_kala == Convert.ToInt(CellValue) && c.Colot== CellValue.ToString())).FirstOrDefault();
جناب a_mottaghi_pour کد بالای شما رو هم گذاشتم این ارور رو گرفت: Object reference not set to an instance of an object.
نمیدونم مشکلش چیه؟
به جای First() از FirstOrDefault() هم استفاده کردید باز ارور داد؟
راستش دیگه نمیدونم چی بگم هرچی میگم انگاری متاسفانه منظورمو متوجه نمیشین!!!
شما اگه مواردی که گفتم رو انجام میدادین صد در صد مشکلتون تا الان رفع شده بود!
ولی فکر کنم قبل اینکه توضیحات من و بقیه دوستان رو انجام بدین دوباره میاین سوالتون رو ادامه میدین!اینطوری به نتیجه نمیرسین!!
اگه میخواین کمکتون کنیم و امکانش هست لطف کنید کل کد اون توابع رو بذارین اینجا...
موفق باشید
کل برنامتون رو با پیام خصوصی برام فرستادین و منم فقط فرمتون رو دیدم!ولی اجرا نکردم چون بانکش رو نتونستم اتچ کنم.
حالا من یه سوال دارم :
الان توی گرید شما که به شکل زیر هم هست کدوم ستون دبرگیرنده ی Id هست و کدوم ستون دربرگیرنده ی Color ؟؟؟؟؟
Untitled.jpg
شما همینو به من بگین کد کامل ویرایش رو بهتون میدم.....
آخرین ویرایش به وسیله morteza271 : یک شنبه 29 اردیبهشت 1392 در 17:56 عصر