یه مشکل عجیب در datagridview
با سلام
من در یک فرم یک datagridview بکار بردم . بعد یه button بکار بردم .
دیتاگرید من یه ستون داره که محتواش از نوع checkbox هست . حالا من در onclick کلیدم می خوام چک کنم کدوم ردیف ها چک خورده .
وقتی این کارو می کنم مثلا یک ردیف رو چک می زنم به من مقدار صفر رو نشون می ده اما به محض اینکه مثلا یک ردیف رو چک بزنم بعد روی همون ردیف یا یه ردیف دیگه کلیک کنم و بعد buttona رو فشار بدم درست کار می کنه .
for (int i=0; i < ph2eshdatagrid.RowCount; i++)
{
try
{
MessageBox.Show(ph2eshdatagrid[0, i].Value.ToString());
}
catch (Exception ex)
{
MessageBox.Show("!");
}
در ضمن نگید از خاصیت multiselect دیتاگرید استفاده کنم چون به کارم نمی اید .
================================================
نقل قول: یه مشکل عجیب در datagridview
دوست عزیز اصلا اینطوری نیست اگه کسی جوابو بدونه حتما میگه . یک برنامه نمونه نوشتم و نکته شما را تست کردم ولی اصلا مشکلی ایجاد نشد. شما یک کاری بکنید دیتا گرید را حذف و از نو یکی دیگر را در فرم قرار دهید و تنظیمان آون را درست انجام دهید نوع ستون را هم که حتما از نوع DataGridViewCheckBoxColumn قرار میدهید با اینکار نباید مشکلی باشد یکبار امتحان نمائید و به ما خبر دهید.
نقل قول: یه مشکل عجیب در datagridview
دوست خوبم اولا ممنون که جواب دادی .
بعدشم دیدم ، تنظیمات درست بود . بازم جواب اشتباه میده .
نقل قول: یه مشکل عجیب در datagridview
دوست عزیز کدی که نوشته ای مشکل نداره . نمی دونم دیتاگریدویو را حذف کردی و یکی دیگه جایگزین اون کردی یا نه ؟یک سئوال دیگر : آیا ستون صفر دیتاگریدویو بصورت چک باکس تنظیم شده است ؟ نکند شماره ستون را اشتباه مینویسی ؟
من حتی کد شما را در برنامه خودم به کار بردم . مشکلی نبود شما حتما یک سری تنظیمات دیتا گرید را تغییر داده اید
نقل قول: یه مشکل عجیب در datagridview
MSDN میگه:
DataGridView.CellClick Event
This event occurs when any part of a cell is clicked, including borders and padding.
For clicks in a DataGridViewCheckBoxCell, this event occurs before the check box changes value, so if you do not want to calculate the expected value based on the current value, you will typically handle the DataGridView..::.CellValueChanged event instead. .
If CBool(YourGrid.Rows(n).Cells("Selected").Value) = True
و
if ((bool)this.dataGridView1.Rows[0].Cells[1].Value == false)
من کد رو اینطور پیاده کردم(در این کد خواستم جمع کل ستونهای تیک دار رو پیدا کنم)
private void getDebOutInvBalDataGridView_CellValueChanged(objec t sender, DataGridViewCellEventArgs e)
{
try
{
if ((bool)this.getDebOutInvBalDataGridView[e.ColumnIndex, e.RowIndex].Value == true)
{
totalAmount = totalAmount - float.Parse(getDebOutInvBalDataGridView.Rows[getDebOutInvBalDataGridView.CurrentCell.RowIndex].Cells["dataGridViewTextBoxColumn3"].Value.ToString());
tbTotal.Text = totalAmount.ToString();
}
else if ((bool)this.getDebOutInvBalDataGridView[e.ColumnIndex, e.RowIndex].Value == false)
{
totalAmount = totalAmount + float.Parse(getDebOutInvBalDataGridView.Rows[getDebOutInvBalDataGridView.CurrentCell.RowIndex].Cells["dataGridViewTextBoxColumn3"].Value.ToString());
tbTotal.Text = totalAmount.ToString();
}
}
catch { };
}
private void getDebOutInvBalDataGridView_CurrentCellDirtyStateC hanged(object sender, EventArgs e)
{
getDebOutInvBalDataGridView.CommitEdit(DataGridVie wDataErrorContexts.Commit);
}