Я сделал элемент управления для события CellEndEdit
, чтобы предотвратить null
или пустые значения. Когда пользователь редактирует ячейку и нажимает, например, на следующую ячейку и оставляет ее пустой, он выдает ошибку и устанавливает свойство CurrentCell
для пустой ячейки. После того, как я редактирую пустую ячейку и нажимаю TAB, значение перемещается в следующую ячейку, а текущая ячейка перемещается к следующей ячейке. Я могу объяснить это запутанно, поэтому позвольте мне показать вам это видеозапись . У меня также есть событие CellClick
для начала редактирования, когда я щелкаю ячейку.
Вот код:
private void notTakipPaneli_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if (String.IsNullOrEmpty(notTakipPaneli[e.ColumnIndex, e.RowIndex].FormattedValue.ToString()))
{
MessageBox.Show("Lütfen hücreyi boş bırakmayınız.");
notTakipPaneli.CurrentCell = notTakipPaneli[e.ColumnIndex, e.RowIndex];
notTakipPaneli.BeginEdit(true);
//for (int i = e.ColumnIndex + 1; i < notTakipPaneli.Rows[e.RowIndex].Cells.Count; i++)
// notTakipPaneli[i, e.RowIndex].Selected = false;
return;
}
if (e.ColumnIndex == (notTakipPaneli.Rows[e.RowIndex].Cells.Count) - 2)
{
double ortalama = 0;
byte vize = Convert.ToByte(notTakipPaneli.Rows[e.RowIndex].Cells[1].FormattedValue);
byte final = Convert.ToByte(notTakipPaneli.Rows[e.RowIndex].Cells[(notTakipPaneli.Rows[e.RowIndex].Cells.Count) - 2].FormattedValue);
byte araSinav = Convert.ToByte(notTakipPaneli.Rows[e.RowIndex].Cells["araSinav"].FormattedValue);
if (araSinav == 0)
ortalama = (vize * 0.4) + (final * 0.6);
else
ortalama = (vize * 0.2) + (araSinav * 0.2) + (final * 0.6);
ortalama = Math.Round(ortalama, 2, MidpointRounding.AwayFromZero);
notTakipPaneli.Rows[e.RowIndex].Cells["notOrtalamasi"].Value = ortalama;
}
}
private void veriKaydet_Click(object sender, EventArgs e)
{
for (int i = 0; i < notTakipPaneli.Rows.Count; i++)
{
for (int j = 0; j < notTakipPaneli.Columns.Count; j++)
{
if (String.IsNullOrEmpty(notTakipPaneli[j, i].FormattedValue.ToString()))
{
MessageBox.Show("Lütfen boş alan bırakmayınız",
"Not Takip Paneli",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
notTakipPaneli[j, i].Selected = true;
return;
}
}
}
}
private void yeniSatirEkle_Click(object sender, EventArgs e)
{
notTakipPaneli.Rows.Add();
}
private void notTakipPaneli_CellClick(object sender, DataGridViewCellEventArgs e)
{
notTakipPaneli.BeginEdit(true);
}