PDA

View Full Version : سوال: یه مشکل عجیب در datagridview



seven7777777
پنج شنبه 22 اسفند 1387, 17:20 عصر
با سلام

من در یک فرم یک 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 دیتاگرید استفاده کنم چون به کارم نمی اید .
================================================

rnm123
پنج شنبه 22 اسفند 1387, 19:26 عصر
دوست عزیز اصلا اینطوری نیست اگه کسی جوابو بدونه حتما میگه . یک برنامه نمونه نوشتم و نکته شما را تست کردم ولی اصلا مشکلی ایجاد نشد. شما یک کاری بکنید دیتا گرید را حذف و از نو یکی دیگر را در فرم قرار دهید و تنظیمان آون را درست انجام دهید نوع ستون را هم که حتما از نوع DataGridViewCheckBoxColumn قرار میدهید با اینکار نباید مشکلی باشد یکبار امتحان نمائید و به ما خبر دهید.

seven7777777
پنج شنبه 22 اسفند 1387, 19:45 عصر
دوست خوبم اولا ممنون که جواب دادی .
بعدشم دیدم ، تنظیمات درست بود . بازم جواب اشتباه میده .

rnm123
پنج شنبه 22 اسفند 1387, 21:27 عصر
دوست عزیز کدی که نوشته ای مشکل نداره . نمی دونم دیتاگریدویو را حذف کردی و یکی دیگه جایگزین اون کردی یا نه ؟یک سئوال دیگر : آیا ستون صفر دیتاگریدویو بصورت چک باکس تنظیم شده است ؟ نکند شماره ستون را اشتباه مینویسی ؟
من حتی کد شما را در برنامه خودم به کار بردم . مشکلی نبود شما حتما یک سری تنظیمات دیتا گرید را تغییر داده اید

Developer Programmer
جمعه 23 اسفند 1387, 00:29 صبح
MSDN میگه:

DataGridView.CellClick Event

This event occurs when any part of a cell is clicked, including borders and padding.
For clicks in a DataGridViewCheckBoxCell (http://barnamenevis.org/forum/9a4e3469-9d4e-f295-dd8d-38aa267d2534.htm), 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 (http://barnamenevis.org/forum/29e0025c-4fcd-273f-523b-6052611cbd1f.htm) 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);

}