Blog Home  Yalcomania'n�n Yeri Feed your aggregator (RSS 2.0)  
Yalçın Uzun - Monday, October 08, 2007
Kişisel Blog
 
 Monday, October 08, 2007

Bir projemde Regular Expression kullanmam gerekti. Ancak piyasadaki uygulamalar tüm diller için yazıldığı için orada düzgün çalışan expression'lar .net'e gelince çalışmıyordu. Bunun üzerine oldukça basit olan bu uygulamayı yazdım.



İndirmek için tıklayınız: Yalcomania_RegEx_Editor.rar (44,51 KB)
Monday, October 08, 2007 1:27:06 PM (GTB Standard Time, UTC+02:00)  #    Comments [1]    | 
 Monday, October 01, 2007

Eğlencesine yazdığım bir oyun. (Kantina'daki makina çok paramı yedi de)

İncelemek için güzel bir örnek olabilir. Kapsadığı konular:

Temel OOP
Eventler'le çalışmak
IComparable Interface'i
User Controllerle çalışmak
Gerçekten Random çalışan class
Gömülü kaynaklarla çalışmak
Backgroundworker nesnesi ile çalışmak
Gradient Form
Hazır İskambil kağıdı kütüphanesi (Kart, EldekiKartlar ve Deste classları)
Web Cam (veya bir capture device ile) görüntü capture etmek
Observer Design Pattern

İndirmek için: YalcomaniaHorseRacePoker.rar (1,32 MB)

Screen Shotlar:





İndirmek için : YalcomaniaHorseRacePoker.rar (1,32 MB)
Monday, October 01, 2007 9:24:25 AM (GTB Standard Time, UTC+02:00)  #    Comments [1]    | 
 Wednesday, September 19, 2007

İki adet formula field'a ihtiyacımız olacak:
Adlarını koymak size kalmış.

Birincisi:
WhilePrintingRecords;
Global numberVar total;
total:=total+{Orders.Freight} Burada toplamını istediğimiz alanı yazıyoruz. Ben orders tablosundaki Freight'i aldım.

Türkçe meail:
Her kayıtta "total" adlı global bir değişkene, freight'tan gelen değeri ekle.

Bu formülü kaydedip kapattıktan sonra Details kısmına bırakıyoruz.  Böylelikle her kayıt geldiğinde sürekli artan bir değişkenimiz var.
Şöyle bir şey oluyor:

Order Id:   Freight:    BenimFormul:
1                 10                10
2                 25                35
3                 100               135

Tabi, bu formülün ekranda gözükmesini istemeyiz, o yüzden alanı seçip suppress özelliğini true yapıyoruz.

Görecekseniz ki kaç sayfa olursa olsun alanımız giderek artacak. Bu yüzden sayfa başında sayac'ı sıfırlamamız lazım.

İşte ikinci formül kodlarımız:

WhilePrintingRecords;
Global numberVar total;
numberVar geciciDegisken:=total;
total:=0;
geciciDegisken;

Türkçe meail:
total adlı global değişkendeki değeri, geciciDegisken adlı bir değişkene aktar.
global değişkeni sıfırla
ekrana geciciDegiskenin değerini bas

Bu formülü de Page Header'a koymamız lazım. Böylelikle her sayfa oluşturuluken burası sadece bir kere çalışacak. değeri de sıfıladığımız için bir önceki formül toplamaya 0'dan başlayacak.


 

Wednesday, September 19, 2007 11:53:02 PM (GTB Standard Time, UTC+02:00)  #    Comments [1]    | 
 Tuesday, September 18, 2007

Herhalde Crystal Report hakkında forumlarda en faza sorulan sorulardan biri de veritabanında sadece yolu tutulan bir resmin raporda gösterilmesidir. Aslında sorun şurdan kaynaklanıyor; Crystal, database’de binary olarak saklanan resimleri direk gösterebiliyor ancak yolu verilen bir resmi binary formata çevirip gösteremiyor. Her ne kadar sorun olsa da çözüm imkansız da değil. Bu makalede kendi Typed Dataset’imizle bu sorunu nasıl aşacağımız anlatacağım.

Önce kendi veritabanımızı oluşturarak işe başlayalım. Ben örnekte “Oyuncular” diye bir tablo oluşturup , ünlü sinema oyunularımızla doldurdum. Bu sanatçıların resimlerini de C klasörünün altında Resimler adlı bir klasöre attım. Bu resimlerin adlarını da tabloya girdim.



Daha sonra CrystalResim adlı bir Windows Projesi oluşturdum. Form1’ime Crystal Report Viewer nesnesi ekledim.

Bir sonraki adımda bir “typed dataset” olarak oluşturup, bunu ilgili tablomuz gelecek şekilde dolduracağız ve daha sonra binary resimlerimizi ekleyeceğimiz bir sütun oluşturacağız. Bunu yapmaktaki amacımız bu dataset’i raporumuza kaynak olarak vermemiz. Adım adım bu işlemleri gerçekleştirelim:

1-      Typed Dataset’i oluşturmak için, projemizde sağ tık ve “Add New Item” seçeneğinden Dataset’i seçiyoruz. Ben ismine “MyDataSet” verdim. Bu isim önemli çünkü ileride NameSpace olarak karşımıza çıkacak.

2-      Bize boş bir ekran geliyor. İster Server Explorer’dan Oyuncular Tablosunu buraya sürükleyip bırakın, isterseniz sağ tık à “Add”  à Table Adapter seçeneğini seçip, buradaki sihirbazı takip edebilirsiniz. Otomatik olarak Visual Studio bu TableAdapter’e bir isim verecektir. (Tablo Adı + “TableAdapter” şeklinde). Bu isim önemli çünkü örneğimizin ilerleyen zamanlarında kullanacağız.  Sonuçta şu şekilde bir yapı elde etmeniz lazım:



3-      Sırada resmi binary olarak aktaracağımız sütunu eklemek var. Tablo üzerinde sağ tık à Add à Column seçeneği ile yeni bir sütun oluşturacağız. Yeni sütuna ben “BinaryResim” adını verdim. Bu işlemden sonra sütunu seçip “Properties” ekranından DataType seçeneğini System.Byte yapın. Ancak biz tek bir byte değil, byte dizisi tutacağımız için sonuna [] karakterlerini ekleyin. Yapının son hali şu şekilde olması lazım:

 

4-      Bu ekranla işimiz bitti. Projeyi bir kere derleyip bu ekranı kapatabiliriz. Derlemezseniz rapor ekranında sorun yaşayabilirsiniz.

Şimdi rapor oluşturma kısmına geldik. Projemiz üzerinde sağ tık à Add New Item à Crystal Report seçeneği ile bu işlemi gerçekleştirebiliriz. Ben rapor adına rprOyuncular dedim.  Bildiğiniz üzere bizi Crystal’ın sihirbazı karşılayacaktır. Raporu ister sihirbazla, isterseniz “As A Blank Report” seçeneğini seçip elle de yapabilirsiniz.

Sihirbazla yapacaksanız, ilk ekranda kaynak olarak  Project Data à Ado.Net Data Sets à Crystal Resim.MyDataSet (Dikkat ederseniz burasu Proje adı nokta dataset adı şekline gidiyor) à Oyuncular (Tablonun adı) seçmelisiniz.

Elle yapacaksanız Field Explorer’da Database Fields à sağ tık à Database Expert seçeneğini seçip bir sonraki adımda sihirbazdaki şablonu uygulamalısınız.

Sihirabazla devam edenler bilirler ki, bundan sonraki adım rapora dahil edilecek alanları seçmektir.  Bu ekranda BinaryResim olarak kendi oluşturduğunuz alanı göremeyeceksiniz. Sakin paniklemeyin, her şey yolunda. Sadece o sütunun tipi byte[] olduğu için listede çıkmadı. O alan yokmuş gibi rapor işlemlerinize devam edin.

Elle devam edenler ise bir problem yaşamayacaklar, çünkü tüm sütunlar karşılarında çıkacak ve sürükle bırak işlemi ile istenilen sütunları rapora atacaklardır.

Wizard ile işlemlerini tamamlayan arkadaşlar BinaryResim alanını rapora eklemek için Field Explorer’dan BinaryResim sütununu elle sürükleyip bırakacaklar, böylelikle iki üst paragrafta bahsettiğim sorunu çözeceklerdir.

DİKKAT: BinaryResim  sütununu rapora eklemezseniz resimler gözükmeyecektir. Resim adlı sütun sadece resim dosyasının adını tutuyor.

Artık raporumuz da bitti. Tek yapmamız birazcık kod yazmak. Formumuzda hatırlayacağınız gibi bir tek Crystal Report Viewer nesnesi vardı. Bu yüzden kodlarımı Form’un Load olayında yazacağız.

        private void Form1_Load(object sender, EventArgs e)

        {

            //Dataset'imizin bir instance'ını oluşturacağız (daha doğrusu sadece tablomuzu oluşturacağız)

            myDataset.OyuncularDataTable oyuncularTablo = new myDataset.OyuncularDataTable();

 

            //Datatable'ımızı dolduracak TableAdapter'i de oluşturuyoruz

            myDatasetTableAdapters.OyuncularTableAdapter oyuncularTableAdapter = new CrystalResim.myDatasetTableAdapters.OyuncularTableAdapter();

 

            //Verilerle dolduruyoruz

            oyuncularTableAdapter.Fill(oyuncularTablo);

 

            //!!!!İşin can alıcı noktası burada. DataTable'daki her satırı dolaşarak Resim alanındaki resmin binary

            //halini BinaryResim alanına aktarıyruz

            foreach (DataRow dr in oyuncularTablo.Rows)

            {

                byte[] resim= System.IO.File.ReadAllBytes(@"c:\Resimler\" + dr["Resim"].ToString());

                dr["BinaryResim"] = resim;

            }

 

            //Rarpoun bir instance'ını oluşturuyoruz

            rprOyuncular oyuncularRapor = new rprOyuncular();

 

            //Raporun kaynağını datatable'ımız olarak veriyoruz

            oyuncularRapor.SetDataSource(oyuncularTablo as DataTable);

 

            //ve en son formda görmek için Crystal Report Viewer nesnemizi rapora bağlıyoruz

            this.crystalReportViewer1.ReportSource = oyuncularRapor;

 

        }

Bu kadar!!! Artık tek yapmanız gereken projeyi çalıştırmak. Görünüm şu şekilde olacaktır:

 

Bir makalenin daha sonuna geldik. Umarım raporlarda resim göstermekte zorlanan arkadaşlar için yararlı olmuştur. Tüm görüş, düşünce ve sorularınız için çekinmeden yalcin.uzun@bilgeadam.com ‘a mail atabilirsiniz.

 

Projeyi, resimleri ve veritabanını indirmek için : CrystalResimMakale.rar (211,22 KB)
Tuesday, September 18, 2007 5:51:04 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]    | 
 Monday, September 17, 2007

Ne yalan söyleyeyim, çok kolaymış.

Bir tema yaratıp, içindeki skin dosyasına aşağıdaki gibi stillerinizi oluşturun:

<
asp:GridView SkinId="Sari" runat="server" BackColor="yellow" BorderColor="yellow" />

<asp:GridView SkinId="Kirmizi" runat="server" BackColor="red" BorderColor="red" />

<asp:GridView SkinId="Yesil" runat="server" BackColor="green" BorderColor="green"/>

Sonra bu sayfayı kaydedin. (Kaydetmezseniz listede göremezsiniz)

Grid koyduğunuz sayfanın page directive'ine StyleSheetTheme (Dikkat, "theme" değil) attribute'ine temanızın adını verin.

Artık gridview'in smart tasks panelindeki AutoFormat özelliğinde stillerinizi görebilirsiniz.

Monday, September 17, 2007 7:07:31 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]    | 

Örnek üzerinden gidelim:

BenimTema adlı bir tema'mız var ve altındaki skin dosyasında şu satır yazılı:

<
asp:Button runat="server" BackColor="Red" /> (Butonların arka planını kırmızı yap)

Sayfamızda şöyle bir buton olsun:

<
asp:Button ID="Button1" runat="server" Text="Button" BackColor="black" /> (Arka planı Siyah olan bir buton)

Page directive'miz de şöyle:

<%@ Page StylesheetTheme="BenimTema" %>

Bu kod çalıştığında buton'umuzun rengini siyah olarak görürüz. (Kontrol'deki renk)

Page directive'i şöyle değiştirdiğimizde ise:

<%@ Page Theme="BenimTema" %>

buton'umuzun rengini kırmızı olarak görürüz. (Tema'daki renk)

Yani bir kontrolde görsel bir değişiklik tanımlanmışsa ve o özellik sayfanın kullandığı temada da varsa:
-Theme kullanıldığında Tema'daki değer baskın olur
-StyleSheetTheme kullanıldığında kontrolün değeri baskın olur.

Monday, September 17, 2007 6:41:52 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]    | 
 Tuesday, September 04, 2007

Javascript debugging'i sadece VS 2008'e has bir özellik olduğunu sanan arkadaşlara VS 2003 veya 2005'te

1- Internet explorer'ın ayarlarından Disable Javascript Debugging seçeneğini kaldırmalarını
2- debug etmek istedikleri javascript kodunda breakline için debugger yazmalarını

hararetle tavsiye ederim.

Tuesday, September 04, 2007 12:53:37 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]    | 
 Friday, August 03, 2007
ASP.Net'te TreeView nesnesine sonsuz ağaç yapısındaki verilerinizi mi atmak istiyorsunuz? İşte cevabı:
(Aynı zamanda güzel bir recursive method örneği)

Kategoriler Tablosu:
KategoriId - int
Kategori Ad - varchar(50)
UstKategoriId - int (Nullable)

Bu tabloda KategoriId ve UstKategoriId arasında da ilişki var.


public partial class Default3 : System.Web.UI.Page

{

//Kategoriler tablosunun duracağı dataset. Her iki metoddan da ulaşılcağı için global yaptım.

DataSet ds = new DataSet();

protected void Page_Load(object sender, EventArgs e)

{

//Treeview'imizin node'larını oluşturmaya başlıyoruz

TreeViewNodlariniOlustur();

}

private void TreeViewNodlariniOlustur()

{

//Treeview'i önce temizleyelim

this.TreeView1.Nodes.Clear();

//Standart database kodları, amaç tüm kategoriler tablosunu bir dataset'e atmak

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MyWebSiteDBConnectionString"].ConnectionString);

SqlDataAdapter da = new SqlDataAdapter("select * from kategoriler", con);

da.Fill(ds);

//Önce en üst kategorileri yazdırmalıyız. Bu da üst kategoriId'si null olan kayıtlar demektir.

DataRow[] anaKategoriler = ds.Tables[0].Select("UstKategoriId is null");

//Şimdi hepsini dolaşmaya başlıyoruz

foreach (DataRow anaKategori in anaKategoriler)

{

TreeNode tn = new TreeNode(anaKategori["KategoriAd"].ToString(), anaKategori["KategoriId"].ToString()); //Birinci parametre Text, ikinci parametre Value

this.TreeView1.Nodes.Add(tn); //Treeview'e ekliyoruz

//Yazdığımız her kategorilerinin altında başka kategoriler var mı diye tek tek kontrol ediyoruz

AltKategorileriYaz(tn, Convert.ToInt32(anaKategori["KategoriId"]));

}

}

//Cillop gibi recursive method'umuz

private void AltKategorileriYaz(TreeNode ustKategori, int kategoriId)

{

//Parametreden aldığımız kategori'nin altındaki altkategorileri sorguluyoruz

DataRow[] kategoriler = ds.Tables[0].Select("UstKategoriId=" + kategoriId);

//Her alt kategoriyi dolaşmaya başlıyoruz

foreach (DataRow kategori in kategoriler)

{

TreeNode tn = new TreeNode(kategori["KategoriAd"].ToString(), kategori["KategoriId"].ToString());

//Olulan yeni node'u, parametre olarak gönderdiğimiz node'a bağlıyoruz.

ustKategori.ChildNodes.Add(tn);

//ve bu kategorinin de altında alt kategoriler var mı diye kendimizi tekrar çağırıyoruz.

AltKategorileriYaz(tn, Convert.ToInt32(kategori["KategoriId"]));

}

}

}

Friday, August 03, 2007 2:57:12 PM (GTB Standard Time, UTC+02:00)  #    Comments [1]    | 
 Thursday, July 26, 2007

"there are only 10 types of people in the world:
those who understand binary and those who don't. "

Thursday, July 26, 2007 3:45:30 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]    | 
Copyright © 2008 Yalçın Uzun