سلام.
اون قطعه کدی که قبلا براتون گذاشته بودم مربوط به حلقه for بود. در foreach بصورت جزیی قدری تغییر میکنه.
اینو توجه داشته باشید در foreach وقتی برای هر سطر گرید (DataGridViewRow) یک نام در نظر میگیریم (مثلا row)، از این به بعد نماینده شما که با سطرهای گرید روبرو میشه همین row هست. این row هر بار (و به ترتیب) به یک سطر گرید مراجعه میکنه. بنابراین وقتی می خواید یه سلول خاص از گرید رو بررسی کنید (مثلا ستون چک باکس)، باید به این row بگید برو ستون چک باکس رو بررسی کن.
در کد زیر من فرض کردم اسم ستون چک باکس شما در گرید، RecordSelected هست و مثلا قصد دارید ID مربوط به ستون هایی رو که تیک خوردن بردارید (نام ستونی که ID ها رو داره فرضا StudentID هست) :
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (Convert.ToBoolean(row.Cells["RecordSelected"].Value) == true)
MessageBox.Show(row.Cells["StudentID"].Value.ToString());
}
موفق باشید.