DataGridview 2. Sütuna ComboBox yerleştirip Veritabanından veri çekmek...

speed1

Öğrenci
Katılım
5 Ağustos 2008
Mesajlar
2
Reaksiyon puanı
0
Puanları
0
DatagridView1'e veritabanından bilgileri doldurduktan sonra 2. sutuna tıklandığında Combobox çıkmasını istiyorum.

kodlarım aşağıda ama yanlış bir şeyler var galiba
kodlardan sonra datagridview1 e verileri geliyor 2. kolona geldiğimde Combobox ta geliyor içi de doluyor eğer aynı satırın sağındaki yada solunda ki kolona geçtiğimde combodan seçtiğim hücreye yazılıyor ama combodan veriyi seçtikten sonra hemen altındaki hücreye tıklarsam ilk tıkladığım hücrenin içi boşalıyor. ikinci tıkladığım hücrede combobox çıkıyor ama. bir de datagride veriler geldiğinde örneğin 2. kolda Kg yazıyor ve combonun ikinci sırasında ise combo geldiğinde 1. sıradan başlıyor hep. buraya kadar sorunları yazdım şimdi de istediğimi yazıyorum
1. datagrid nesnesi veritabanından bilgileri doldurucak (bunu zaten dolduruyorum burada sorun yok)
2. gridin 2. kolonuna tıkladığında örneğin "Kg" yazıyorsa combo dolduğunda Kg seçili olarak gelmeli.
3. Combodan seçtiğim veri gridin hücresine yazılmalı veri kaybolmamalı..
4. Comboboxtan seçtiğim veriye göre de gridin 3. ve 4. hücrelerinide seçtiğim değeri sql sorugu ile karşılaştırım gerekli bilgileri de değiştirebilmem lazım.

Buna örnek olacak bir uygulama varmıdır acaba
bana bir yol gösterebilir misiniz.acaba
Kod:
Kod:
private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            SetComboBoxCellType objChangeCellType = new SetComboBoxCellType(ChangeCellToComboBox);
            if (e.ColumnIndex == this.dataGridView1.Columns["BIRIM_ADI"].Index)
            {
                this.dataGridView1.BeginInvoke(objChangeCellType, e.RowIndex);
                bIsComboBox = false;
            }
        }
 private void ChangeCellToComboBox(int iRowIndex)
        {
            if (bIsComboBox == false)
            {               
                DataGridViewComboBoxCell dgComboCell = new DataGridViewComboBoxCell();
                dgComboCell.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;
                DataTable dt1 = system.GetDataTable("Select * From BIRIMLER");
                dgComboCell.DataSource = dt1;
                dgComboCell.ValueMember = "BIRIM_NO";
                dgComboCell.DisplayMember = "BIRIM_ADI";
                dataGridView1.Rows[iRowIndex].Cells[dataGridView1.CurrentCell.ColumnIndex] = dgComboCell;
                bIsComboBox = true;
            }
        }

resimde de göründüğü gibi Birim kolonunun 1. satına tıkladım önce combo dolmuştu ama hemen altına tıkladığımda veri kayboldu.
Birim sütununda 1. hücresinde orjinal veri "Adet" 2. satırdaki hücresinde "Kg" olarak geliyor.

Combo ilk dolarken bu verileri kontrol etmiyor hemen En baştaki veri geliyor.

Ekli dosyayı görüntüle 12654
 

Tembel34

Öğrenci
Katılım
8 Ağustos 2015
Mesajlar
8
Reaksiyon puanı
0
Puanları
0
Kodları tam olarak hatırlamıyorum o yüzden bir iki sorum olucak öncelikle yukardaki cell enter fonksiyonundaki if yapısının içine giriyor mu ? eğer giriyor ise veritabanında birim adı olarak ne geliyor ? string olarak adet mi yoksa adetin bulunduğu yerin indexi mi ? beginInvoke yerine başka birşey düşünmen lazım. datagridin içindeki comboboxı selectedIndex =1 şeklinde ayarlayabiliyorsan bu şekilde ayarlaman daha sağlıklı.
 

speed1

Öğrenci
Katılım
5 Ağustos 2008
Mesajlar
2
Reaksiyon puanı
0
Puanları
0
if blogunun içine giriyor eğer oraya gelmezse gridin içine Combo çıkmıyor zaten.
Combonun ValueMemberine birimNo (int) tipinde DisplayMember=Adet (string) tipinde geliyor.
fakat
dgComboCell.Rowindex var seçeneklerinde onuda 2 yada 3 gibi sayı veririsem o zamanda readOnly gibi bir hata veriyor ayarlayamıyorum. Fakat
dgComboCell.Value = Convert.ToInt32(dataGridView1.Rows[iRowIndex].Cells[5].Value);
gibi yazarsam ki burada BirimNo larını içeren bilgi var o zaman gridin içine doğru bir şekilde geliyor.

yapamadığım seçeneği seçtikten sonra 3. 4. kolondaki hücreleri ilgili verilerle değiştiremedim.
yani combonun selecteindexchange olayını bi şekilde yakalıyorum ama
ikincisinde hata alıyorum
oda şunu deneedim
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control is ComboBox && this.dataGridView1.CurrentCell.ColumnIndex == 2)
{
ComboBox cb = e.Control as ComboBox;
cb.SelectedIndexChanged -= new EventHandler(ComboBox_SelectedIndexChanged);
cb.SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged);
}
}


private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
ComboBox cb = (ComboBox)sender;
MessageBox.Show(cb.SelectedIndex.ToString());
}

bu kodlardan sonra ilk tıkladığımda yakalyorum fakat ikinci satırın combosu açıldığında hata alıyorum
 
Üst