Soran
Textbox a Aktarma

Genel Tartışma
-
Merhaba,
Şimdi ben
void YeniKaydet()
{
try
{
Fonksiyonlar.TBL_MUHASEBEHESAPPLANI HesapKodu = new Fonksiyonlar.TBL_MUHASEBEHESAPPLANI();
HesapKodu.HESAPKODU = txtHesapKodu.Text;
HesapKodu.HESAPADI = txtHesapAdi.Text;
HesapKodu.HESAPSAVEUSER = MuhasebeOtomasyon.AnaForm.UserId;
HesapKodu.HESAPSAVEDATE = DateTime.Now;
DB.TBL_MUHASEBEHESAPPLANIs.InsertOnSubmit(HesapKodu);
DB.SubmitChanges();
Mesajlar.YeniKayit("Yeni Hesap Kodu Oluşturuldu.");
Listele();
Temizle();
}
catch (Exception e)
{
Mesajlar.Hata(e);
}
}Metodu ile
GridControl üzerine bu şekilde kayıt işlemini yapıyorum. Listeleme işlemini de
void Listele()
{
Liste.DataSource = DB.TBL_MUHASEBEHESAPPLANIs.OrderBy(p => p.HESAPKODU).Select(t => new { HESAP = (t.HESAPKODU.Length > 4 ? "\t\t\t" + t.HESAPKODU : t.HESAPKODU) + " - " + t.HESAPADI });
}bu metod yardımı ile yapıyorum. Asıl yapmak istediğim olay şudur. GridControl üzerindeki listedeki kayıtların üzerine tıklama esnasından sonra Ana Hesap Kodu ve Ana Hesap Adı textbox larına nasıl aktarabilirim bunu öğrenmek istiyorum. Bu konu hakkında bana nasıl yardımcı olabilirisiniz acaba.
- Değiştirilmiş Tür Kyamuran SalibryamMicrosoft contingent staff, Moderator 10 Mayıs 2017 Çarşamba 09:57
Tüm Yanıtlar
-
txtHesapKodu.Text=gridView1.GetFocusedRowCellValue("HESAPKODU").ToString().Trim(); txtHesapAdi.Text=gridView1.GetFocusedRowCellValue("HESAPADI").ToString();
Bunu GridView in Double Click olayına yazarsın.
kdrgny@outlook.com
- Düzenleyen KdrGny 3 Mayıs 2017 Çarşamba 21:44
-
Bu şekilde aktarma işlemini denemiştim. Ancak bunda şu hatayı vermektedir. "Nesne başvurusu bir nesnenin örneğine ayarlanmadı." diye bir hata vermektedir. Bu hatayı listeleme metodunda olan bir durumdan dolayı vermektedir. Şundan dolayı olduğunu düşünüyorum. Şimdi tablo içerisindeki 2 adet kolonu gridcontrol üzerine birleştirerek listelenmesini sağlanmaktadır. HESAP KODU altında Hesap Kodu kolonu ve hesap adı kolonunu birleştirerek listelenmesi sağlanmaktadır. Bu birleştirmeyi ilk olarak ayırarak sonrasında textbozlara aktarılması gerekiyor diye düşünüyorum. Veya da başka bir çözümü vardır belkide. Ancak bu düzgün bir şekilde çalışmamaktadır.
-
BindingSource kullan. Mantık olarak şöyle
1- Sınıf seviyesinde BindingSource türünden bir nesne oluştur.
BindingSource bnd = new BindingSource();
2- Listele metodunda bindingsource nesnesine datasource ataması yap
bnd.DataSource = DB.TBL_MUHASEBEHESAPPLANIs.OrderBy(.....);
3- Listele metodunda GridControl e datasource olarak bindingsource nesnesini verListe.DataSource = bnd;
4- Formun constructor metodunda textboxlara veriyi bağla.textBox1.DataBindings.Add("Text", bnd, "HESAPKODU"); textBox2.DataBindings.Add("Text", bnd, "HESAPADI");
bundan sonra gridcontrol den veri seçtikçe textboxlar değişecektir. -
-
-
-
Yukarıdaki ekranda görüldüğü gibi Hesap Kodu textbox sına hesap kodunu, hesap adı textbox sına hesap adını yazıyoruz. Daha sonra kaydet butonuna basıyoruz. Kaydetmek içinde aşağıdaki gibi kaydetme metodu tanımlıyorum.
void YeniKaydet()
{
try
{
Fonksiyonlar.TBL_MUHASEBEHESAPPLANI HesapKodu = new Fonksiyonlar.TBL_MUHASEBEHESAPPLANI();
HesapKodu.HESAPKODU = txtHesapKodu.Text;
HesapKodu.HESAPADI = txtHesapAdi.Text;
HesapKodu.HESAPSAVEUSER = MuhasebeOtomasyon.AnaForm.UserId;
HesapKodu.HESAPSAVEDATE = DateTime.Now;
DB.TBL_MUHASEBEHESAPPLANIs.InsertOnSubmit(HesapKodu);
DB.SubmitChanges();
Mesajlar.YeniKayit("Yeni Hesap Kodu Oluşturuldu.");
Listele();
Temizle();
}
catch (Exception e)
{
Mesajlar.Hata(e);
}
}Kaydet butonu altına da bu metodu çağırıyorum. Ancak bir şart ile bu metodu çağırıyorum. Sebebi de aynı hesap kodundan iki adet kaydetmesini engelliyorum.
private void btnKaydet_Click(object sender, EventArgs e)
{
if (DB.TBL_MUHASEBEHESAPPLANIs.Any(a=>a.HESAPKODU.Equals(txtHesapKodu.Text)))
{
MessageBox.Show("Aynı Hesap Kodu Mevcuttur. Lütfen farklı bir Hesap Kodu Giriniz.", "Hesap Kodu Hatası", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
YeniKaydet();
}
}Hesap kodunu 100 hesap adını da KASA yazıp kaydet butonuna tıklıyorum. Bu sayede 100 Hesap kodlu KASA adında bir tane ana hesap kodu oluşturuyorum. İkinci bir kayıtta 100 00 Hesap Kodu ve Merkez Kasa adında bir hesap adı altında bir kayıt daha açıyorum. Bu da 100 kodlu KASA adlı ana hesap kodunun bir alt kodu olmuş oluyor. Gridcontrolde de bunu görmekteyiz. Buraya kadar çalışmasında bir sıkıntı yoktur. Bu sıkıntı şurada başlamaktadır. Mesela 100 00 Kodlu Merkez Kasa adlı hesap kodunun düzelme işleminde gridcontrol üzerinde tıkladığımdan bu değerlerin textboxlara aktarımı sıkıntıya girmektedir.
Grincontrol ün Run Designer ına tıklayarak açılan ekrandan Columns sekmesi altında kolonları oluşturuyoruz. Bu oluşturma işleminde HESAPKODU adında bir kolon oluşturuyoruz. Bunun Name değerini HESAPKODU Caption değerini HESAP KODU ve FieldName değerini de HESAP olarak yazarak oluşturuyorum. Normalde FieldName değerininde HESAPKODU şeklinde yazarak oluşturmam lazım. Ancak Gridcontrol ün listelenme aşamasında aşağıdaki gibi yapıyorum. Bundan dolayı FieldName HESAP olarak yazıyorum.
void Listele()
{
BindingSource bnd = new BindingSource();
bnd.DataSource = DB.TBL_MUHASEBEHESAPPLANIs.OrderBy(p => p.HESAPKODU).Select(t => new { HESAP = (t.HESAPKODU.Length > 4 ? "\t\t\t" + t.HESAPKODU : t.HESAPKODU) + " - " + t.HESAPADI });
Liste.DataSource = bnd;
}Yani listeleme aşamasında Hesap kodunu ve Hesap adını listeleme işlemini 100 - KASA ve 100 00 - Merkez Kasa şeklinde listelemeKtedir. Yani datebase deki iki kolonu birleştirerek listelemektedir. Bunun yeniden textbox lara ayırarak Hesap Kodunu Hesap Kodu textbox sına ve Hesap Adını da Hesap Adı textbox sına aktarılmasını sağlanması amaçlanmaktadır. Bu sayede de ya düzelme metodunu ya da silme metodunu çalıştırmak istemekteyim.
Umarım durumu tam anlamı ile anlatabilmişimdir. Şimdiden çok teşekkür ederim.
-
-
-
-
Merhaba,
Öncelikle DataGridView'ınızın size uygun olan bir event'ı ile bu işlemi yapmalısınız. (Ben örneğimde Cell Click'i kullandım. Herhangi bir sütunun üzerine tıklandığında çalışır.)
Bu arada, DataSource'unuzda tüm bilgileri tek bir değişkene set etmişsiniz. Bunu ayırmalısınız, şu şekilde;
Liste.DataSource = DB.TBL_MUHASEBEHESAPPLANIs.OrderBy(p => p.HESAPKODU).Select(t => new { HESAPKODU = (t.HESAPKODU.Length > 4 ? "\t\t\t" + t.HESAPKODU : t.HESAPKODU) , HESAPADI = t.HESAPADI });
DataSource'unuzu yukarıdaki gibi güncelleyiniz.
CellClick event'ında seçilen index'in bilgisini alırsak,datagridview'de ki o index'in istediğiniz sütununun value'sunu alabiliriz. Örneğin;
Çalışmalarınızda kolaylıklar dilerim.dataGridView1.CellClick += dataGridView1_CellClick; //DataGridView'ımızın CellClick event'ını tanımlıyoruz. void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)//DataGridView'ımızın CellClick event'i { DataGridView dv = (DataGridView)sender;//istek gelen datagridview nesnesi string hesapKodu = dv.Rows[e.RowIndex].Cells["HESAPKODU"].Value.ToString(); string hesapAdi = dv.Rows[e.RowIndex].Cells["HESAPADI"].Value.ToString();
}
Code is Poetry
-
Şimdi ilk olarak Umut bey çok teşekkür ederim.
Liste.DataSource = DB.TBL_MUHASEBEHESAPPLANIs.OrderBy(p => p.HESAPKODU).Select(t => new { HESAPKODU = (t.HESAPKODU.Length > 4 ? "\t\t\t" + t.HESAPKODU : t.HESAPKODU) , HESAPADI = t.HESAPADI });
Yukarıda ki kodları Listele metodu altına yazmamı söylediniz sanırım. Bu şekilde yaptığımda tablo içeriğindeki kayıtların GridControl altında görüntülenmesinde sanırım bir sıkıntı var.
Bunun yanında component olarak dataGridView kullanmadım da GridControl componentini kullandım. Bunun da CellClick eventi sanırım yok. GridControl altında bu işlemleri nasıl
yapabilirim ki. Kusurabakmayın uğraştırdığım için sizi.
-
-
Merhaba,
Siz anonymous type ile "HESAP = hesapkodu + " - " +hesapadı" şeklinde iki string değeri birleştirerek kullanmıştınız, ben iki farklı değer oluşturdum, yani veri gösterimi ile ilgili bir problem olmaması gerek.
Diğer konu ile ilgili olarak,ben o kodları DataGridView için yazmıştım. DevExpress DataGrid'de daha farklı.
Burada DevExpress'in dökümanları var. İnceleyebilir misiniz?
Code is Poetry
-
Yani böyle bir tablo oluşturmak zor bir durummudur. Ben böyle bir hesap planı oluşturacağım. Daha sonrada bu hesap kodlarını program içerisindeki diğer alanlar ile entegre edeceğim. Bu entegrasyonla da raporlamalar yapılmasını mizan alma gibi işlemlerin yapılmasını sağlamaktır amacım. Aslında profosyenel olmadığım için yani yapmak istediğim yapı ile bilgim tam anlamı ile örtüşmüyor sanırım. İşin türkçesi ben bu işte profosyen değilim. Ama bir yola çıktım bunu başarmak için uğraş veriyorum. Verdiğim rahatsızlık içinde ayrıca çok özür dilerim.
-
Bence buradaki problem, DevExpress kullanıyor olmanız. DevExpress'in kontrollerinin kullanımı oldukça karışık. Bunun için, ciddi anlamda çalışmalısınız. Ki size en çok yardımcı olacak kaynak, DevExpress'in dökümanları olacak. Zira bu konuda -özellikle Türkçe- makale ve kaynak bulmak oldukça güç.
Şu an profesyonel olmasanız da, bu azimle devam ederseniz ileride neden olmasın?
Benim size önerim, hem DataGridView için yazdığım kodları DevExpress'teki kontrolünüze uyarlamanız hemde dökümanlarını okuyarak çözüm üretmeye çalışmanız yönünde olur.
Çalışmalarınızda başarılar ve kolaylıklar dilerim.
Code is Poetry
-
-
-
-
-
Devexpress'i kullanmadım. Ama normal gridView'da.
RowEnter eventına
textbox1.text=dataGridView1.Rows[e.RowIndex].Cells[0].ToString()
textbox2.text=dataGridView1.Rows[e.RowIndex].Cells[1].ToString()
gibi eşitlikler yazarak alabilirsiniz.
dergikapaklari.com -
Aslında Halil Bey çok farklı kombinasyonları denedim. Ancak asıl sorun şurada. Şimdi HESAPADI farklı bir kolon, HESAPKODU farklı bir kolon veritabanının tablosu içerisinde.
Bu tablo içerisindeki HESAPKODU ve HESAPADI kolonları içerisindeki verilerin aşağıdaki Devexpress in GridControl componenti altında
bu şekilde görüntülenmesini sağlamak istiyorum. Bunu bi nebze yapabildim. Ancak orada da bazı eksiklerim var. Yani bir tane ana grup oluşturuyorum. Bu ana grubun altında bir alt grup oluşturuyorum. İstenirse bu alt grubunda altında birden fazla alt gruplar oluşturabilmemiz lazım. Resimdeki şekilde görüldüğü gibi diktörtken içerisine aldığım bir alan vardır. Bu yapıya getirebilmeliyiz.
Bundan sonrada bu oluşturulmuş hesap kodlarının isimlerinde değişiklik veya bir yerde eşleştirme yapılmamış ise program içerisinde silme şansımız olsun istiyorum. Değerlerin üzerinde değişiklik yapılabilmesi içinde GridControl üzerindeki değerlerin üzerine tıklandığında txtHesapKodu ve txtHesapAdi adında bulunan textboxlara bu değerlerin aktarılabilmesi ve üzerinde değişiklik yapılarak yeniden kayıt edilmesi arzulanmaktadır. Umarım durumu kapsamlı olarak anlatabilme fırsatım olmuştur.
Şimdiden çok teşekkür ederim. Kolay gelsin.
-
dediğim gibi hiç devexpress kullanmadım. O yüzden bu tür subgrid/subitem/tree artık nasıl bir yapı kullanıyor ise bunu nasıl yaptığını bilmiyorum. Buna bakmak lazım.
farklı kolonlarda, farklı tablolarda, farklı db'de olması bir şey ifade etmiyor. Aynı satırda gösterebiliyorsanız dediğim yöntem ile gösteremiyorsanız bir method yazıp alabilirsiniz. verdiğiniz örenkte
Örneğin
10100 - portfoydeki çekler satırında başka bir kolon daha yazılabiliyor mu? örneğin bunun parent kolonu. Yazılabiliyorsa onu da yazdırın ama visible özelliğini false deyin. sonra dediğim rowenter eventı ile iki kolonu da alabilirsiniz cell[kolonindex] ile.
yazdırılamıyor ise bu tür bir yapıda parent-child türü bir ilşki olmalı child'den parente erişip gene değeri alabilirsiniz.
o da olmuyor ise alt satırlar uniq ise bir method ile db'de bu kaydı bulup diğer kolonu çekebilirsiniz tek bir satır ile.
Kısacası bu görüntünün nasıl oluştuğu önemli. grid'in kaynağı önemli. veriyi çekmek buna göre şekillenir ve birden fazla yöntem ile yapılabilir.
bir diğer konu ise bu tür bir ana bir alt kırılım listesi için neden gridview kullanıyorsunuz? Neden TreeView değil?
dergikapaklari.com -
Aslında bu konuda tam bir profosyonelliğim yok. TreeView yapısını da inceledim biraz. Ancak onda bu şekilde dallandırma mantığı varmıdır onu bilemedim. Bilmiyorum sanırım yapamayacağım bu yapıyı. Aslında bunu tam olarak bilen bir arkadaş muhakkak vardır. Sanırım ben yapıyı tam olarak anlatamıyorum arkadaşlara. Yaklaşık bir aydır bu yapıyı çözmeye çalışıyorum.
-
Aslında bu konuda tam bir profosyonelliğim yok. TreeView yapısını da inceledim biraz. Ancak onda bu şekilde dallandırma mantığı varmıdır onu bilemedim. Bilmiyorum sanırım yapamayacağım bu yapıyı. Aslında bunu tam olarak bilen bir arkadaş muhakkak vardır. Sanırım ben yapıyı tam olarak anlatamıyorum arkadaşlara. Yaklaşık bir aydır bu yapıyı çözmeye çalışıyorum.
Bu şekilde dallandırma mantığı:))
TreeView'ın kelime anlamı ağaç görünümü demektir zaten yani dallardan oluşur.
Yalnız tek sorun var. Sizin kodlama mantığınız. Yani siz 101, 10101, 1010104 gibi bir kırılım yapıyorsunuz bu biraz kod tarafında çalışma gerektirir. kod uzunluğu işin içine girebilir veya sabit uzunluk yapıp ana kodları 0 ile tamamlayabilirsiniz. 1010000 gibi.
Ya da bunun yerine ParentID gibi bir alan daha eklersiniz. 0 ise köktür değilse yazan kodun alt kırılımıdır. Bu şekilde tree'deki node yapısını da kolay kurabilirsiniz.
dergikapaklari.com -
İşte dedim ya ben profosyenel değilim. Ama yapmak istediğim sistemde bu konuda uzman olmam gerektiğini göstermektedir. Bendeki de inat işte, bu yapıyı uygulayabilmek adına. Aslında pc üzerinde uygulamayı gösterebilmem imkanım olsaydı eksikleri daha net görebilirim.
-