C dil ailesine kökenleri olan ve bileşen odaklı programlama desteği içeren nesne odaklı ve tür açısından güvenli bir programlama dili.
DataGridView'deki CheckBox sütununda yaşadığınız sorunun ana nedeni, comboBox1'in SelectedIndex değiştiğinde tetiklenen olayların ve hücre tıklamalarının birbirleriyle çakışması olabilir.
İşte sorunun çözümü için gerekli değişiklikler:
// ... mevcut kod ...
private bool isComboBoxChanging = false;
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (dataGridView1.IsCurrentCellInEditMode)
{
dataGridView1.EndEdit();
}
if (e.ColumnIndex != 0 || e.ColumnIndex == -1 || e.RowIndex == -1 || dataGridView1.RowCount == 0)
{
return;
}
else
{
// Mevcut değeri kontrol et
bool currentValue = Convert.ToBoolean(dataGridView1.Rows[e.RowIndex].Cells[0].EditedFormattedValue);
// İlaç bilgisi kontrolü
if (!currentValue && (dataGridView1.Rows[e.RowIndex].Cells[8].Value == null ||
string.IsNullOrWhiteSpace(dataGridView1.Rows[e.RowIndex].Cells[8].Value.ToString())))
{
MessageBox.Show("İLAÇ BİLGİSİ ALANINI DOLDURMADAN SEÇİM YAPAMAZSINIZ.", "UYARI", MessageBoxButtons.OK, MessageBoxIcon.None);
dataGridView1.Rows[e.RowIndex].Cells[0].Value = false;
return;
}
string selectedAdSoyad = dataGridView1.Rows[e.RowIndex].Cells["ADISOYADI"].Value?.ToString();
string selectedSiraNo = dataGridView1.Rows[e.RowIndex].Cells["HIZMETALANSIRANO"].Value?.ToString();
if (firstSelectedAdSoyad == null && !currentValue)
{
firstSelectedAdSoyad = selectedAdSoyad;
firstSelectedSiraNo = selectedSiraNo;
isComboBoxChanging = true;
int index2 = -1;
for (int i = 0; i < comboBox1.Items.Count; i++)
{
DataRowView row = comboBox1.Items[i] as DataRowView;
if (row != null && row["SIRANO"].ToString() == firstSelectedSiraNo)
{
index2 = i;
break;
}
}
if (index2 != -1)
{
comboBox1.SelectedIndex = index2;
}
isComboBoxChanging = false;
}
else if (selectedSiraNo != firstSelectedSiraNo && !currentValue)
{
MessageBox.Show("SADECE AYNI KİŞİYE AİT İLAÇLARI SEÇEBİLİRSİNİZ.", "UYARI", MessageBoxButtons.OK, MessageBoxIcon.None);
dataGridView1.Rows[e.RowIndex].Cells[0].Value = false;
return;
}
// CheckBox değerini değiştir
dataGridView1.Rows[e.RowIndex].Cells[0].Value = !currentValue;
if (!currentValue) // Yani şimdi true olacak
{
if (!DataGridViewRowIds.Contains(e.RowIndex))
{
// Check edilirse, satır index'ine göre listelere ekle
DataGridViewRowIds.Add(e.RowIndex);
string ilacAdi = dataGridView1.Rows[e.RowIndex].Cells["ILACADI"].Value?.ToString() ?? "";
string kullanimSekli = dataGridView1.Rows[e.RowIndex].Cells["KULLANIMSEKLI"].Value?.ToString() ?? "";
string ilacBilgisi = dataGridView1.Rows[e.RowIndex].Cells["ILACBILGISI"].Value?.ToString() ?? "";
selectedRowsData.Add(new List<string> { e.RowIndex.ToString(), ilacAdi, kullanimSekli, ilacBilgisi });
textBox10.Text = selectedRowsData.Count.ToString();
UpdateListBox(); // ListBox'ı güncelle
}
}
else // Yani şimdi false olacak
{
// Check kaldırıldıysa, satır index'ine göre listeden çıkar
int index = DataGridViewRowIds.IndexOf(e.RowIndex);
if (index != -1)
{
DataGridViewRowIds.RemoveAt(index);
selectedRowsData.RemoveAll(row => row[0] == e.RowIndex.ToString());
textBox10.Text = selectedRowsData.Count.ToString();
UpdateListBox();
}
}
}
if (selectedRowsData.Count == 0)
{
firstSelectedAdSoyad = null;
firstSelectedSiraNo = null;
isComboBoxChanging = true;
comboBox1.SelectedIndex = -1;
isComboBoxChanging = false;
dTable2.Clear();
TEMIZLE();
}
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (isComboBoxChanging)
return;
if (dataGridView1.IsCurrentCellInEditMode)
{
dataGridView1.EndEdit();
}
TCC();
SIRANOLISTELE();
VERILERILISTELE();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
DataGridViewCheckBoxCell chk2 = (DataGridViewCheckBoxCell)row.Cells[0];
chk2.Value = false;
}
DataGridViewRowIds.Clear();
selectedRowsData.Clear();
firstSelectedAdSoyad = null;
firstSelectedSiraNo = null;
}
// ... mevcut kod ...