PDA

View Full Version : مشکل در گرفتن ردیفهای چک خورده در دیتاگرید ویو



m_soheyl_s
پنج شنبه 20 آذر 1393, 18:49 عصر
می خواهم آی دی ردیفهای چک خورده در دیتاگرید ویو را به دست بیاورم و روال به این صورت است که با انتخاب ردیفها و زدن دکمه "ثبت گیرندگان" ردیفها چک می شود. اما مشکلی که وجود دارد با اینکه حلقه ای برای مرور تمام ردیفها قرار دارم فقط ردیف آخری که تیک خورده ثبت می شود.

private void btnRecv_Click(object sender, EventArgs e)
{
string p = "";
foreach (DataGridViewRow row in dgvList.Rows)
{
if (row.Cells["colCheck"].Selected == true)
{
p += row.Cells["colID"].Value.ToString();
}
}
MessageBox.Show(p);
}
126502

hamid_hr
پنج شنبه 20 آذر 1393, 18:59 عصر
if رو به این صورت بنویس
if (row.Cells["colCheck"].Value != null && (bool)row.Cells["colCheck"].Value)

m_soheyl_s
پنج شنبه 20 آذر 1393, 19:19 عصر
if رو به این صورت بنویس
if (row.Cells["colCheck"].Value != null && (bool)row.Cells["colCheck"].Value)

خطای زمان اجرای Specified cast is not valid. میدهد:اشتباه:

plus
پنج شنبه 20 آذر 1393, 20:09 عصر
خطای زمان اجرای Specified cast is not valid. میدهد:اشتباه:
ستونی که از نوع CheckBox گرفتین باید از نوع bool باشه و نباید خطای cast بده...

object value = row.Cells["colCheck"].Value;
if (value != null) {
System.Diagnostics.Debug.WriteLine(value.GetType() );
if (value is bool && (bool)value) {
p += row.Cells["colID"].Value.ToString();
}
}

توی پنجره Output ببینید چه چیزی چاپ شده.قاعدتا باید System.Boolean باشه.

m_soheyl_s
پنج شنبه 20 آذر 1393, 20:47 عصر
ستونی که از نوع CheckBox گرفتین باید از نوع bool باشه و نباید خطای cast بده...

object value = row.Cells["colCheck"].Value;
if (value != null) {
System.Diagnostics.Debug.WriteLine(value.GetType() );
if (value is bool && (bool)value) {
p += row.Cells["colID"].Value.ToString();
}
}

توی پنجره Output ببینید چه چیزی چاپ شده.قاعدتا باید System.Boolean باشه.

در پنجره Autos، ولیوتایپrow.Cells["colCheck"] بولین هست. اما row.Cells["colCheck"].Value آبجکته.

plus
پنج شنبه 20 آذر 1393, 22:58 عصر
فکر میکنم جایی اشتباه میکنید.نوع

rows.Cells["colCheck"]

که قطعا باید DataGridViewCheckBoxCell یا هر نوع DataGridViewCell دیگه ای باشه و نمیتونه Booleanباشد.به هر حال کدی که گذاشتم رو با کل شرط if ی که داشتین جایگزین کنید و ببینید جریان اجرا به داخل if میره یا نه و اگه نه در OUTPUT Window چه چیزی هست.

m_soheyl_s
جمعه 21 آذر 1393, 13:01 عصر
بالاخره فهمیدم مشکل از کجاست.:لبخند:
چند روز حسابی اعصابمو بهم ریخته بود و وقتمو تلف کرد.:عصبانی++:
میگم برای بقیه ی اگه همچین مشکلی خوردن.:چشمک:
توی پنجره Output نوشته بود System.String . پس من اصلا نباید بولین چک کنم. همش مشکل از DataGridViewX دات نت بار بود.
باید در هنگام تعریف ستونها برای مقدار true و false یک مقدار رشته ای تعریف می شد.
126519

string p = "";
foreach (DataGridViewRow row in dgvList.Rows)
{
object value = row.Cells["colCheck"].Value;
if (value == "true")
{
p += row.Cells["colID"].Value.ToString();
}
}
MessageBox.Show(p);


باز هم ممنون از تمامی دوستانی که وقت گذاشتن.:تشویق: