Live Chat Software
Emre CIRIK | C# , VB.NET , Delphi 7 , ASP.NET, SQL Server , T-SQL, IOS , X Code, Visual Studio.NET , Windows Mobile, Windows CE, Windows Phone 7-8 ,C++, C

Cebit bitmiş abi...

by EMRCRK 13. September 2014 23:42

Herkese merhaba . Cebit bilindiği üzere ülkemizin en popüler bilişim fuarıydı. Geçmiş zaman konuşuyorum çünkü Tüyap'tan alıp CNR'a geçtikleri zamandan sonra her yıl Cebit'in değeri düşmektedir. Bunun sebebi sadece CNR'a geçmek değil sebep fuara katılan kişiler doğru kişiler değil .

Kim bu yanlış kişiler ? 

- Tabii ki saçma sapan belediyeler, devletin diğer organları.

Bunların ne işi var ? Gelmeyin kardeşim. Bilişim fuarına ulaştırma bakanlığı niye geliyor ? Abi bir uygulama yaptıysan yürü git TV de reklam yap haber yap!. Belediyelerde aynı şekilde. Elle tutulur gözle görülür sağlam birşeyler ortaya koysalar anlayacağım sanki adam kalkıp mikro işlemci üretmiş . 

- Müşteri kitlesi 

Bu fuarların amacı ihtiyaç sahibi iş bilen firma IT personellerini , sektörden birşeyler kapmayı bekleyen öğrenci kitlesini hedeflemelidir. Artık millet kalem ,defter,ajanda falan toplamaya gelmiş. Japonlar barkod yazıcısı tanıtıyor   "aaa barkod !!" diye şaşıran tipler olmamalı.

Cebit ülkemizde önemini malesef her yıl daha ciddi bir şekilde kayıp ediyor . CNR'ın en kötü köşesine atılmış bir fuar olmuş ki bunun olması gerektiği alanda Emlak fuarı vardı. Gördük ki millet iyice gayrimenkulcü olmuş. 

Fuarı hintli freelancer yazılımcılar basmış bize iş paslayın diyorlar, piyasa araştırması yapıyorlar. :D Ulan insafsızlar ekmeğimize taş koymayın . Adam kalkmış yerli ERP lerimize entegre mobil uygulama geliştirmeyi bile kabul ediyor. Ulan adamı ağlatırlar :) 

Bu işin toparlanması için ;

-Turkcell , Avea, Vodafone , Aselsan (Teknolojik bir gelişme varsa) gibi sektörü heyecanlandıra bilecek. Ciddi teknolojiler geliştiren firmaların olması gerekiyor. Ülkemizde malesef gerçek anlamda teknoloji üretemiyoruz. En azından her ne kadar çok sevmesemde Turkcell ve Avea'nın birşeyler yaptıklarını biliyorum. Bu adamlar fuara heyecan katıyor kesinlikle.

-Sektörün alanında uzman kişilerin eğitici konuşmalar yapması sağlanmalı. Örnek : Huzeyfe Önal,Ferruh Mavituna ( Yakalaya bilirsen =) ) ,Daron Yöndem , Umut Erkal, Fatih Boy , Tamer Öz gibi uzman kişiler güzel seminerler veriyor. Çağırın abi anlatsınlar bu işler nasıl olur öğretsinler millete. Zaten bilgiye aç bir milletiz :P .  

-Promosyon ! Bu fuar eski karizmasını kazanacaksa promosyon koyun abi. Bol bol işe yarar şeyler olsun. Yada capture flag, bilgi yarışması vs herhangi bir yarışma yap ödül olsun ucunda . Ama arkadaş torpili vs olmamalı ! Ülkemizde %99 bu işler böyle dönüyor malesef.

 

-Çok etkisi yoktur belki ama bence çok etkili Cebit = Tüyap olmalı. Onun karizması bir başka :)

Neyse maddeler artar say say bitmez , artık sizler bu sektörü görüp analiz edersiniz sonra ne yapılması gerektiğini düşünür halledersiniz ama üzücü çok üzücü Cebit bitiyor arkadaş. Lise yıllarımda ki o Cebit heyecanı kalmadı içimde. Umarım düzelir..

Uzun zamandır kod paylaşamıyorum  malum işler yoğun . Mail atanlara dönüyorum el verdikçe zaman. 

Herkese başarılar , kısa süre sonra Swift ile görüşmek dileğiyle . 

Not : O kısa süre belki 1-2 ay bulur :D

 

 

Tags: , ,

Ülkemde Yazılımcı Olmak !

by EMRCRK 25. April 2014 22:04

Merhaba arkadaşlar :) ölmedim hâla hayattayım demek için geldim . Tabii 1 yıl gibi bir ara vermişim blog yazmaya oda vakitsizlikten. İnanırmısınız panel şifremi hatırlamak için 4 kere tahminde bulundum sonunda giriş yapabildim. Sanırım ilk defa çok teknik bir makale yazmayacağım çokta uzun olabilir sonuçta 1 yıllık suskunluğumu bozuyorum J

Öncelikle Devexpress araçları konusunda 6 yıllık bir deneyim sahibiyim tabii ki WinForm ağırlıklı bu konuda genellikle raporlama ile alakalı mailler çok alıyorum ve güzel yorumlar alıyorum. Okurlara çok teşekkür ederim umarım faydalı oluyordur. Tabii arada maillere dönemediklerimde oluyor kusura bakmasınlar o arkadaşlarım :) İadere edin artık işler çok yoğun.

Gelelim asıl mevzumuza arkadaşlar son zamanlarda çok gereksiz saçma sapan olaylar oldu ülkemizde yok sosyal medya yasakları falan. Yazılımcı olarak ve interneti hayat damarı gibi kullanan biri olarak şunu söylemem gerek ki bu dünyanın en saçma olayı . Çünkü internet özgür bir dünyadır ve emin olmalısınız ki internetin adaleti gerçek dünyada ki adaletten daha adildir ! Hiçbir şekilde cezasız kalmaz. O yüzden saçma sapan yasaklarla uğraşmak yerine , inşaata yatırım yapmak yerine bence bu ülkede eğitime yatırım yapılmalı !

Neden ? Görüyoruz ki yazılımcılar bu ülkede hint kumaşı gibi olmaya başladı aynı zamanda dünyada. Yazılımcı çok olabilir ama sonuç odaklı ve iş bitirici tecrubeye doymayan çılgın iş kolik kardeşlerime ciddi bir şekilde ihtiyaç var.

İşin açıkçası doktorluk kadar önemli en az ! Giderek saçma sapan bir hâl alan eğitim sistemimizin ezberci zihniyete daha çok yakınlaştığını söylemeden de edemeyeceğim. Fakat bunun gibi olumsuzlukların yanında ve artan talepler doğrultusunda ülkemde harika etkinlikler oluyor yazılım adına ! J Tabii bu beni çok sevindiriyor OpenSource geliştirici arkadaşlar ve bazı yazılım firmaları bu konuda gerçekten güzel etkinlikler yapıyor. Onu geçtim CoderJodo gibi yazılım eğitimini daha küçük yaşlara indirgeyerek zehir gibi yazılımcıların yetişmesini sağlayacak topluluklar ortaya çıktı.

Yazılımcı açığını kapatmak adına üstad yazılımcılara önerim gerçekten bu şekilde ki organizasyonlara destek olmalıyız. =) Bunun ülke açısından bir çok faydası var , örnek olarak IK Firmaları şuan hunharca yazılımcı aramaktadır ! Tabii bu bir reklam değil şahsen gerçek bu konuda yazılımcının dilinden en iyi anlayan IK ekibi (e-nerjik) . Kendileri proje desteği ve adında ki gibi ciddi anlamda enerji kaynağı bir ekipten oluşmaktadır. Eğer yazılımcı arayan firmalar varsa bir görüşsünler derim. Diğer yandan ülkede yazılımcıya ihtiyaç duyan diğer sektörlerde bir ürün ortaya koymak adına ciddi bir yazılımcı açığımız var. Ülke olarak bu konuya desteğimiz açıkçası eksik. Start-Up firmalarının çok iyi desteklendiğini düşünmüyorum . Kosgeb var ama yazılımdan teknikten anlamayan insanlar yaptığınız işi sorguladığında sonuç elde edemiyorsunuz malsef. Server’ın ne olduğunu bilmeyip telefon zanneden adamlar bile var J . Neyse ülkemizin gelişimi açısından yazılımcı ihtiyaçları vardır. Bu tartışılmaz.

Fakat değinmek istediğim konulara gireyim en iyisi . Ülkemde yazılımcı olmak gerçekten zor ! Bildiğin hardcore bir iş oluyor. Çünkü yazılımcı yada bilgisayar mühendisi dediğinizde insanların kafasında her işi yapar gibi bir algı oluşuyor. Özellike ERP projeleri üzerinde ağırlıklı çalışıyorsanız emin olun fantezinin nirvanasına ulaşıyorsunuz J

Mobil raporlamalar, excel den kaynakların yetmediği çılgınca raporlar, sınırsız hayal gücü , el terminalinden dinamik üretim reçetesi oluşturarak üretim yapmak falan J Daha sayarım da  meslek adaylarını korkutmayayım . Ama korkacak bir şey yok . Sonuçta bu işi bilenler değil , aşık olanlar yapabilir ! Kod yazmak bir sanattır. Yazın bu dediklerimi :D Neden sanat , neresi sanat ? Sorularını duyar gibiyim J Bunun cevabı şu , kodlama standartlarının dışında her yazılımcı sorunlara farklı bir bakış açısı ile çözüm üretebilir. For döngüsünü  iç içe çalışan metodlada yapabilirsiniz yada var olanı kullanabilirsiniz mesela burada ki teknik ve kodlama biçimi farklı imzalar gibidir. Herkes sonuca odaklanır fakat herkesin yazdığı kod, okunabilirlik gerçekten benim için sanattır. Tıpkı resim çizmek, müzik bestelemek gibi bir şey.

Ülkemde yazılımcı olmanın zorluklarına gelelim;

 ”ne istendiği tam olarak analiz edilmemiş , sonrasında sizi şoke eden projeler” olabilir. Nasıl? Satıcı arkadaşlar (yazılımdan anlamayan tipler) gidip müşteriye bir yazılım satar sanırsın ki adam tüm elemanları çıkaracak sadece yazılım tüm şirketin işlerini yönetecek :D Tabii size aktarılan bu değildir , 2 günde yaparsın yahu . Tabii bizde gazla çalışan bir toplumuz hayır demek yapamam demek olmaz ( Tamamen Duygusaldır ! J )

“Sizi farklı konularda kullana bilirler “ , örnek olarak yahu benim bilgisayar yavaşladı , ses çıkmıyor, bu yazıcı neden çalışmıyor , ekran bir dalgalı falan J 2 dk da format atarsın sana bir çay ısmarlarım dediklerin de tav olurum ben :D Çay’a dayanamam . Mesela böyle talepler gelir hatırı sayılır kişilere artık projenin uzunluğuna bağlı firmanın elemanı gibi olduysanız sıkıntı olmaz :D

“En son sen oturdun bilgisayara daha önceden yoktu böyle bir sorun!” bir de böyle bir cümle ile çok karşılaşırsınız arkadaşlar J Atıyorum bir yere proje yazdınız kurdunuz. Sonra virüs falan girdi bir şey oldu. Top sizde ben söyliyim bence  iş yapmadan önce makineyi taratın sonra oturun kurulum falan yapın. Yada teknik ekibiniz varsa siz kurmayın onlara öğretin onlar çözsün işi J

“Doküman” özel proje yazıyorsanız bunun bir dökümanını muhakkak isteyen olur . Yaparsanız yararınıza , yapmazsanız F1 e basarlar telefonunuz çalar ! Aman diyim !

“Siz yazılımcısınız hepiniz aynısınız!” evet bir de maalesef böyle bir cümle var. Şöyle ki her sektörde olduğu gibi bizim sektörde de güvenilir olmayan kötü meslektaşlarımız var. Bir çok firmanın canı bu yönde yandıysa sizi ön yargı ile karşılayabilir. Daha sonradan sevince bırakamazlar J

“Siz nasıl insansınız?” evet bir de böyle bir şey var J Yanlış anlaşılma  diyelim biz buna. Genellikle yazılımcıları çok monoton hayatı olan, bilgisayar sapığı sanan , sabahtan akşama kadar o aletin ekranına bakan, pislik , ne bulsa yiyen , koca popolu şişmanlar olarak düşünen çevrede olacaktır. Yanlış eğer işinizi iyi yapıyorsanız , iş vaktinizde geyik yapmadan düzenli çalışıyorsanız 03:00 da ortaköye çay içmeye gidecek vaktiniz bile oluyor J

“Hiç romantik değilsin ! Odun !”  katılıp katılmamak arasında değişiyor fikrim. :/ Yazılımcı olarak şunu söylemeliyim eğer bizim kadar romantik insanlar bulursanız ben bu işi bırakırım ! Çünkü sevdiklerimize her daim hayal edemeyeceği alternatif çözümler sunabiliriz. Yada birine  evlenme teklifi ederken, sevdiğini söylerken zor söyleyip yada söyleyemeyip kriptolanmış şeyleri çözmelerini bekleriz. Tabii bundan anlamayanlar daha bir romantik oluyor dimi ? :D Neyse ..

“Para  ? Maaş? ” arkadaşım şunu söylemeliyim bu ülkede iyi yazılımcılar hakettiğini alır ! Tabii dünya standartlarına göre değil , bu ülkeye göre !!! Maalesef Türkiyem de yazılımın değerini anlayan firma/kişi sayısı çok az L  Sizi sıradan bir bilgisayarcı gibi görebilirler. (Bizim çocuk da format atıyor)

Özete gelelim ülkemde yazılımcıya ihtiyaç var arkadaşlar. Hem de bu eğitimin temel düzeyinden başlamalı.Örnek olarak yazılımı çocuklara oyuncaklar ile başlata bilirsiniz. OLLO Robotik setleri , Lego ‘nun programlama setleri vs. bunların eğitimde faydası emin olun ki çok olacaktır.

İkincisi ezberci bir teori dersleri dışında , yazılım eğitimini sahada vermelisiniz. Örnek olarak bir üniversite öğrencisine proje veriyorsanız yaptığı uygulamayı bir firmaya pazarlasın hatta kullandırsın. Emin olun faydası onun için çok olacaktır. Bir sonra ki iş başvurusunda referans olacaktır.

Son olarak iyi yazılımcıları gerçekten iyi maaşlar ile ödüllendirin ki , elinizden kaçmasınlar…

 

Saygılar…

 


Tags: , , ,

Devex XtraPivot Grid İle Pivot Rapor Örneği

by EMRCRK 1. September 2013 19:04

:) Merhabalar, bu sefer yazımı şirketimizin blog u üzerinden yayınlıyorum , oradan incelersiniz

Kısacası Devex üzerinde Pivot Grid Raporlama ile ilgili bir örnek.

http://www.new.com.tr/devex-pivot-grid-control/

Windows Mobile & CE Get Device IP Address

by EMRCRK 10. January 2013 11:05

Merhabalar çok mühim bir kod değil ama belki lazım olur diye bir paylaşımda bulunmak istedim.

Windows Mobile veya CE cihazlar üzerinden IP adresi alan 1 satırlık bir kod..

 

 

Imports System.Net
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        TextBox1.Text = Dns.GetHostEntry(Dns.GetHostName()).AddressList(0).ToString()
    End Sub
End Class

Tags: ,

VB.NET | Windows Mobile | Windows CE

Happy New Year (2013)

by EMRCRK 31. December 2012 10:06

Merhaba arkadaşlar bir yılın daha devrini kapatıp , yenisini açıyoruz :) Hepmize hayırlı uğurlu olsun.

Herkese 2013 yılının sağlıklı , mutlu ve huzurlu olmasını dilerim. Başarılı bir sene geçirmenizi temenni ederim :) :)

 

New Ailesi olarak herkesin yeni yılını kutlarız..

Tags:

Devex XtraGrid Master Detail Views Samples

by EMRCRK 26. December 2012 21:32

Tekrar Merhabalar , devex XtraGrid ile master detail bir görüntüyü nasıl elde edersiniz size bunu anlatacağım. Şimdi ilk olarak basit bir veritabanı hazırlayalım. 

1.Olarak PERSONS isimli bir tablomuz olsun

Alanları ID,NAME,SURNAME,AGE olsun

2.Olarak NIDNUMBERS isimli bir tablo olsun 

Alanları ID,NIDNUMBER olsun.

Bu iki tablo arasında ki ilişkilerimiz ID-ID olacaktır.

 

 

void LoadTable() //Tabloları dolduran ve ilişkilendiren metodumuz.
        {
            dtPersons.Clear(); //Kişilrin olduğu table'ı temizliyoruz.
            cmd = new OleDbCommand("SELECT * FROM PERSONS", conn); //Bilgileri dolduruyoruz.
            da.SelectCommand = cmd;
            da.Fill(dtPersons);

            cmd = new OleDbCommand("SELECT * FROM NIDNUMBERS", conn);
            da.SelectCommand = cmd;
            da.Fill(dtNationalIDNumbers);

            DataSet dsRel = new DataSet();//DataSet içerisine bu 2 tabloyu ekliyoruz
            dsRel.Tables.Add(dtPersons);
            dsRel.Tables.Add(dtNationalIDNumbers);

            dsRel.Relations.Add("PersDetail", dtPersons.Columns["ID"], dtNationalIDNumbers.Columns["ID"]);//Tablolar arasında ilişkimizi oluşturuyoruz.

            gridControl1.LevelTree.Nodes.Add(dsRel.Relations["PersDetail"].RelationName, gridView2);//GridControl'e bu ilişkileri belirtip detail view 'ı chlid olarak atıyoruz.
            
            gridControl1.DataSource = dsRel.Tables["PERSONS"];//Persons tablosunu master olarak belirliyoruz.
            gridControl1.Refresh();
            gridControl1.RefreshDataSource();
        }

 

İkinci olarak genellikle kullanıcılar Detail View üzerinde var olan bir alana ait bilgileri alamamaktadır. Bunla ilgili olarakda şu işlem yapılmalıdır :

GridView 2 olarak tanımlanan Detail View 'ın Click Eventi içerisinde 

private void gridView2_Click(object sender, EventArgs e)
        {

            DevExpress.XtraGrid.Views.Grid.GridView a = (DevExpress.XtraGrid.Views.Grid.GridView)sender; // Bir GridView nesnesi oluşturup bunu sender ile hangi view'dan geldiğini alıyoruz.
            if (a.FocusedRowHandle > -1) //Seçilen grid'e ait bir satır varsa bunu focusedRpwNIdNumber olarak tanımlanan değişkene istediğimiz değerleri alıyoruz.
            {
                //MessageBox.Show(a.FocusedRowHandle.ToString());
                focusedRowNIdNumber = a.GetFocusedRowCellValue("NIDNUMBER").ToString();
            }
        }

 

 

private void button1_Click(object sender, EventArgs e)//Daha sonra buton Click eventi içerisinde değerimizi gösteriyoruz.
        {
            MessageBox.Show(focusedRowNIdNumber);
        }

 

 

Üçüncü olarak Grid View üzerinden kayıt ekleme işlemlerinden bahsediyim 

 

private void gridView1_InitNewRow(object sender, DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e) // GridÜzerine yeni bir satır eklenecek ise kullanılan metot
        {           
            addRow = true;
            try
            {           
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@NAME", "").OleDbType = OleDbType.VarChar;
                cmd.Parameters.AddWithValue("@SURNAME", "").OleDbType = OleDbType.VarChar;
                cmd.Parameters.AddWithValue("@AGE", 0).OleDbType = OleDbType.Numeric;
                cmd.CommandText = "INSERT INTO PERSONS (NAME,SURNAME,AGE) " +
                    "VALUES(@NAME,@SURNAME,@AGE)";
                conn.Open();
                cmd.Connection = conn;
                cmd.ExecuteNonQuery();
                conn.Close();
                LoadTable();
            }
            catch (Exception ex)
            {

            }
            addRow = false;
        }

 

Tabi bu örnekte bu işlem çalışır satırı eklersiniz fakat detail tabloya ilişkili bir kayıt gelmediği için programdan bir hata uyarısı alırsınız :) Ama kayıt etmektedir merak etmeyin.

Satır üzerinde kayıt güncellendiğinde bunu veritabanına yansıtmak için 

 

private void gridView1_RowUpdated(object sender, DevExpress.XtraGrid.Views.Base.RowObjectEventArgs e) // Satır güncellendikten sonra çalışacak eventdir
        {
            //Eğer yeni kayıt eklenmeyecekse ve bir satır seçildiyse aşağıdaki işlemler gerçekleşecektir.
            if (gridView1.FocusedRowHandle>-1 && !addRow)
            {
                try
                {
                    int rowId = int.Parse(gridView1.GetFocusedRowCellValue("ID").ToString());
                    string name = gridView1.GetFocusedRowCellValue("NAME").ToString();
                    string surname = gridView1.GetFocusedRowCellValue("SURNAME").ToString();
                    int age = int.Parse(gridView1.GetFocusedRowCellValue("AGE").ToString());

                    cmd.Parameters.Clear();                    
                    cmd.Parameters.AddWithValue("NAME",name).OleDbType=OleDbType.VarChar;
                    cmd.Parameters.AddWithValue("SURNAME", surname).OleDbType = OleDbType.VarChar;
                    cmd.Parameters.AddWithValue("AGE", age);
                    cmd.CommandText = "UPDATE PERSONS SET NAME=@NAME,SURNAME=@SURNAME,AGE=@AGE WHERE ID="+rowId.ToString() ;
                    conn.Open();
                    cmd.Connection = conn;
                    cmd.ExecuteNonQuery();
                    conn.Close();
                    LoadTable();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message); 
                }
            }
        }

 

Aşağıdan örnek uygulamayı indire bilirsiniz. İyi çalışmalar :)

DevexGridSample.rar (62,32 kb)

Devex XtraReport Sample

by EMRCRK 26. December 2012 21:16

Merhaba arkadaşlar çok uzun bir zamandır iş yoğunluğumdan dolayı blog ile ilgilenemiyorum. Bugün biraz ufak tefek paylaşımlarda bulunacağım.

Devex XtraReport üzerine parametreler aracılığı ile rapor hazırma adına basit bir örnek yaptım. 

İlk olarak projemizi oluşturmamız gerekmektedir. Ben basit bir ekran yaptım ,

Ekran bu şekilde şimdi projemize bu parametreleri göndere bileceğimiz bir XtraReport Eklememiz gerekmektedir , bunu ekledikten sonra karşımıza çıkacak report wizard üzerinde Standar Report yada Label seçeneği gelecektir . Ben Standart report ile yaptım isterseniz Label 'ı seçebilirsiniz

 

Dizaynlarımızı yaptıktan sonra basit olarak hemen kodlamamızı yapmaya geçiyorum ama şunu unutmayın Report Designer üzerinde parametre alacak objenin Modifiers özelliğini dışardan erişile bilir yapmanız gerekmektedir.

 

 

Örneği buradan indire bilirsiniz :)

VS2012 :DevexXtraReportSample.rar (73,07 kb)

VS2010: DevexXtraReportSample VS2010.rar (52,07 kb) ( Proje dosyası VS2008 içerisinde açılabilir)

Tags: , ,

CSharp | DevExpress

Devex XtraGrid Add Column Group - Çalışma Zamanında Gruplanacak Sütünü Ekleme

by EMRCRK 22. May 2012 21:24

Merhaba arkadaşlar,şuan otobüsten yazıyorum o yüzden çok detaylandırmadan anlatacağım.

Devex Grid üzerinde bulunan herhangi bir sutunu runtime da nasıl gruplarım sorusunun cevabını veriyorum.

Bugün bir müşterimizde bununla ilgili uğraşıyorduk ki artık yorgunluktan bu kadar basit birşeyi çok fazla düşünmüşüz ki geç oldu. 

'Zülfikar Bey biraz dinlenmek lazım mış :)'

 


Kodu Buraya yazıyorum , belki işinize yarar.

VB.NET

 

Insert code here...Public Class Form1
    Dim dtPerson As New DataTable
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        dtPerson.Columns.Add("Name")
        dtPerson.Columns.Add("Surname")
        dtPerson.Columns.Add("Age")

        Dim dRow As DataRow = dtPerson.NewRow()
        dRow("Name") = "Emre"
        dRow("Surname") = "CIRIK"
        dRow("Age") = "21"
        dtPerson.Rows.Add(dRow)
        dRow = dtPerson.NewRow()
        dRow("Name") = "Halid"
        dRow("Surname") = "Pekel"
        dRow("Age") = "19"
        dtPerson.Rows.Add(dRow)

        GridControl1.DataSource = dtPerson

     
        gColName.Group()

    End Sub
End Class

 

 

DevexRuntimeAddGridColumnGroup.rar (67,49 kb)

Tags: , ,

DevExpress | VB.NET

How can I make my C# application check for updates? (Basit Uygulama Güncelleme Programı)

by EMRCRK 1. April 2012 20:30

Merhaba arkadaşlar , bugün yazdığım basit bir uygulama güncelleme programını sizlerle paylaşacağım. Belki ihtiyacınız olur .

Programın çalışma mantığından bahsediyim ;

 Program kendi içerisinde güncellenmesi istenen bir .exe uzantılı program dosyasını kontrol eder. Bu dosyanın versiyonu ile ,

kontrol amaçlı belirlenen güncelleme .exe sinin versiyonlarını karşılaştırır. Eğer güncelleme dizinindeki dosya ile aynı değilse , o dosyayı bilgisayarınızın C:\ dizinine download eder, sonra belirlenen bir resim ile ekrana güncelleme uyarısı verdirilip arka planda o program çalışıyorsa görevi sonlandırıp güncel program ile yerini değiştirir ve sonra güncel programı çalıştırır.

Bu programı gün itibari ile sayısı 30 dan fazla kiosk üzerine yükledik. Çalıştığına şüpeniz olmasın. Çok fazla derinlere inmeden uygulamamı kodları ile birlikte upload ettim. İndire bilirsiniz =)) 

 

Çok detaya giremiyorum bu aralar üzgünüm , New isimli şirkette çalışıyorum şirketimiz yeni kuruldu ve şuan onun için çok çalışmamız gerekiyor. Umarım işinize yarar. Görüşmek dileğiyle... 

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO ;
using System.Diagnostics;
using System.Xml;
using System.Net;
using System.Threading;
using System.IO;

namespace ProjectUpdate
{
    public partial class FrmMain : Form
    {
        StreamWriter processLog;
        FileVersionInfo versionInfo;
        FrmUpdateScreen updateScreeen;
        string settingFile = Application.StartupPath + "\\Settings.xml";
        DataTable dtSettings;

        delegate void VersionControl(string versionFile);
      
        WebClient webClient = new WebClient();


        public FrmMain()
        {
            InitializeComponent();
            dtSettings = new DataTable("Settings");
            dtSettings.Columns.Add("ProjectFile",typeof(string));
            dtSettings.Columns.Add("VersionFile", typeof(string));
            dtSettings.Columns.Add("WaitSecreen", typeof(string));
            dtSettings.Columns.Add("UpdateFrequency", typeof(int));
            try
            {
             
            if (File.Exists(settingFile))
            {
                dtSettings.ReadXml(settingFile);
                if (dtSettings.Rows.Count>0)
                {
                    txtProjectFile.Text = dtSettings.Rows[0]["ProjectFile"].ToString();
                    txtVersionFile.Text = dtSettings.Rows[0]["VersionFile"].ToString();
                    pcxUpdateScreen.Load(dtSettings.Rows[0]["WaitSecreen"].ToString());
                    pcxUpdateScreen.Tag = dtSettings.Rows[0]["WaitSecreen"].ToString();
                    nudUpdateFrequency.Value = int.Parse(dtSettings.Rows[0]["UpdateFrequency"].ToString());
                    tmrTrigger.Interval = int.Parse(dtSettings.Rows[0]["UpdateFrequency"].ToString())*1000;
                    

                    chkAutoUpdate.Checked = true;
                    webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
                    
                    webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
                   
                }
            }
            else
            {
                MessageBox.Show("Program has not initial setting file.");
            }
            }
            catch (Exception ex)
            {
                processLog = new StreamWriter(Application.StartupPath + "\\Log.txt", true);
                processLog.WriteLine("*****Error****");
                processLog.WriteLine("Date:"+DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss"));
                processLog.WriteLine("Message:"+ex.Message);
                processLog.Flush();
                processLog.Close();
            }
        }                                               
        private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            prgBarState.Value = e.ProgressPercentage;
        }

        private void Completed(object sender, AsyncCompletedEventArgs e)
        {
            try
            {                     
                 ChangeNewVersion();
                
            }
            catch (Exception ex)
            {

                updateScreeen.Close();
                updateScreeen.Dispose();
                Application.DoEvents();
                tmrTrigger.Start();

                processLog = new StreamWriter(Application.StartupPath + "\\Log.txt", true);
                processLog.WriteLine("*****Completed Error****");
                processLog.WriteLine("Date:" + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss"));
                processLog.WriteLine("Message:" + ex.Message);
                processLog.Flush();
                processLog.Close();
            }
            //MessageBox.Show("Download completed!");
        }
        private void FrmMain_Load(object sender, EventArgs e)
        {
            tmrTrigger.Start();
        }

        private void tmrTrigger_Tick(object sender, EventArgs e)
        {
            try
            {
                this.Invoke(new VersionControl(ControlVersion), txtVersionFile.Text);
                tmrTrigger.Start();
            }
            catch (Exception ex)
            {
                tmrTrigger.Start(); 
            }
            //ControlVersion(txtVersionFile.Text);
            
        }

        void ControlVersion(string versionFile)
        {
            tmrTrigger.Stop();
            try
            {
                if (txtProjectFile.Text != "")
                {
                    versionInfo = FileVersionInfo.GetVersionInfo(txtProjectFile.Text);
                    DataTable dtVersionXML = new DataTable("VersionFile");
                    dtVersionXML.Columns.Add("Version", typeof(string));
                    dtVersionXML.Columns.Add("FileName", typeof(string));
                    dtVersionXML.ReadXml(versionFile);
                    if (dtVersionXML.Rows.Count > 0)
                    {
                        string newversion = dtVersionXML.Rows[dtVersionXML.Rows.Count - 1]["Version"].ToString();
                        string sourcefile = dtVersionXML.Rows[dtVersionXML.Rows.Count - 1]["FileName"].ToString();
                        if (versionInfo.ProductVersion == newversion)
                        {
                            //MessageBox.Show("Aynı Versiyon");
                        }
                        else
                        {
                            tmrTrigger.Stop();
                            processLog = new StreamWriter(Application.StartupPath + "\\Log.txt", true);
                            processLog.WriteLine("*****New Version Founded****");
                            processLog.WriteLine("Date:" + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss"));
                            processLog.WriteLine("Version Nr:" + newversion);
                            processLog.Flush();
                            processLog.Close();
                            Application.DoEvents();
                            updateScreeen = new FrmUpdateScreen();
                            updateScreeen.ImageLoc = pcxUpdateScreen.Tag.ToString();
                            updateScreeen.Show();
                            webClient.DownloadFileAsync(new Uri(sourcefile), @"C:\" + versionInfo.ProductName + ".exe");
                            Application.DoEvents();

                        }
                    }
                }
            
            }
            catch (Exception ex)
            {
                processLog = new StreamWriter(Application.StartupPath + "\\Log.txt", true);
                processLog.WriteLine("*****Error****");
                processLog.WriteLine("Date:" + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss"));
                processLog.WriteLine("Message:" + ex.Message);
                processLog.Flush();
                processLog.Close();
            }
            

        }
        void ChangeNewVersion()
        {
            try
            {
             
            Process[] prs = Process.GetProcesses();
            foreach (Process pr in prs)
            {
                if (pr.ProcessName == versionInfo.ProductName)
                    pr.Kill();
            }
            Application.DoEvents();
            Thread.Sleep(3000);
      

            if (File.Exists(txtProjectFile.Text))
            {
                File.Delete(txtProjectFile.Text);
            }                                               
            Application.DoEvents();
            //MessageBox.Show(versionInfo.ProductName);
            File.Copy(@"C:\" + versionInfo.ProductName + ".exe", txtProjectFile.Text);
            Application.DoEvents();
            Process.Start(txtProjectFile.Text);
            Application.DoEvents();
            updateScreeen.Close();
            updateScreeen.Dispose();
            Application.DoEvents();
            tmrTrigger.Start();
            }
            catch (Exception ex)
            {

                processLog = new StreamWriter(Application.StartupPath + "\\Log.txt", true);
                processLog.WriteLine("*****Change Error****");
                processLog.WriteLine("Date:" + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss"));
                processLog.WriteLine("Message:" + ex.Message);
                processLog.Flush();
                processLog.Close();

                updateScreeen.Close();
                updateScreeen.Dispose();
                Application.DoEvents();
            }
        }

        private void btnSelectUpdateFile_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "Executable files (*.exe)|*.exe|All files (*.*)|*.*";
            ofd.ShowDialog();
            txtProjectFile.Text = ofd.FileName;
        }

        private void btnSelectVersionFile_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "XML files (*.xml)|*.xml";
            ofd.ShowDialog();
            txtVersionFile.Text = ofd.FileName;
        }

        private void btnSaveSettings_Click(object sender, EventArgs e)
        {
            DataRow dRowSettings = dtSettings.NewRow();
            dRowSettings["ProjectFile"] = txtProjectFile.Text ;
            dRowSettings["VersionFile"] = txtVersionFile.Text ;
            dRowSettings["WaitSecreen"] = pcxUpdateScreen.Tag.ToString();
            dRowSettings["UpdateFrequency"] = nudUpdateFrequency.Value ;
            dtSettings.Rows.Clear();
            dtSettings.Rows.Add(dRowSettings);

            dtSettings.WriteXml(settingFile); 
            MessageBox.Show("Setting file saved!");
            
            tmrTrigger.Start();
        }

        private void btnSelectUpdateScreen_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "JPEG files (*.jpg)|*.jpg|All files (*.*)|*.*";
            ofd.ShowDialog();
            pcxUpdateScreen.Tag = ofd.FileName;
            pcxUpdateScreen.Load(ofd.FileName);
        }

        private void btnCreateVersionFile_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "Executable files (*.exe)|*.exe|All files (*.*)|*.*";
            ofd.ShowDialog();
            txtSourceProject.Text = ofd.FileName;
            FileVersionInfo versionInfo = FileVersionInfo.GetVersionInfo(txtSourceProject.Text);

            DataTable dtVersionFile = new DataTable("VersionFile");
            dtVersionFile.Columns.Add("Version", typeof(string));
            dtVersionFile.Columns.Add("FileName", typeof(string));
            if (File.Exists(Application.StartupPath+"\\Version.xml"))
            {
                File.Delete(Application.StartupPath+"\\Version.xml");
            }
            DataRow versRow = dtVersionFile.NewRow();
            versRow["Version"] = versionInfo.ProductVersion;
            versRow["FileName"] = ofd.FileName;
            dtVersionFile.Rows.Add(versRow);
         
            dtVersionFile.WriteXml(Path.GetDirectoryName(txtSourceProject.Text)+"\\Version.xml");
            MessageBox.Show("Version File Saved!");
        }

        private void chkAutoUpdate_CheckedChanged(object sender, EventArgs e)
        {
            if (chkAutoUpdate.Checked )
            {
                tmrTrigger.Start();
            }
            else
            {
                tmrTrigger.Stop();
            }
        }

        private void btnUpdateManuel_Click(object sender, EventArgs e)
        {
            try
            {
               this.Invoke(new VersionControl(ControlVersion), txtVersionFile.Text);

               if (chkAutoUpdate.Checked)
               {
                   tmrTrigger.Start();
               }
               else
               {
                   tmrTrigger.Stop();
               }
            }
            catch (Exception ex)
            {
                processLog = new StreamWriter(Application.StartupPath + "\\Log.txt", true);
                processLog.WriteLine("*****Error****");
                processLog.WriteLine("Date:" + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss"));
                processLog.WriteLine("Message:" + ex.Message);
                processLog.Flush();
                processLog.Close();
            }
        }
    }
}

 

ProjectUpdate.rar (255,99 kb)

Sql Server CE : Uygulama Örneği

by EMRCRK 18. March 2012 15:36

Merhaba arkadaşlar çok fazla açıklama yapamayacağım, bir süreliğine server geçişinden dolayı site yayında değildi. SQL Server CE ile ilgili basit bir örnek yazdım. SQL Server CE Veritabanı oluşturma, kayıt ekeleme ve görme gibi işlemler mevcuttur. Örnek Smart Device Application olarak yapılmıştır.

 

 

using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlServerCe;
namespace SqlCeExample
{
    public partial class Form1 : Form
    {
        SqlCeEngine sqlEngine = new SqlCeEngine();

        SqlCeConnection sqlCeConn = new SqlCeConnection();
        SqlCeCommand sqlCeCmd = new SqlCeCommand();
        public Form1()
        {
            InitializeComponent();
        }

        private void btnCreateDatabase_Click(object sender, EventArgs e)
        {
            try
            {
                sqlEngine.LocalConnectionString = "Data Source=\\ExampleDb.sdf";
                sqlEngine.CreateDatabase();
                MessageBox.Show("Veri Tabanı Oluştu.");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message );
            }
        }

        private void btnCreateTable_Click(object sender, EventArgs e)
        {

            sqlCeConn.ConnectionString = "Data Source=\\ExampleDb.sdf";
            if (sqlCeConn.State==ConnectionState.Closed)
            {
                sqlCeConn.Open();
            }
            int executeResult = 0;//Sorgu başarılımı değilmi
            sqlCeCmd.Connection = sqlCeConn;
            sqlCeCmd.CommandText = "CREATE TABLE tblIsimler(ID int IDENTITY(1,1),Isim nvarchar(25),Soyad nvarchar(25))";
            executeResult=sqlCeCmd.ExecuteNonQuery();
            MessageBox.Show(executeResult.ToString());
            sqlCeConn.Close();
        }

        private void btnAddNewRow_Click(object sender, EventArgs e)
        {
            sqlCeConn.ConnectionString = "Data Source=\\ExampleDb.sdf";
            if (sqlCeConn.State==ConnectionState.Closed)
            {
                sqlCeConn.Open();
            }
            sqlCeCmd.Connection = sqlCeConn;
            sqlCeCmd.CommandText = "INSERT INTO tblIsimler(Isim,Soyad) Values('Eren','Topdemir')";
            int executeResult = 0;//Sorgu başarılımı değilmi
            sqlCeCmd.ExecuteNonQuery();
            MessageBox.Show(executeResult.ToString());
            sqlCeConn.Close();
        }
        
        private void btnShowRecord_Click(object sender, EventArgs e)
        {
            SqlCeDataReader sqlCeReader;
            sqlCeConn.ConnectionString = "Data Source=\\ExampleDb.sdf";
            if (sqlCeConn.State == ConnectionState.Closed)
            {
                sqlCeConn.Open();
            }
            sqlCeCmd.Connection = sqlCeConn;
            sqlCeCmd.CommandText = "Select * From tblIsimler";
            sqlCeReader = sqlCeCmd.ExecuteReader();
            while (sqlCeReader.Read())
            {
                MessageBox.Show(sqlCeReader["Isim"].ToString());
            }
            sqlCeReader.Close();
            sqlCeConn.Close();
        }
    }
}
 

 

SqlCeExample.rar (112,43 kb)

Month List

Calendar

<<  October 2014  >>
MoTuWeThFrSaSu
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

View posts in large calendar