24 Aralık 2008

MSP Türkiye Ekibi Teknoloji Meraklıları ile Buluşuyor

Microsoft Student Partner Türkiye ekibi bu hafta sonu Çankaya Üniversitesi'nde gerçekleştirilecek süper bir etkinlikle teknolojistleri ağırlayacak. MSP Days olarak adlandırdıkları bu etkinlikte birçok sunum olacak ve yeni teknolojiler tanıtılacak. Özellikle Ankaralı teknoloji meraklılarının ilgisini çekeceğini düşünüyorum. Detaylı bilgileri www.mspdays.com adresinden alabilirsiniz.

Tüm MSP arkadaşları buradan tebrik ediyorum. Gerçekten de önemli bir işin altına imza atacaklar böyle büyük bir etkinliği gerçekleştirerek.

23 Aralık 2008

Boğaziçi Üniversitesi'ndeydim

Gençsen Geleceksin 2.0 Türkiye Turu kapsamında bugün Boğaziçi Üniversitesi'ndeydim. Microsoft adına yakın geleceğin yazılım teknolojileri üzerine konuştuğum seminer diğer Gençsen Geleceksin etkinlikleri gibi oldukça renkli geçti. Tabi süre yeterli olmadığı için yine sunumun son kısımlarını çok hızlı geçmek durumunda kaldım. Öğrencilerin özellikle cloud computing ve Windows Azure ile yakından ilgilenmeleri ve beni soru yağmuruna tutmaları bu etkinliğin ilginç yönlerinden biriydi.

Boğaziçi Üniversitesi - Gençsen Geleceksin 2.0 Semineri
Etkinlik sonrasında bazı katılımcılarla çekildiğimiz günün hatıra fotoğrafı

Etkinlikte emeği geçen başta Ege Akpınar ve diğer MSP arkadaşlara, Boğaziçi COMPEC(Bilişim Kulübü)'teki arkadaşlarıma teşekkürlerimi sunuyorum. Yarın İstanbul Üniversitesi'nde C# Workshop etkinliğinde olacağım. Yeni izlenimlerimi yarında blogumda paylaşmak umuduyla

22 Aralık 2008

Windows Ürünlerinin Kod İsimleri

Bildiğiniz gibi Microsoft çıkaracağı birçok ürünü daha beta aşamasındayken belirli kod isimleri(codename) vererek duyurmakta ve bizi gelecekteki yeniliklere çok erkenden ısındırmakta. Birkaç tane codename sayın desem aklınıza ilk hangileri gelir acaba? Whidbey, Orcas, Yukon, Longhorn vb...

Wikipedia'da karşılaştığım bir linke bakınca aslında Microsoft'un geçmişten beri codename'i ciddi bir standart halinde kullandığını gördüm. Bu sayfadan hem codename geçmişine göz atabilir, hem de kısaca zamanda yolculuk yaparak nereden nereye gelmişiz görebilirsiniz. Nerede Windows 3.1, nerede Windows Vista :)

20 Aralık 2008

WPF Uygulamalarında DocumentViewer ile XPS Dokümanlarının Görüntülenmesi

XPS, Windows Vista ile birlikte kullanımı gittikçe yaygınlaşan bir dosya formatı. Word, Excel, Powerpoint dosyalarını XPS formatına çevirerek Office kurulu olmayan bir bilgisayarda dahi Internet Explorer 7 gibi bir tarayıcı üzerinde görüntüleyebiliyoruz. Bu yazıda kullanımı yaygınlaşan XPS formatınındaki dosyaları WPF(Windows Presentation Foundation) uygulamalarında DocumentViewer kontrolüyle nasıl görüntüleyebileceğimizi anlatmaya çalışacağım.

WPF ile gelen kontrollerimizden olan DocumentView üzerinde bir XPS dosyası görüntüleyebilmek için XpsDocument tipinden bir nesneye ihtiyacımız olacaktır. mscorlib.dll'de bulunmayan bu sınıf için ReachFramework.dll'i projemize eklememiz gerekiyor.

ReachFramework.dll'in Add Reference seçeneğinden seçilmesi
ReachFramework.dll'in proje referanslarına eklenmesi

İlgili dll dosyasını projemizin referanslarına ekledikten sonra artık uygulamamıza geçebiliriz. Yapacağımız işlem oldukça basit aslında; penceremize bir tane DocumentViewer kontrolü ekliyor ve pencerenin Loaded event'ine aşağıda gördüğünüz iki satırlık ifadeyi ekliyoruz.

Window1.xaml

<Window x:Class="WpfDocumentViewerXps.Window1"

   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

   Title="DocumentViewer ile XPS Dosyalarının Görüntülemesi" Height="320" Width="600">

    <Grid>

        <DocumentViewer Name="documentViewer1" />

    </Grid>

</Window>

Window1.xaml.cs

...

using System.Windows.Xps.Packaging; //Gerekli isim alanı

namespace WpfDocumentViewerXps

{

    public partial class Window1 : Window

    {

        public Window1()

        {

            InitializeComponent();

        }

 

        private void Window_Loaded(object sender, RoutedEventArgs e)

        {

            //XpsDocument nesnesi belirtilen yoldaki dosya içeriğini

            //GetFixedDocumentSequence metodu ile kontrolümüze sunacaktır

            XpsDocument xps = new XpsDocument(@"D:\test.xps", System.IO.FileAccess.Read);

            documentViewer1.Document = xps.GetFixedDocumentSequence();

        }

    }

}

DocumentViewer ile XPS dokümanını görüntüledik
DocumentView'da görüntülenen XPS dokümanı

14 Aralık 2008

Widgetlar ile nedirtv?com İçeriklerini Websitenizde Yayınlayın

nedirtv?com Widgetnedirtv'nin 2.0 versiyonu üzerinde çalışmalarımız devam ederken sizlere önemli yeniliklerimizden birini tanıtmak istedim: nedirtv?com Widget. Basit olarak belirli bir nedirtv içeriğini websitenizde, blog sitenizde yayınlayabilmenizi amaçladığımız bu eklenti aslında benim blogumda uzun zamandır da yayında(Sağ kısımda görebilirsiniz). Şimdilik kategori ve editör seçeneklerinde oluşturulabilen widgetlar ile seçilen kategoriye veya editöre ait son videolar listesini sitenizde yayınlayabilirsiniz. Editör seçeneğinin daha ziyade editörlere hitap ettiğini düşünecek olursak, aslında ziyaretçilerinize sunmak istediğiniz kategoriye göre widget'lar oluşturmak dikkatinizi çekecektir diye tahmin ediyorum. Gelelim widget'ı sitenize nasıl ekleyeceğinize;

- Widget sayfasından istediğiniz kategoriyi veya editörü seçin ve ardından Widget Oluştur butonuna tıklayın.

- Oluşan widgetın önizlemesini sayfanın sağ kısmında görebilirsiniz. Kaynak Kod kutusunda yer alan kodları sitenizde görüntülenmesini istediğiniz yere ekleyin. Bu kadar :)

nedirtv'yi izlemeye devam edin :)

11 Aralık 2008

Veri Kaynağı Olan DropDownList'e Item Ekleme

DropDownList kontrolüne veritabanından getirilen kayıtları yüklememiz durumunda çoğu zaman ilk seçeneğin kullanıcıyı bilgilendirecek bir metin olmasını isteriz. "Bir şehir seçin", "Bir kategori seçin"... gibi bir seçeneğin ilk item olması, devamında da veritabanından gelen item'ların sıralanması eminim ki her uygulamada ihtiyaç olan bir durumdur. Tabi ki veritabanındaki Sehirler tablosunda "Bir şehir seçin" diye bir kayıt eklemek mantıklı olmayacağına göre farklı bir çözüm yolu üretmek gerekli! Sorunu SQL Server tarafında çözmek istersek UNION ifadesi kullanılabilir. Fakat bu yazımda biraz daha farklı bir yoldan bahsetmek istiyorum.

Yapacağımız işlem son derece basit ve kullanışlı bir çözüm yolu olacak. İlk olarak bilgilendirme metnini DropDownList kontrolüne görsel kısımdan ListItem olarak ekliyoruz. Items koleksiyonuna bilgilendirme metnini ekliyoruz. Ardından DropDownList'in AppendDataBoundItems özelliğini true olarak değiştiriyoruz. Eklediğimiz seçenek artık DropDownList kontrolüne item olarak eklenecektir.

<asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="True"

    DataSourceID="SqlDataSource1" DataTextField="SehirAdi" DataValueField="SehirId">

    <asp:ListItem Value="-1">Bir şehir seçin</asp:ListItem>

</asp:DropDownList>

AppendDataBoundItems

UNION, UNION ALL ifadelerine alternatif olacak, aklınızda bulunması gereken bir ipucu...

07 Aralık 2008

İstanbul Kültür Üniversitesi'ndeydim

4 Aralık 2008 Perşembe günü İstanbul Kültür Üniversitesi'nde ASP.NET 3.5 ve LINQ seminerini gerçekleştirdim. Bugüne kadar ki en şanssız seminerimdi diyebilirim bu etkinlik için, zira dizüstü bilgisayarımdan kaynaklanan bir problemden dolayı etkinliği maalesef saat 10.00 yerine 12.00'da başlatmak zorunda kaldık. 2 saatlik bir gecikme elbetteki kulağa hoş gelmiyor ama Visual Studio 2008 ve SQL Server 2005 kurulu bir bilgisayarı bulmak bize yaklaşık 2 saate maloldu :) 2 saat boyunca bizleri sabırla bekleyen katılımcılara buradan tekrar teşekkür etmek istiyorum.

İyisiyle kötüsüyle ilginç bir etkinlik olarak anılarımda yer aldı İstanbul Kültür Üniversitesi semineri. Etkinlikte kullandığım sunum dosyasına ve örnek projeye aşağıdaki linklerden ulaşabilirsiniz.

Proje
ASP.NET 3.5 ve LINQ Sunum

İstanbul Kültür Üniversitesi - ASP.NET 3.5 ve LINQ Seminerinden... 
İstanbul Kültür Üniversitesi seminerinden bir kare

03 Aralık 2008

Gebze Yüksek Teknoloji Enstitüsü'ndeydim

Dün Gençsen Geleceksin 2.0 etkinliği dahilinde Gebze Yüksek Teknoloji Enstitüsü'ndeydim. Katılımcı arkadaşlarla iki saate yakın süre içerisinde Microsoft'un gelecek yazılım teknolojileri ve bu teknolojilerin oluşturacağı iş fırsatları üzerine konuşmalar gerçekleştirdim. Sınav dönemi olmasına rağmen üniversite öğrencilerinin yüksek katılım gösterdiği etkinlikte, öğrenciler açısından gelecekteki yazılım teknolojileri hakkında olumlu ve faydalı izlenimler bıraktığımı düşünüyorum.

_MG_2149
Etkinlik sonrası günün hatırası olarak çekildiğimiz bir resim.

Etkinlikte emeği geçen ve organizasyonda bizlere yardımcı olan MSP Ö.Faruk Özdemir'e ve GYTE IEEE Öğrenci Kolu'na teşekkürlerimi sunuyorum. Etkinlikle ilgili Facebook fotoğraf albümüne bu link üzerinden erişebilirsiniz.

02 Aralık 2008

ASP.NET 3.5 Chart Kontrolü - Kurulum ve İlk Grafik Raporumuz

Veritabanında saklanılan kayıtlarla web sitelerimizde raporlama yaparken grafiksel tablolar oluşturmak en önemli ihtiyaçlarımızdan birisidir. ASP.NET uygulamalarında bu tip ihtiyaçları gidermek için GDI+ nesnelerini kullanabileceğimiz gibi üçüncü parti kontrollerden de faydalanabiliriz. GDI+ nesnelerinin kullanımının zorluğu ve oluşturacağımız şekillerin çokta göze hoş gelmeyeceğini söylemeye gerek yok sanırım. Üçüncü parti kontrollerinde ücretli olması, ücretsiz dağıtılanlarında çok kullanışlı olmaması bizleri bugüne kadar çok zengin olmayan grafik tablolarla çalışmak zorunda bırakmıştır. Microsoft'un geçtiğimiz günlerde kullanıma açtığı Chart adındaki kontrol ile herhangi bir üçüncü parti kontrole veya GDI+ nesnelerine gerek kalmadan çok hızlı şekilde mükemmel grafik tablolar üretebilmekteyiz. Bu yazımızda Chart kontrolünün kurulumunu ve bu kontrol ile temel bir grafik tablosunun nasıl oluşturulabileceğini inceleyeceğiz. Aşağıdaki Chart kontrolüyle hazırlanmış birkaç grafik tablo sanırım bizleri ne tarz grafikler oluşturabileceğimiz konusunda heyecanlandıracaktır!

ASP.NET 3.5 - Chart kontrolünün kullanımına örnekler
Resim: ASP.NET 3.5 Chart kontrolüyle hazırlanmış örnek grafik tablolar

Daha önceden Dundas isimli chart kontrolleri üreten firmanın hazırladığı kontrolleri inceleme fırsatınız olduysa aslında yukarıdaki grafikler size çokta yabancı gelmeyecektir. Zira geçtiğimiz yıllarda Microsoft'un yaptığı yatırımlar sonucunda Dundas grafiklerinin Microsoft uygulamalarında ücretsiz şekilde kullanılması planlanıyordu. Bu yazımızda inceleyeceğimiz Chart kontrolü bu çalışmaların sonucunda .NET Framework'ün yapısına katılıyor. Şu an için .NET Framework'ün 3.5 SP1 sürümü üzerinde çalışan bu kontrolün .NET Framework 4.0 ile artık mimariyle bütünleşik olması bekleniyor.

Gelelim kontrolü nasıl temin edip kullanabileceğimize. Yukarıdaki paragraftanda anlaşılacağı gibi Chart kontrolünü kullanan uygulamamız .NET Framework 3.5 SP1 üzerinde çalışıyor olmalı. Yine Visual Studio 2008'de bu kontrolü sorunsuz şekilde kullanmak için Visual Studio 2008 SP1'in de kurulu olması gerekiyor. Chart kontrolü .NET Framework 3.5 ile bütünleşik gelmediği için iki farklı dosyayı bilgisayarımıza indirmemiz ve kurmamız gerekecek. Bu dosyaları aşağıdaki linklerden indirebilirsiniz.

Microsoft Chart Kontrolü
Chart kontrolü için Visual Studio 2008 eklentisi

Yine bu linkten indireceğiniz örnek projeden Chart kontrolü kullanılarak hazırlanmış birçok grafiği inceleyebilirsiniz. Yukarıdaki dosyaların kurulumlarını yaptıktan sonra Visual Studio 2008 üzerinde geliştireceğimiz bir projede Chart kontrolünü inceleyebiliriz.

Öncelikli olarak Chart kontrolünün tıpkı DataList, GridView vb. veri kontrollerinde olduğu gibi DataSource nesneleriyle çalıştığını söyleyebiliriz. Yani veritabanından veya bir nesneden gelen verilerin bu kontrole DataSource özelliği üzerinden bağlanması gerekecektir. Veritabanından gelen kayıtların key-value çifti şeklinde iki kolona sahip olması grafik raporu oluşturmak için yeterli olacaktır(Mağaza-Satış miktarı, Öğrenci-Not ortalaması gibi). Bu ilk örneğimizde Northwind veritabanındaki Product tablosundan belirli bir kategoride yer alan ürünlerin fiyatlarını grafik tablo üzerinde çizmeye çalışalım. Gerekli bileşenleri kurduğumuzda Chart kontrolü Toolbox'ın Data kısmındaki kontrollerin içerisinde bulunacaktır. Bu kontrolü  formumuz üzerine sürükleyip bırakıyoruz.

HTML kodlarında görüleceği gibi Chart kontrolünün içerisinde Series ve ChartAreas adında iki alt elementi bulunmaktadır. Bu iki element aslında Chart kontrolü üzerinde yapılacak değişikliklerde en sık kullanacağımız kısımlardır. Bu elementlere aynı isimleriyle Chart kontrolünü seçip Properties penceresinden de erişebiliriz. Dilerseniz bu kontroller üzerinde işlemler yapmadan önce ilk olarak Chart kontrolünü veriye bağlayalım. Zira grafiğin bize sunacağı bilgiler bir veri kaynağından gelecektir. Bu işlem için sürükleyip bıraktığımız Chart kontrolünün sağ üst köşesindeki smart tag ikonundan açılan penceredeki Choose Data Source kutusundan New Data Source seçeneğine tıklıyor ve karşımıza çıkan pencereden bir veri kaynağına bağlanıyoruz. Burada SQL Server'da bulunan Northwind isimli veritabanının içerisindeki Products tablosu ile çalışıyor olacağız. Çalıştıracağımız sorgu SELECT ProductName, UnitPrice FROM Products WHERE CategoryID = 4 olacak.
 
Resim: SqlDataSource kontrolüyle Products tablosunda sorgunun oluşturulması

DataSource bağlama işlemi tabi ki grafiğin çizilmesi için yeterli olmayacaktır. Sonuç kümesinde getirilen hangi kolon kategori, hangi kolon değer taşıyan olacak, bunları da belirtmemiz gerekecektir. Chart kontrolümüzün Series özelliği görüntülenecek grafiğin biçimi, formatı ve görüntülenecek kolonlarla alakalı bilgieri saklamaktadır. Series koleksiyonu içerisindeki içerisindeki XValueMember özelliği X doğrusunda kullanılacak kolonu (sorgu sonucunda gelecek kolonlardan birisi), YValueMember özelliği ise Y doğrusunda kullanılacak kolonu saklar. X doğrultusunda ürün isimlerini, Y doğrultusunda da fiyatları grafik olarak çizdireceğimiz için XValueMember'a ProductName,  YValueMember'a da UnitPrice değerlerini atıyoruz. Tabi ki burada akla gelen bir diğer soru da farklı şekillerde grafikleri nasıl oluşturabileceğiz olacaktır. Yine Series özelliği içerisindeki ChartType özelliğinden de oluşturulacak grafiğin şekli seçilebilir. ChartType seçim kutusunda karşımıza çıkan bol miktardaki grafikler gerçektende ne kadar farklı grafik tabloları üretebileceğimzin bir göstergesi! Aşağıdaki resimlerde bu seçimlerin yapıldığı özellikleri görebilirsiniz.

Chart Series - Member Seçimi
Resim: XValueMember ve YValueMember özelliklerinden X ve Y doğrultusunda kullanılacak kolonların seçilmesi

Chart Series - Chart Tipi Seçimi  
Resim: ChartType özelliğinden grafik tipinin seçilmesi

Yapılan değişikliklerin ardından Chart ve SqlDataSource kontrolümüzün oluşturacağı HTML kodlarını aşağıdan görebilirsiniz. Kodlardan da görüldüğü gibi Chart kontrolüne bağlanacak data source kontrolü ve değiştirilecek birkaç özelliğin sonucunda görsel olarak oldukça hoş bir grafik tablosu elde edebiliriz. Sayfamızı çalıştırdığımızda aşağıdaki resimde görülen grafiği elde edebiliriz.

<asp:Chart ID="Chart1" runat="server" DataSourceID="SqlDataSource1" Width="450px" Height="450px">

    <Series>

        <asp:Series Name="Series1" XValueMember="ProductName" YValueMembers="UnitPrice"

            ChartType="Pie">

        </asp:Series>

    </Series>

    <ChartAreas>

        <asp:ChartArea Name="ChartArea1">

        </asp:ChartArea>

    </ChartAreas>

</asp:Chart>

 

<asp:SqlDataSource ID="SqlDataSource1" runat="server"

    ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"

    SelectCommand="SELECT [ProductName], [UnitPrice] FROM [Products] WHERE ([CategoryID] = @CategoryID)">

    <SelectParameters>

        <asp:Parameter DefaultValue="4" Name="CategoryID" Type="Int32" />

    </SelectParameters>

</asp:SqlDataSource>

Chart kontrolü ilk grafik tablosu
Resim: Oluşturduğumuz ilk chart tablomuz

29 Kasım 2008

ASP.NET Webinerleri: Membership, Role, Profile

Uzun bir aradan sonra yeniden webinerlerle karşınızdayım.

Önümüzdeki hafta içerisinde ASP.NET Membership, Role ve Profile konularında gerçekleştireceğim webinerlere bu konularla ilgilenen herkesi bekliyorum. Biliyorsunuz seminer webden olunca, kontenjan, ulaşım vb. problemlerimiz olmuyor, evden, okuldan veya işyerinden, kısacası internete bağlanabileceğiniz herhangi bir yerden bu etkinliklere katılabilirsiniz. Bir nedirtv?com ve INETA Türkiye etkinliği olan bu webinerlerle ilgili tüm detayları aşağıdan bulabilirsiniz.

Konu: ASP.NET Membership
İçerik: Membership API ile gelen kontroller, özel tipler, SQL Server'daki nesneler, konfigürasyon ayarları, Custom MembershipProvider yazımı gibi konuları inceleyeceğiz.
Zaman: 1 Aralık 2008 Pazartesi
Saat: 15:00 - 16:00
Katılım için adres: https://www.livemeeting.com/cc/usergroups/join?id=WQB485&role=attend

Konu: ASP.NET Role ve Profile
İçerik: Role ve Profile API ile gelen nesneler ve özel tiplerin kullanımı, programatik olarak yapılabilecek işlemler, rol tabanlı güvenlik işlemleri ve Web Site Administrator Tool'un kullanımını inceleyeceğiz.
Zaman: 5 Aralık 2008 Cuma
Saat: 15:00 - 16:00
Katılım için adres: https://www.livemeeting.com/cc/usergroups/join?id=B6Q6JZ&role=attend

Webinerlerin sonunda sizlerden bu konularla ilgili gelen soruları da cevaplandıyor olacağım. Görüşmek dileğiyle...

Gençsen Geleceksin 2.0 - Gebze Yüksek Teknoloji Enstitüsü

Bir başka Gençsen Geleceksin 2.0 etkinliğinde 2 Aralık 2008 Salı günü saat 12:30'da Gebze Yüksek Teknoloji Enstitüsü(GYTE)'nde seminer veriyor olacağım. Microsoft'un Surface, Azure, XNA Studio, Silverlight gibi günümüz ve gelecek nesil teknolojilerinden ve bu teknolojilerin getireceği iş fırsatlarından bahsedeceğim bu seminere tüm GYTE öğrencilerini bekliyorum.

25 Kasım 2008

Microsoft Web Platform Installer: Geliştiriciler için Kolay Kurulum Sihirbazı

Microsoft'un son zamanlarda üzerinde çalıştığı uygulamalardan bir tanesi de Microsoft Web Platform Installer. Bu uygulama sadece ASP.NET yazılım geliştiricileri için değil Windows platformları üzerinde PHP uygulamaları çalıştıracak geliştiriciler için de gerekli bileşenlerin işletim sistemine kurulmasını sağlıyor. .NET Framework 3.5 Service Pack 1, ASP.NET MVC Beta, PHP için SQL Server Driver'ları, Visual Web Developer 2008 Express Edition, Visual Studio için SilverLight araçları, SQL Express 2008, IIS 7.0 yönetim araçları gibi birçok bileşeni tek bir uygulama üzerinden kurulabilmesi gerçekten biz geliştiricilerin kurulum dertlerini ortadan kaldırıyor. Özellikle işletim sistemini kurduktan sonra sağdan soldan bulduğumuz, indirdiğimiz dosyaları kurmak derdiyle uğraşmadan derli toplu bir kurulum yapma işini artık bu uygulamaya bırakabiliriz.

Windows Web Platform Installer SetupKurulum ekranında karşınıza çıkan Complete seçeneği standart olarak ihtiyaç duyulan tüm araçların kurulumunu, ASP.NET Developer seçeneği sadece ASP.NET programcılarının ihtiyacı olabilecek bileşenleri, Your Choice seçeneği ise tamamen kendi ihtiyacınıza göre gerekli bileşenleri kurmamızı sağlıyor. Başlangıçta 60 Kb'lık küçük bir dosyayı bilgisayarınıza indirmek yeterli. Seçimlerinize göre gerekli bileşenleri kurulum esnasından bilgisayarınıza yükleyerek kurulumum tamamlayacaktır. Uygulamanın Windows XP ve sonrasında çıkan tüm Windows işletim sistemlerine kurulabileceğini de belirtmek lazım.

Uygulamayı bilgisayarınıza indirmek için bu linki kullanabilirsiniz.

20 Kasım 2008

.NET Framework 4.0 ve Visual Studio 2010 CTP

.NET Framework'ün Yeni Logosu Geçtiğimiz haftalarda gerçekleşen PDC 2008 etkinliğinde Microsoft önümüzdeki yıl resmi olarak duyurmayı planladığı .NET Framework 4.0'ın ve Visual Studio 2010'un CTP(Community Technology Preview) sürümlerini duyurdu. Yazılım geliştiriciler için her zamanki gibi önemli yeniliklerin geleceği bu sürümleri şimdiden tanımak ve incelemek için aşağıdaki linkten detaylı bilgileri elde edebilir ve gerekli kurulumları bilgisayarınıza yükleyebilirsiniz.

Visual Studio 2010 ve .NET Framework 4.0 Community Technology Preview

13 Kasım 2008

Gençsen Geleceksin 2.0 - İstanbul Teknik Üniversitesi

Gençsen Geleceksin Etkinliği - 18 Kasım 2008, İTÜ Maçka YerleşkesiMicrosoft ve Turkcell'in bu yıl ikinci kez düzenlediği "Gençsen Geleceksin" etkinlikleri tüm hızıyla devam ediyor. Türkiye'nin dört bir yanındaki üniversitelerde öğrencilerle buluştuğumuz bu etkinliklerde gelecek yıllarda gerçekleşecek teknolojik gelişmelerden, yazılımın, internetin ve mobil teknolojilerin ne doğrultuda gelişeceğinden bahsedeceğiz. Eminim ki gelecek adına birçok üniversite öğrencisinin ufkunu açacak bir içeriği sunuyor olacağız.

Bu etkinlikler çerçevesinde ben de 18 Kasım 2008 Salı günü saat 17:00'da İstanbul Teknik Üniversitesi Maçka Kampüsünde sizlerle birlikte olacağım. Etkinliğin içeriğini ve diğer üniversitelerdeki programa erişmek için www.gencsengeleceksin.com adresine göz atabilirsiniz.

Bu arada unutmadan; etkinliğin sonunda yapılacak çekilişte 1 kişi hediye olarak Turkcell PDA cep bilgisayarı kazanacak :)

PPT ve SWF Dosyaları ile Çalışan SilverLight Örnekleri

Değerli hocam M.Yaşar ÖZDEN'in yaptığı çalışmaları sergilediği BÖTEBOnline isimli video portalını daha önceden incelemediyseniz ziyaret etmenizi tavsiye ederim. Bizim interneti sadece MIRC kanallarında chat yapmaktan ibaret bildiğimiz zamanlarda, Türkiye'nin internetten ilk canlı radyo ve televizyon yayınlarını yapan bu sitede şimdilerde Webcast'ler ve SilverLight ile hazırlanmış medya örneklerini bulabilmeniz mümkün. Yaşar Hoca'mın son zamanlarda hazırladığı SilverLight'ın PowerPoint sunumlarıyla(.ppt) ve Flash nesneleriyle(.swf) çalışması ilgili örnekleri gerçekten dikkat çekici.

Bu linkten SilverLight ile yapılmış örnekleri inceleyebilirsiniz.

30 Ekim 2008

.NET Framework 4.0 Posteri

Birden geçtiğimiz sene bu zamanlarda bloglarımızda ardı ardına yayınlanan poster başlıkları geldi aklıma. PDC 2008 etkinliğinde önümüzdeki aylarda ve yıllarda bizi bekleyen bir çok yenilik duyuruldu ve duyurulmaya da devam ediliyor. Yazılım dünyasını en çok heyecanlandıran yenilikler tabi ki .NET Framework 4.0 ve Visual Studio 2010. .NET Framework 4.0 ile mimariye katılması beklenen namespace ve tiplerin bulunduğu bir poster az önce RSS Reader'ıma düştü ve hemen paylaşayım dedim.

.NET Framework 4.0 - Namespace ve Tipler

Aşağıdaki linklerden .NET Framework 4.0 posterlerine erişebilirsiniz:

.NET Framework 4.0 Poster-PDF
.NET Framework 4.0 Poster-DeepZoom

29 Ekim 2008

INETA Capital Hit'in Ardından

Blogspot'un kapatılmasından dolayı son günlerde bloguma yazmaktan ziyade blogumu kendi domain'ime taşıma işlemleriyle uğraşıyorum. Ama bu aralıkta Ineta Capital Hit'in bıraktığı izlenimleri yazmazsam da olmaz. Geçtiğimiz hafta Ankara'da dolu dolu iki gün geçirdik bilişimi ve yazılımı seven insanlarla. Etkinlikte anlatılanlar, panel, etkinlik arasında katılımcılarla yaptığımız konuşmalar gerçekten görmeye, izlemeye dinlemeye değerdi. Fakat herşeyden ötesi Ankara'ya giderken minibüste yaşadığımız filmlik serüvenler tek kelimeyle mükemmeldi. Tüm INETA ekibine, minibüs şoförümüze ve muavinlerimize teşekkür ediyorum bu yolculuk için:)
Etkinlikten bir hatıra fotoğrafı ve etkinliğimizi kısaca özetleyen süper bir videoyu aşağıda bulabilirsiniz.

20 Ekim 2008

ASP.NET MVC Framework Beta Duyuruldu

ASP.NET MVC ürün olma yolunda en önemli adımlardan birini gerçekleştirdi ve beta versiyonuyla piyasaya sürüldü. Özellikle veritabanı işlemlerinin yoğun şekilde yapıldığı orta ve büyük çaplı projelerde kullanılabilecek olan bu yapı önümüzdeki aylarda 1.0 sürümüyle artık resmen ASP.NET geliştiricilerinin kullanımına hazır olacak. Tabi ki ASP.NET MVC'nin tam anlamıyla stabil hale gelmesi için .NET Framework 4.0'ı beklemek gerekebilir.

Benim gözüme çarpan ilk yenilikler Visual Studio tarafına baktığımızda kod yazımını hızlandıracak bazı yeniliklerin gelmesi ve artık proje şablonuna eklenen Scripts klasörüne ASP.NET AJAX, jQuery gibi JavaScript kütüphanelerinin ekli olarak gelmesi. Yanılmıyorsam jQuery de resmi olarak ilk defa bir Microsoft ürünüyle ile birlikte anılmaya başlandı. (Ki gelecekte daha da fazla anılacak emin olabilirsiniz)

ASP.NET MVC Beta'yı bilgisayarınıza kurmak için bu linki
ASP.NET MVC ile ilgili detaylı bilgilere erişmek için http://www.asp.net/mvc linkini kullanabilirsiniz.

14 Ekim 2008

nedirtv v2.0 Beta Yayınına Başladı

nedirtvUzun süren çalışmalarımız sonucunda nedirtv?com'un yeni versiyonu test yayınlarına başladı. Yayın hayatına 2006 yılında başlayan, fakat gerek sunucudan kaynaklanan, gerekse altyapısındaki sorunlar nedeniyle tam istenilen şekilde işlemeyen nedirtv'nin artık daha sağlıklı ve kullanılabilir bir hale geldiğini söyleyebilirim. Ajax dışında tüm Web 2.0 nimetlerini kullandığımız bu arayüzün gerek tasarım gerekse işleyiş açısından çok daha kullanışlı olacağını düşünüyorum.

Gelişen editör ekibimiz ile yakında çok daha önemli gelişmelerle karşınızda olacağız. nedirtv v2.0 beta'yı http://www.nedirtv.com/ adresinden inceleyebilirsiniz. Beta aşamasında olduğu için elbetteki sorunlar ve eksiklikler mevcut. Sitede karşılaştığınız sorunlar olursa veya eleştirileriniz olursa üst kısımdaki Sorun Bildir linkinden bizleri haberdar edebilirsiniz.

Çok yakında nedirtv v2.0'ın release olmuş versiyonuyla sizlerde birlikte olmak dileğiyle...

Not: Bu projenin geliştirilmesinde çok büyük emeği geçen sevgili Serkan PEKTAŞ'a teşekkürlerimi bir de blogum aracılığıyla göndermek istiyorum.

09 Ekim 2008

İstanbul Ticaret Üniversitesi Bilişim Günleri Etkinliğinde Konuşmacıyım

İstanbul Ticaret Üniversitesi - Teknoloji Günleriİstanbul Ticaret Üniversitesi'nin bu yıl ilk kez düzenleyeceği Bilişim Günleri etkinliğinde ASP.NET Uygulamalarında LINQ başlıklı oturumda konuşmacı olarak yer alacağım. 17-18 Ekim 2008 tarihlerinde gerçekleşecek ve sektörümüzden önemli isimlerin yer alacağı bu etkinlikte değerli iş arkadaşlarım Bülent Sözge ve Burak Batur'unda sunumları gerçekleşecek. Bu önemli etkinliği kaçırmamanızı tavsiye ediyorum.

Aşağıda etkinlikte yer alan bazı oturumların bilgilerini bulabilirsiniz.


17 Ekim 2008 Cuma
15:15-16:15
ASP.NET Uygulamalarında LINQ (Uğur UMUTLUOĞLU)

18 Ekim 2008 Cumartesi
13:30-14:30
SQL Server 2008 (Bülent SÖZGE)

16:00-17:00
What is SharePoint? (Burak BATUR)

08 Ekim 2008

Mono 2.0 Resmen Duyuruldu

mono20_banner .NET Framework'ün platformdan bağımsızlığı adına oldukça önemli bir haber aslında bu. Zira Mono 2.0'ın resmi olarak duyuruldu, hem de sadece Linux işletim sistemleri için değil, Mac işletim sistemleri içinde! Evet yanlış duymadınız, .NET Framework uygulamaları artık Mono kurulu Linux ve Mac işletim sistemlerinde çalıştırılabilecek. Ayrıca Mono projesinin internet sitesinde yaptığım araştırmalarda Mono'nun IPhone üzerinde de çalıştırılabileceğine dair ibarelerde buldum ama net açıklama gözüme çarpmadığı için bu konuda kesin birşey söylemek doğru olmayabilir.

Projenin bu denli genişlemesinde elbetteki geçtiğimiz aylarda Microsoft ve Novell'in bazı konularda ortaklaşa çalışma kararı almalarının etkisi oldukça büyük. Zira Mono 2.0 projesi Novell'in desteğiyle geliştirilerek release olmuş durumda.

Mono kullanmayan birisi olarak sadece bu haberi sizlere duyurmak istedim. Test etme şansını bulanlar olursa bilgi ve tecrübelerini bizlerle paylaşmayı sakın unutmasınlar. Detaylı bilgi ve gerekli yüklemeler için Mono projesinin resmi web sitesini ziyaret edebilirsiniz.

05 Ekim 2008

INETA Capital Hit

Geçtiğimiz aylarda gerçekleştirdiğimiz ve yazın en sıcak günlerine rağmen yoğun ilgi alan INETA Summer Hit'in ardından bu kezde INETA Capital Hit ile Anadolu yollarındayız. INETA Türkiye olarak değişen içeriğimizle yine önemli konularındaki bilgi ve tecrübelerimizi 18-19 Ekim 2008 tarihlerinde Çankaya Üniversitesi'nde Ankara'daki katılımcılarla paylaşıyor olacağız. Sektörümüzde sezon başlangıcı olarak kabul edilen şu anki zaman diliminde sanırım ülkemiz adına muthiş bir etkinlikle bu sezonu açıyor olacağız :)

Silverlight 2.0, IIS 7.0, LINQ, WPF, Expression Blend, WCF, Internet Explorer 8.0 ve ADO.NET Data Services gibi oturumların gerçekleştirileceği etkinlikte ben yine LINQ sunumumla yer alacağım. Bu önemli etkinliğe yolu Ankara'ya düşen tüm yazılımcıları bekliyoruz. Kayıt işlemi için bu linki kullanabilirsiniz.

Ineta Capital Hit

01 Ekim 2008

jQuery Artık Visual Studio ile Bütünleşik Hale Gelecek!

jQuery Artık Visual Studio ile Bütünleşik Hale Geliyor Microsoft web uygulama geliştiricileri için önemli bir haberin duyurusunu geçtiğimiz günlerde gerçekleştirdi. jQuery adı verilen ve özellikle JavaScript ile uygulama geliştiren web programcılarının yakından tanıdığı ücretsiz JavaScript kod kütüphanesinin artık Visual Studio'nun bir parçası haline getirileceği ve ASP.NET programcılarının bu aracı çok daha kolay şekilde kullanabileceğini belirtti. Bu haberlere göre jQuery artık Visual Studio'nun bir parçası olacak, gerek uygulamalara entegre edilmesi, gerek intelli-sense penceresindeki yazım desteği, gerekse dokümantasyonu açısından tam desteklenir hale gelecek.

Aslında bu gelişmeye çokta şaşırdığımı söyleyemeyeceğim. Zira web dünyasındaki gelişmeleri yakından takip edenler jQuery kullanımının özellikle son aylarda çığ gibi büyüdüğünü, artık jQuery fanlarının dahi oluştuğunu görmüşlerdir. Bundan yaklaşık 2.5 ay önce yazdığım bir yazımda da ilerleyen zamanlarda ASP.NET AJAX'ın jQuery'den etkilenerek daha da gelişeceğini belirtmiştim. Artık jQuery tamamen yapıyla bütünleşerek ASP.NET AJAX'ı çok daha kullanılır hale getirecektir.

Peki nedir jQuery?

jQuery bir JavaScript kod kütüphanesidir. Ama öyle sıradan bir kütüphane değil, logodaki "write less, do more" yani "daha az yaz, daha fazla iş yap" sloganını hakkıyla yerine getiren bir kütüphane! Yapısını ve örneklerini incelediğinizde tek bir satırlık kod ile bile HTML kodlarınıza hükmedebileceğinizi, dinamik olarak istemci tarafında JavaScript ile ilgili bir çok işlemi kolayca yapabilmenizi sağlayan bir araçtır. Yapısındaki nesneler aracılığıyla çok basit şekilde zor işleri yapabilmenizi, grafiksel olarak sayfalarınıza efektler uygulayabilmenizi, yine basit şekilde sayfanızı AJAX destekli şekilde çalıştırabilmenizi sağlayan bu kütüphaneyi ASP.NET ile birleştirdiğimizde karşımıza şöyle bir sonuç çıkacaktır: ASP.NET sunucu tarafında yapacağımız bir çok işlemi basite indirgemiş ve kolay yapılabilir hale getirmişti. ASP.NET AJAX ve jQuery de istemci tarafında yapacağımız işlemleri çok daha pratik şekilde yapabilmemizi sağlayacaktır.

jQuery son yıllarda popüler hale gelen, hızlı ve az kod yazarak istemci tarafında işlemleri kolaylaştıran JavaScript kod kütüphaneleri furyasının en sevilen, en kullanılan ürünü olarak son bir yıl içerisinde adını oldukça duyurdu. Çok küçük boyutlu olmasına rağmen(15 Kb.) boyundan büyük işleri başarabilen bu kütüphane AJAX'ın hayatımıza fazlasıyla girmesinden sonra bu denli büyüdü ve artık ciddi bir marka haline geldi.

Özellikle uygulamalarında JavaScript ve AJAX kullanan arkadaşlara tavsiyem jQuery'nin resmi web sitesini ziyaret etmeniz ve Documentation ile Tutorials bölümlerini incelemeniz. Tabi ki bilgisayarınıza jQuery'i indirip ASP.NET uygulamalarınızda test etmeyi de unutmamak lazım:) Önümüzdeki günlerde fırsat bulursam jQuery ile ilgili yazılara blogumda daha sık yer vermeye çalışacağım.

25 Eylül 2008

Netron Techweek'deki Sunumlarım ve Örnek Kodlar

Bu hafta içerisinde gerçekleşen ve benimde iki oturumda konuşmacı olarak yer aldığım Netron Techweek her sene olduğu gibi sektördeki önemli gelişmeleri takip edebilmek adına herkes için güzel bir etkinlik oldu. Özellikle ASP.NET MVC Framework oturumumda, hala gelişme aşamasında olan ve henüz tam bir ürün kimliğine bürünmemiş bir yapının bile katılanların ciddi anlamda ilgisini çekmesi ve olumlu tepkiler alması, ilerleyen günlerde MVC uygulamalarındaki artacak eğilimin bir işaretiydi. LINQ'in büyüleyici ortamının özellikle bu ortamı yeni tanıyanlarda bıraktığı izlenimler hakkında yorum dahi yapmama gerek yoktur diye düşünüyorum :)

Aşağıdaki linklerde gerçekleştirdiğim sunumları ve örnek kod dosyalarını bulabilirsiniz.

ASP.NET MVC Framework - Sunum Dosyası
ASP.NET MVC Framework - Örnek Kodlar

LINQ Overview - Sunum Dosyası
LINQ Overview - Örnek Kodlar

16 Eylül 2008

Netron Techweek Etkinliğinde Konuşmacıyım

Netron Techweek Geleneksel hale gelen ve bilişim sektörünün en önemli etkinliklerinden olan Netron Techweek (Teknoloji Haftası) bu yıl 22-26 Eylül tarihleri arasında Netron Altunizade Genel Merkezi'nde gerçekleşecek. Infrastructure ve Development kategorilerinde yirminin üzerinde oturumun olacağı bu beş günlük etkinlikte benim de iki farklı konuda sunumlarım gerçekleşecek.

Gerçekleştireceğim sunum konuları ve zaman bilgilerini aşağıda bulabilirsiniz. Yine etkinlik ile ilgili detaylı bilgilere ve kayıt formuna erişmek için aşağıdaki linkleri kullanabilirsiniz. Bu önemli etkinliği kaçırmamanızı tavsiye ediyorum.

Konuşmacı olduğum oturumlar:

Konu Zaman
ASP.NET MVC Framework 23 Eylül 2008 Salı / 14:30-16:30
LINQ Overview 24 Eylül 2008 Çarşamba / 14:30-16:30

Etkinlik Takvimi
Kayıt Formu

09 Eylül 2008

LINQ to SQL'de Insert, Update ve Delete İşlemleri

LINQ to SQL ile Insert,Update,Delete İşlemleriBildiğiniz gibi LINQ adını verdiğimiz dile entegre sorgularla artık .NET ortamında koleksiyon tabanlı nesneleri sorgulayabiliyoruz. Buradaki sorgulamaların temel amacı normalde foreach döngüleri, if-else kontrol yapılarıyla yapabildiğimiz uzun ve karmaşık işlemleri tıpkı T-SQL'de olduğu gibi sade Select sorguları yazarak daha basit hale getirmektir. LINQ'in asıl çıkış noktası ise uygulama içerisinde büyük ve karmaşık olan veri nesnelerini (entity nesnelerini) kolay ve pratik şekilde sorgulanabilmesini sağlamak ve büyük çaplı projelerde yazılımcıların en büyük yüklerinden birisini hafifletmektir.

LINQ to SQL ile ilgili olarak en çok sorulan sorulardan birisi de Insert, Update ve Delete işlemlerinin nasıl gerçekleştirilebileceği. LINQ ifadelerinde Insert, Update ve Delete gibi anahtar kelimelerle sorgular yazılamadığını söylemeye gerek yok sanırım:) Dolayısıyla LINQ to SQL'de amaç veri nesneleriyle çalışmak ise bir şekilde bu tip işlemleri de gerçekleştirebilmek gerekecektir. LINQ to SQL Classes (.dbml) dosyaları veritabanında yer alan veri nesnelerini doğrudan uygulamamıza class'lar olarak aktarmamızı sağlamaktadır. Örneğin Northwind veritabanındaki Product tablosunu uygulamamızda veri class'ı olarak oluşturduğumuzda DataContext nesnesinin içerisindeki Products özelliği(property) Products tablosundaki ürünleri koleksiyon olarak döndürecektir. İşte bu property'nin bazı metotları bizim Insert, Update ve Delete gibi işlemleri gerçekleştirebilmemizi sağlayacaktır. Bu metotlardan;

- InsertOnSubmit, Insert işlemini
- DeleteOnSubmit, Delete işlemini

gerçekleştirebilmektedir. Peki Update işlemi nerede? Update işlemini ise LINQ sorgusu sonucundan gelen kayıt veya kayıtların değerlerini değiştirerek gerçekleştirebileceğiz. Buradaki her üç işleminde sonuçlarının veritabanına aktarılabilmesi için DataContext nesnesinin SubmitChanges isimli metodunun çalıştırılması yeterli olacaktır. Aşağıdaki kod parçalarında LINQ to SQL'de veri ekleme, silme ve güncelleme işlemlerinin nasıl yapılabileceği görülmektedir. Kodlarda yer alan northWind adındaki nesne DataContext nesnemizdir.

Product eklenecekUrun = new Product() { ProductName="Acer Aspire 5100", UnitPrice=1290, UnitsInStock=15, CategoryID=9 };
northWind.Products.InsertOnSubmit(eklenecekUrun); // Eklenecekler listesine yeni bir ürün eklendi

Product guncellenecekUrun = northWind.Products.First(u => u.ProductID == 69);
guncellenecekUrun.ProductName = "HP Pavilion 3355"; // Seçilen ürünün ProductName özelliği değiştirildi

Product silinecekUrun = northWind.Products.First(u => u.ProductID == 79);
northWind.Products.DeleteOnSubmit(silinecekUrun); // Seçilen ürünü silinecekler listesine at

northWind.SubmitChanges(); // Yukarıda yapılan güncellemeler veritabanına gönderildi

05 Eylül 2008

CLR SQL ile Hazırlanan Nesneyi Visual Studio'da Debug Etmek

SQL Server 2005 ve ADO.NET 2.0 ile gelen yeniliklerden sonra çoğunuzunda bildiği gibi .NET ortamında hazırladığınız nesneleri SQL Server sunucusu üzerinde CLR (Common Language Runtime) desteğiyle çalışmasını sağlayabiliyoruz. Oluşturulan bu nesnelerin IL çıktıları .dll'dir, dolayısıyla ilk bakışta nesneleri kodlama aşamasında nasıl debug işlemine tabi tutacağımız bizler için soru işareti olabilir. Bu başlıkta .NET tabanlı bir dilde yazdığımız CLR SQL kodlarımızın çalışmasını debug etmek, kodların takibini ve analizini yapmak için oluşturulan projede nasıl bir yol izleyeceğimizi anlatmaya çalışacağım.

Test.sql dosyasına eklenen SQL cümlesi"SQL Server Projects" şablonunu oluşturduğunuzda proje içerisinde Test Script adında bir klasör ve içerisinde örnek kodları içeren Test.sql adında bir dosya bulunmaktadır. Debug işlemi için öncelikli olarak nesneyi çalıştıracak bir SQL ifadesine ihtiyacımız olacaktır. Bu dosya SQL ifadesinin veya ifadelerinin saklanacağı yerdir. Nesneyi oluşturduktan sonra öncelikli olarak bu dosyaya nesneyi test etmemizi sağlayan SQL cümlesini ekliyoruz.

clrsql_debug_image3 Bu işlemin ardından Test.sql dosyasını projemizin varsayılan script dosyası olarak seçmemiz gerekiyor. Solution Explorer'da dosyanın üzerine sağ tıkladığımızda karşımıza çıkan Set as Default Debug Script seçeneğinden dosyayı varsayılan debug dosyası olarak belirliyoruz. İlgili seçenek sağ kısımda yer alan resimde görülmektedir.

Nesneyi oluşturduktan sonra debug işlemini başlatacağımız satıra breakpoint ekliyoruz. Bu işlemin ardından projemizi yayınlayıp IL çıktısını üretmemiz ve çalıştırmamız gerekecektir. Bu işlem için Solution Explorer'da projemizin üzerine sağ tıklayıp Deploy seçeneğini seçiyoruz.

Artık projeyi debug modunda çalıştırıp kodların adım adım takibini yapabiliriz. Bu işlem için yine Solution Explorer'dan az önce debug dosyası olarak ayarladığımız Test.sql dosyasına sağ tıklayıp Debug Script seçeneğine tıklıyoruz. Dosya içerisindeki sorgu çalıştırılacak ve derleyici seçtiğimiz satıra geldiğinde Visual Studio debug moda geçecektir.

clrsql_debug_image4

Bu şekilde bir CLR SQL nesnesini oluşturan kodların debug edilmesi sağlanabilir. Özellikle karmaşık User Defined Function, Stored Procedure ve Trigger oluşturduğumuz durumlarda nesneyi sürekli SQL Server'a taşımak, burada çalışma sonucuna göre tekrar Visual Studio'ya dönüp değişiklikleri yapmak uzun ve çözümü zor bir yol olabilir. İşte bu tip durumlarda nesnenin SQL Server'a gitmeden doğrudan CLR üzerinde çalışmasını debug edebilmek biz programcıların işini oldukça kolaylaştıracaktır.

06 Ağustos 2008

LINQ Sunumu ve Örnek Kodlar

Geçtiğimiz pazar günü INETA Summer Hit'in son gününde C# 3.0 ve LINQ sunumunu gerçekleştirdim. Sürenin az olması nedeniyle LINQ to SQL ve LINQ to XML konularını derinlemesine anlatma şansım olmadı ama güzel ve iyi izlenimler bırakan bir sunum gerçekleştirmişimdir diye umuyorum. Seminerde öyle bir kod arşivi üzerinden demolar gerçekleştirmişim ki; sadece bugün 4-5 farklı kişiden bu kodlara ulaşmak için mailler aldım :) Aşağıdaki linklerden etkinlikte kullandığım sunumu ve örnek kodları içeren demo dosyasını indirebilirsiniz.

LINQ Sunumu
LINQ Demolar

Ve etkinlikten kalan iki hatıra fotoğrafı...

ineta_summer_hit_cikis
ineta_summer_hit_sunum

Bu güzel etkinliği düzenleyen başta Daron Yöndem ile Ali Rıza Babaoğlan'a ve emeği geçen tüm arkadaşlara teşekkürlerimi buradan da sunmak isterim.

Not: Askerlik nedeniyle biraz uzak kaldığım yeni teknolojilere yeni yeni ısınmaya başlıyorum. Bundan sonra blogumda C# 3.0, LINQ, MVC ve WPF gibi konularda daha sık yazılar yazmaya çalışacağım. Beni takip etmeye devam edin...

26 Temmuz 2008

ASP.NET'te Gelecek WebForm'larında mı, Yoksa MVC'de mi?

WebForms vs. ASP.NET MVCSon yıllarda web programlama dünyasında yaygınlaşan MVC uygulama modeli yavaş yavaş ASP.NET uygulamalarında da yerini almaya başladı. .NET Framework ile birlikte web sitelerine getirilen Windows formlarının çalışma modeli giderek benimsenmiş ve web literatürüne oturmuşken birden çıkıveren MVC Framework kafalarımızda şu soruları da oluşturdu: Hangi modeli kullanmak daha avantajlı, hangisi daha verimli çalışır? Belki de en önemli soru "Gelecek hangisinde? WebForm'larında mı, yoksa MVC Framework'te mi?" Hatta benim kafamda oluşan önemli sorulardan birisi de "Acaba Microsoft gelecekte WebForm'larını bırakıp ASP.NET'te MVC modelini mi kullanabilir mi?" idi birkaç gün öncesine kadar...

Geçtiğimiz günlerde Joe Stagner'ın blogunda okuduğum bir haber aklımdaki bu soru işaretini biraz da olsun kaldırdı. Zira Joe Stagner yazısında WebForm'larının gelecekte de ASP.NET uygulamalarındaki ana platform olacağını, Microsoft'un bu strateji üzerinden ilerleyeceğini, fakat MVC Framework'ün de geliştiremeye devam edeceğinden bahsediyordu. Yani; gönül rahatlığıyla WebForm'ları üzerinde kontrolleri sürükleyip bırakıp, üzerine çift tıklayıp, olay tabanlı programlama yapmaya devam edebiliriz. Peki MVC bu noktada programlama anlayışımızın neresinde yer almalı?

Bu sorunun cevabını bulabilmek için öncelikle ASP.NET WebForm'larının ve ASP.NET MVC Framework'ün ne gibi özelliklere sahip olduğunu, avantaj ve dezavantajlarının neler olduğunu iyi çözümlemek gerekir. MVC Framework ASP.NET uygulamalarına şu anki anlayışa biraz aykırı gelebilecek, ASP'de olduğu gibi HTML ile içiçe ve daha fazla kod yazılmasını gerektiren, durum verisinin saklanmasını zorlaştıran, diğer yandan da programcının web sayfasına daha fazla hakim olmasını sağlayan, control-view mekanizmasını kendi istediği gibi geliştirebileceği ve arama motorlarının çok sevdiği az karmaşık URL'ler oluşturulmasını sağlayan bir uygulama modelidir. MVC Framework web programlama hayatımıza iyiden iyiye oturan olay tabanlı(event-driven) programlamadan, ViewState ve PostBack'ten uzak bir ortam sunuyor. Bu gelişme kimilerine göre çok olumlu iken, kimilerine ise "Aman benden uzak dursun" dedirtiyor. WebForm'ları bize o kadar rahat bir programlama ortamı sunuyor ki, MVC'ye geçiş biraz zor geliyor sanırım. Fakat MVC Framework'ün özellikle hız, performans, arama motorlarına tam uyumluluğun önemli olduğu, uzun soluklu kurumsal projelerde çok sık ihtiyaç olacağı da bir gerçek.

Konumuzun başlığına dönecek olursak; Gelecek WebForms da mı, yoksa MVC Framework'te mi, benim şahsi düşüncem gelecek dün olduğu gibi yine WebForm'larında(ki Microsoft'un dediklerini tercüme etmiş oluyorum), fakat MVC Framework önümüzdeki yıllarda iyi bir web programcısının mutlaka bilmesi gereken bir uygulama deseni olacaktır. Microsoft'un şu anki stratejisi ASP.NET WebForm'ların üzerinde gelişmeye ve zenginleşmeye devam edecektir, fakat MVC Framework'te programcılara ikinci bir seçenek olarak sunulacaktır.

22 Temmuz 2008

ASP.NET AJAX Roadmap ve ASP.NET AJAX 4.0 Preview 1

Geçtiğimiz günlerde CodePlex'te yayınlanan ASP.NET AJAX'ın yol haritasının ardından dün de ASP.NET AJAX 4.0'ın ilk önizleme sürümü duyuruldu. ASP.NET AJAX ekibinin önümüzdeki aylarda web uygulamalarında biraz daha istemci tabanlı çalışacak bileşenler geliştirme yolunda ilerlediğini söyleyebiliriz. İstemci tarafında çalışacak veri-veri kaynağı (data-data source) kontrolleri ile istemci tarafında içeriğin render edilmesi fikirleri Preview 1 sürümünde zaten gerçekleşen birkaç adım. Animasyon ve sürükle-bırak (drag-drop) özellikleri, yine ASP.NET MVC Framework için şu anda olmayan ASP.NET AJAX MVC desteği ilerleyen günlerde bizi bekleyen yeniliklerden sadece birkaç tanesi. Sanırım sonraki sürümlerde ASP.NET AJAX'ın biraz da JQuery'den etkilenerek bizleri daha da heyecanlandıracak yeniliklerle karşımıza gelmesi hiç birimizi şaşırtmayacaktır(En azından beni). Artık HTML kodları içerisine bol bol inline kod yazılacak AJAX uygulamaları bizi bekliyor diyebilirim.

ASP.NET AJAX yol haritası ve ASP.NET AJAX 4.0 Preview 1 ile ilgili dosya ve dökümanları aşağıdan, CodePlex sitesindeki linklerinden indirebilirsiniz. Yine aynı sayfa üzerinden proje ile yapılan yenilikleri takip edebilirsiniz.

ASP.NET AJAX Roadmap
ASP.NET AJAX 4.0 CodePlex Preview 1

17 Temmuz 2008

Yazılımcılar için Yaz Etklinliği: INETA Summet Hit

inetasummerhit

INETA Türkiye olarak güzel bir yaz etkinliği ile karşınızdayız. 2-3 Ağustos 2008 tarihlerinde Yıldız Teknik Üniversitesi Auditorium'da gerçekleşecek olan iki günlük etkinlikte birçok önemli konu ile ilgili seminerleri ve konuşmaları bulabileceksiniz. 3 Ağustos'ta 15:00-17:30 saatleri arasında benim de LINQ (Language Integrated Query) sunumumun olacağı bu etkinliğe ilgilenen herkesi bekliyoruz.

Etkinlikle ilgili bilgiler ve kayıt işlemi için bu linkten faydalanabilirsiniz.

10 Temmuz 2008

GridView'da Silme ve Güncelleme İşlemi Onayı

GridView kontrolünde silme ve güncelleme işlemleri yapılırken işlem tamamlanmadan önce kullanıcıdan onay alınmak istenilebilir. Özellikle silme işlemleri geri dönüşü olmayan sorunlara yol açabileceği için bu tip bir işlemi kazara bir butona basılarak yapılmasına izin vermemek son derece doğru olacaktır. GridView kontrolünde yapacağımız çok basit 2 değişiklik ile Update ve Delete işlemlerinin kullanıcıdan onay alarak gerçekleştirilmesini sağlayabiliriz.

İlk adımda Update ve Delete butonlarımızın bulunduğu CommandFieldTemplateField'a dönüştürmek gerekecektir. Böylece artık Update ile Delete butonlarına erişebilir, gerekli istemci olayına istediğimiz JavaScript kodunu ekleyebiliriz. GridView'in smart tag ikonundan Edit Columns linkine tıklayıp açılan pencereden CommanField kolonunu seçmeli ve sağ kısımda yer alan Properties penceresinin altındaki Convert this field into a TemplateField linkine tıklamalıyız. Böylece artık Update, Delete, Cancel gibi butonların kontrol tanımlamalarına sayfanın HTML kodlarından erişebileceğiz.

Gridview - Kolonu templatefielda çevirme

İkinci adımda ise gerekli butonun OnClientClick olayına ufak bir JavaScript kodu eklememiz gerekecektir. Böylece onay işleminde sunucuya gidilmeden, istemci tarafında yapılacak ve gereksiz bir postback işlemi de engellenmiş olacaktır. Aşağıda Delete butonuna tıklandığında kullanıcıdan onay alma işlemini gerçekleştirecek kod parçası yer almaktadır.

<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False"
CommandName="Edit" Text="Değiştir"></asp:LinkButton>&nbsp;
<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False"
CommandName="Delete" Text="Sil"
OnClientClick="return confirm('Silmek istediğinizden emin misiniz?');">
</asp:LinkButton>
</ItemTemplate>
Basit iki işlemin ardında gridview oldukça kullanışlı bir hale gelebiliyor. Sonuç aşağıdaki gibi...

Gridview - Silme işlemi için onay

20 Mayıs 2008

VS 2008 ile SQL Server 2005 Kurulumunda Problem ve Çözümü

Bugün bilgisayarıma Windows XP'yi yeniden kurdum. Visual Studio 2008 ve SQL Server 2005'in kurulumları sorunsuz bitti, fakat Management Studio ve SQL Profiler gibi araçların kurulmadığını görünce bu sorunun neden kaynaklandığını ve nasıl çözebileceğimi internetten biraz araştırdım. Sorun ve çözümü şöyle:

Sorun: Visual Studio 2008'i SQL Server 2005'ten önce kurduğunuzda SQL Server sunucu olarak bilgisayarınıza kurulmuş olsa da, beraberinde gelen bileşenlerin kurulumu gerçekleşmiyor.

Çözüm-1: Önce SQL Server 2005'i, ardından Visual Studio 2008'i kurun.

Çözüm-2: Çözüm-1'deki sıranın tersinde kurulum yaptıysanız; SQL Server kurulum CD'sinden Tools klasörünün altındaki setup.exe'yi Command Prompt'tan aşağıdaki parametreleri kullanarak çalıştırın. Açılan kurulum penceresinden de Client Components ve Documentation, Samples and... seçeneğinden gerekli bileşenleri seçerek güncelleme kurulumunu tamamlayın.
Command Prompt'ta yazılacak komut: start /wait setup.exe SKUUPGRADE=1

Gerekli bileşenler artık bilgisayarınıza kurulacaktır.

Not: Gerçekleştirdiğim kurulum Windows XP Professional işletim sistemi üzerinde Visual Studio 2008 Team System Edition ve SQL Server 20005 Developer Edition sürümleri ile yapıldı.

18 Mayıs 2008

Makaleler E-Kitabım

Yapımına askerde başladığım ve ancak bitirebildiğim, içerisinde bugüne kadar çeşitli sitelerde yayınlanan makalelerimin bulunduğu e-kitabı bu linkten bilgisayarınıza yükleyebilirsiniz. Başta ASP.NET ve ASP.NET AJAX konularında yazdığım makalelerden ve yaklaşık 160 sayfadan oluşan bu doküman umarım sizler için faydalı olur.

E-kitabımı zaman içerisinde yeni makalelerimle güncellemeye çalışacağım. Bu başlıktaki linkten veya www.umutluoglu.com adresinden güncel versiyonunu takip edebilirsiniz.

16 Mayıs 2008

Askerlik Görevim Sona Erdi

Askerlik maceram bugün sona erdi. Bu sabah 1.5 saatlik uçak yolculuğunun ardından Elazığ'a hoşçakal dedim ve İstanbul'a 5 ay 5 gün sonra ayak bastım. İnsanın tekrar sivil hayata dönmesi, ailesine, sevdiklerine (ve dizüstü bilgisayarına) kavuşması kelimelerle anlatalımayacak kadar güzel bir duygu!

Elazığ'da Jandarma Komando Taburu'nda başlayan askerliğimin usta birliğini 8.Kolordu Komutanlığı Askeri Mahkemesi'nde tamamladım. Oldukça güzel dostluklar edindiğim bu beş aylık maceramda sivil hayatta belki de 1-2 yılda göremeyeceğim tecrübeler edindim. 26 yaşında asker olsam da, askerliğin insanın olgunlaşma sürecinde oldukça önemli bir yeri olduğunu görmüş oldum.

Blogumdan da takip ettiğiniz üzere aslında bilgisayardan ve .NET dünyasından askerlikte de pek kopmadım. Görev yaptığım Askeri Mahkeme'ye boş zamanlarımda oldukça önemli bir uygulama geliştirme şansını buldum. .NET Framework 2.0 üzerinde çalışan Esas Defteri adındaki masaüstü bir uygulama ile artık Kolordu'daki tüm dava dosyaları bilgisayar ortamında saklanabiliyor. Gelişmiş arama, raporlama arayüzleri ve devir işlemleri arayüzleri ile hazırladığım bu uygulama uzun yıllar mahkememize hizmet edecektir diye düşünüyorum. Kullandığım Pentium-2 işlemcili makina beni biraz kısıtlasa da, birkaç makale ve birkaç blog postu askerlik günlerimde bilgi paylaşımı adına klavyemden çıkarabildiklerim oldu.

İyisi ile kötüsü ile bitti gitti askerliğim. Beş ay kadar önce yazdığım veda yazısında da dediğim gibi "kaldığımız yerden devam ediyoruz..."

11 Mayıs 2008

RenderControl Metodu ile Kontrolün HTML Çıktısını Üretmek

ASP.NET uygulamalarında kullandığımız tüm kontroller HTML çıktılara dönüştürülmekte ve sayfanın HTML kodları içerisine yerleştirilmektedir. Basit olarak bir Label kontrolü sunucuda çalıştırıldığında <span> elementine dönüştürülürken, GridView gibi karmaşık bir kontrol ise tablo (<table> elementi) ve tablo içerisindeki elementlere dönüştürülür. Web uygulamalarında kullandığımız tüm sunucu kontrolleri WebControl sınıfından, WebControl ise Control sınıftan türetilmektedir. Control sınıfında yer alan RenderControl metodu (virtual metot olduğu için türetilen sınıflarda override edilir) sunucuda oluşturulan kontrolün HTML çıktısını string olarak elde edebilmemizi sağlar. Control sınıfında yer alan bu metot dolayısıyla tüm sunucu kontrollerinin de sahip olduğu bir üyedir ve programatik olarak oluşturulacak bir sunucu kontrolünün RenderControl metodu ile HTML çıktısına ulaşılabilir.

"Neden bir kontrolün HTML çıktısını alayım ki?" gibi bir soru akla gelebilir. Nerelerde karşımıza çıkabilir bir kontrolün HTML çıktısını programatik olarak elde etmek? Aklıma gelen bir kaç noktayı hemen şöyle listeleyim:

- Substution Caching (sayfanın tümünü önbellekten okuyup sadece belirli bir alanı dinamik oluşturmak) işlemlerinde sunucuda çalışacak metodun içerisinde bir kontrolü oluşturmak ve metodun geri dönüş değeri olarak kontrolü döndürmek,
- AJAX uygulamalarında WebMethod'lar ile asenkron güncellemeler yapılacağı zaman yine sunucudaki metodun içerisinde bir kontrol oluşturmak ve metottan kontrolün HTML çıktısını geri göndermek,
- Kullanıcılara toplu mail gönderimi yapılacağı zaman veritabanından çekilen kayıtların oluşturacağı grid türevi kontrolün kodlarını mailin HTML içeriğine eklemek,
- Raporlama sistemlerinde farklı kriterlere göre oluşturulan sonuçların HTML çıktısının veritabanına kaydedilmesi ve daha sonradan tekrar takip edilebilmesi...

Biraz daha düşünüldüğünde farklı senaryolar da akla gelebilir. Zaten bu tip varsayımlar ilk başta akla gelmeyen, fakat uygulamanın geliştirme safhalarında karşımıza çıkabilen durumlardır. Bu yazım belki karşınıza çıkan bu tip bir duruma ilaç olabilir:) Gelelim RenderControl metodunun nasıl kullanılacağına. Senaryoyu karmaşık hale getirmeden basit şekilde inceleyelim. Sayfamızda bir Label kontrolü olsun ve sunucuda oluşturacağımız GridView kontrolünün HTML çıktısını alıp Label'a yazdıralım. Aşağıda sayfamızın kodları yer almaktadır.


...
using System.Collections.Generic;
using System.IO;

public partial class RenderControlKullan : System.Web.UI.Page
{
   protected void Page_Load(object sender, EventArgs e)
   {
      Dictionary<string, string> liste = new Dictionary<string, string>();
      liste.Add("Uğur Umutluoğlu", "http://umutluoglu.blogspot.com");
      liste.Add("Burak Batur", "www.burakbatur.com");
      liste.Add("Burak Selim Şenyurt", "www.bsenyurt.com");
      liste.Add("nedirTV?com", "www.nedirtv.com");
      liste.Add("Türk Aspx", "www.turkaspx.net");

      GridView gvSiteler = new GridView();
      gvSiteler.DataSource = liste;
      gvSiteler.DataBind();

      StringWriter sw = new StringWriter();
      HtmlTextWriter htw = new HtmlTextWriter(sw);
      gvSiteler.RenderControl(htw);
      lblGrid.Text = sw.ToString();
   }
}

Sayfa çalıştırıldığında lblGrid.Text = sw.ToString(); satırına bir break-point atalım ve sw'nin içerisinde neler varmış bir bakalım.

GridView nesnesi üretildikten sonra RenderControl metodu ile işlem gerçekleşiyor. RenderControl geriye herhangi bir değer dönen bir metot değildir (void); parametre olarak aldığı HtmlTextWriter tipinden nesneye kontrolün çıktısını aktarır. HtmlTextWriter'da InnerWriter özelliğindeki HTML elementlerini TextWriter ve türevi nesnelerden birine aktarır. Burada StringWriter en uygun tip. Performans açısından StringWriter'ı da bir StringBuilder'a aktarmak iyi bir yol olabilir ama işi uzatmadan kısaca sonuca gidelim. sw adındaki StringWriter nesnesinin çıktısını stringe dönüştürerek lblGrid adındaki kontrole değeri yazdırıyoruz. Aşağıdaki sayfamızın çıktısı görülmektedir.

13 Nisan 2008

SQL Sorgusuna Tablo Adını Parametre Olarak Aktarmak

Web uygulamalarında en çok saldırı alabileceğimiz yerler veritabanı üzerinde çalıştırdığımız SQL sorgularımızdır. SQL Injection adı verilen teknik ile kötü niyetli kullanıcılar arka planda çalıştırdığımız SQL sorgularına ek SQL cümleleri ekleyebilmekte ve yeri geldiğinde "DROP DATABASE ..." gibi bir sorgu ile tüm veritabanını bile silebilmektedir! Gerek SQL Server ortamında hazırladığımız stored procedure'larda, gerekse uygulama tarafında kullandığımız ADO.NET nesnelerinde parametre (parameter) kullanarak bu tip tehditlerden veritabanımızı koruyabilmekteyiz. Parametreler SQL cümlelerinde sadece sütunlarda aranacak değerleri taşıyabilmekte, tablo veya sütun isimlerini ise taşıyamamaktadır. "Select * From Haberler Where HaberID=@id" gibi bir SQL cümlesinde HaberID sütununda aranacak değer parametre olarak aktarılabilir. Peki SQL cümlesine tablo adını parametre olarak aktarmak gibi bir durumda nasıl bir yolu izleyebiliriz? Yani "Select * From @TabloIsim" gibi bir SQL cümlesi yazabilsek ve parametre olarak Haberler bilgisini yolladığımızda sorgumuz Haberler tablosundaki, Duyurular bilgisini yolladığımızda da Duyurular tablosundaki tüm verileri getirse...


Tablo adını parametre olarak aktarma şansımız sadece stored procedure kullanma durumunda bulunmaktadır. Tabi ki sp içerisinde standart bir cümle yazmak yerine ufak bir hile ile bu işlemi gerçekleştirebileceğiz. Eğer sp içinde SQL cümlemizi bir değişkende saklayıp, alınan parametre değerini cümlemize eklersek tablo adını cümlemiz içerisine aktarabiliriz. Tabi ki cümle bir değişkende saklandığı için sp içerisinde bu cümleyi çalıştırmak ta gerekecektir. Aşağıda tablo adını parametre olarak alan basit bir stored procedure görülmektedir.

CREATE PROC TabloKayitlar
@tablo_isim nvarchar(30)
AS
BEGIN
   DECLARE @sql_str nvarchar(50)
   SET @sql_str = 'Select * From ' + @tablo_isim
   EXEC(@sql_str)
END

08 Nisan 2008

Accordion Kontrolünde Veritabanı ile Çalışmak

Bir önceki yazımda Accordion kontrolünün CSS ile kullanımından bahsetmiştim. Accordion kontrolünün içeriğini statik içerikle HTML kodları ile oluşturabileceğimiz gibi dinamik verilerle de oluşturabiliriz. Bir XML dosyasından, veritabanından veya koleksiyon gibi nesnelerden alınan veriler bu kontrole kolaylıkla yüklenebilir. Bu yazımda Accordion kontrolünü veritabanından alınan verilerle nasıl besleyebileceğimize bakıyoruz.

Accordion kontrolünde dinamik veri ile çalışmak Repeater ve DataList gibi kontrolleriyle benzerlik göstermektedir. Eğer SqlDataSource, XmlDataSource gibi veri kaynakları ile çalışırsak sayfada bağlanacak veri kaynağını belirtmek yeterli olmayacak, HTML kısmından Eval veya Bind metotlarıyla veri yükleme işlemini de gerçekleştirmemiz gerekecektir. HTML koduna istediğimiz gibi müdahale edebildiğimiz için aslında olumlu bir durum olduğunu belirtmekte fayda var. Yine programatik yollarla DataTable, DataSet veya koleksiyon nesneleri ile Accordion kontrolünün çalışmasını sağlayabiliriz. Dilerseniz iki ayrı örnekte bu iki farklı yolu nasıl uygulayabileceğimizi görelim.

DataSource Kontrolleri ile Çalışmak
Veriyi en kolay şekilde bağlayacağımız bu yolda sayfamızdaki DataSource nesnesini Accordion kontrolünün DataSourceID özelliğinde belirlememiz gerekecektir. Accordion kontrolünün ise HeaderTemplate ve ContentTemplate kısımlarında yüklenecek verilerin başlık ve içerik bilgilerini Eval metodu ile bağlıyor olacağız. Access'te oluşturulmuş bir veritabanında saklanan haberlerin listeleneceği sayfada Accordion kontrolü ile çalışmak aşağıdaki kodlardan da görüleceği gibi oldukça kolay!

<ajaxToolkit:Accordion ID="accHaberler" runat="server" HeaderCssClass="baslik" HeaderSelectedCssClass="secilenBaslik" ContentCssClass="icerik" DataSourceID="dsHaberler" Width="460">
<HeaderTemplate>
<%#Eval("Baslik") %>
</HeaderTemplate>
<ContentTemplate>
<%#Eval("Icerik") %><br />
Eklendiği tarih: <%#Eval("Tarih") %>
</ContentTemplate>
</ajaxToolkit:Accordion>
<asp:AccessDataSource ID="dsHaberler" runat="server" DataFile="~/App_Data/Site.mdb" SelectCommand="SELECT [Baslik], [Icerik], [Tarih] FROM [Haberler] ORDER BY [Tarih] DESC"> </asp:AccessDataSource>

Template alanları içerisine açılmış ASP etiketleri ile veri yükleme işlemini gerçekleştiriyoruz. HTML kodlarını istediğimiz şekilde değiştirebilme kolaylığı belki de bu yolun en önemli avantajı.

DataTable vb. Nesneler ile Çalışmak
Bazı durumlarda ise Accordion kontrolüne DataTable gibi veri nesneleri ile veri yüklemek isteyebiliriz. Programatik yollarla yapacağımız bu işlemlerde HTML tarafında müdahale şansımız daha zor olsa da programın ve verilerin akışını istediğimiz gibi değiştirebilme şansına sahip olabiliyoruz. Bu yöntemde bir döngü içerisinde AccordionPane nesneleri oluşturarak AccordionPane'in HeaderContainer ve ContentContainer'larındaki Controls koleksiyonuna kontroller ekleyebiliriz. Sunucu tarafında performans açısından Label gibi bir kontrol yerine LiteralControl kullanmak iyi bir pratik olacaktır. Aşağıda böyle bir işlemi nasıl yapabileceğimiz görülmektedir. Sayfamızın HTML kısmına eklenmiş accHaberler adında bir Accordion kontrolünü daha önceden eklediğimizi hatırlatayım.

...
using System.Data.OleDb; // Access veritabanına bağlanmak için
using AjaxControlToolkit; // AccordionPane kontrolüne erişmek için

public partial class Haberler : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string yol = Server.MapPath("App_Data/Site.mdb");

OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OleDB.4.0; Data Source=" + yol);
OleDbDataAdapter daHaberler = new OleDbDataAdapter("Select Baslik, Icerik, Tarih From Haberler Order By Tarih Desc", con);
DataTable dtHaberler = new DataTable();
daHaberler.Fill(dtHaberler);
foreach (DataRow dr in dtHaberler.Rows)
{
AccordionPane paneHaber = new AccordionPane();
paneHaber.HeaderContainer.Controls.Add(
new LiteralControl(dr["Baslik"].ToString()));
paneHaber.ContentContainer.Controls.Add(
new LiteralControl(dr["Icerik"].ToString()));
paneHaber.ContentContainer.Controls.Add(
new LiteralControl("<br>"));
paneHaber.ContentContainer.Controls.Add(
new LiteralControl("Ekleme tarihi: " + dr["Tarih"].ToString()));
accHaberler.Panes.Add(paneHaber);
// Oluşan AccordionPane'i Accordion kontrolüne ekliyoruz.
}
}
}

Görüldüğü gibi bir foreach döngüsü içinde DataTable'ın her satırı bir AccordionPane kontrolünün içeriğini oluşturmakta ve AccordionPane kontrolü de Accordion'un Panes koleksiyonuna eklenmektedir. Sayfayı çalıştırdığımızda her iki örnektede veritabanından getirilen verilerin Accordion kontrolüne yüklendiğini görebiliriz. Kontrolümüzü hazırladığımız imajlar ve CSS ile kullandığımızda göze hoş gelen bir tasarım elde edebiliriz. Aşağıda Accordion kontrolünün son hali görülmektedir.

AJAX Control Toolkit - Accordion Kontrolünde Veritabanı ile Çalışmak

05 Nisan 2008

Accordion'un CSS ile Etkin Kullanımı

AJAX Control Toolkit ile gelen en kullanışlı kontrollerden birisi Accordion kontrolüdür. Web sayfalarının genellikle Sık Sorulan Sorular veya Yardım gibi bölümlerinde sıra sıra dizilmiş başlıklar bulunur ve kullanıcı hangi başlığa tıklarsa dinamik olarak o maddenin altındaki içerik görünür hale gelir. Diğer başlıkların içerikleri ise saklı durumda bulunur. Aslında uzun içeriklerin listeleneceği web sayfalarında hem kaplayacağı az alan açısından hem de görsel olarak sayfamızı daha kullanışlı hale getirecek bir kontrol Accordion. Başlık ve içerik olarak iki ana kısımdan oluşan AccordionPane'leri taşıyan Accordion kontrolünü CSS kullanarak zengin ve göze hoş gelen tasarımlar ortaya çıkarabiliriz. Accordion'un HeaderCssClass, HeaderSelectedCssClass ve ContentCssClass özelliklerinde önceden hazırladığımız CSS sınıfları (class) tanımlayarak bu işlemleri basit halde gerçekleştirebiliriz. Hazırladığım basit bir örnekle önce CSS tanımlamalarını, ardından da sayfamızdaki Accordion kontrolünü nasıl tanımlayacağımıza bakalım.

Projemize ekleyeceğimiz style.css dosyasında başlık, seçilen maddenin başlığı ve içerik kısımlarının nasıl görüntüleneceğini belirliyorum. Göze hoş gelmesi için bir grafik programında hazırladığım gradient geçişleri olan 3 tane gif dosyasını bu alanların zeminlerinde kullanıyorum.

style.css
.baslik {
   font-size: 13px; font-family: Verdana; font-weight: bold; height:18px;
   text-indent: 5px; padding: 1px; margin-top: 1px; cursor: pointer;
   border-right: #ffcd70 1px solid; border-top: #ffcd70 1px solid;
   border-left: #ffcd70 1px solid; border-bottom: #ffcd70 1px solid;
   background-image: url(images/baslik_zemin.gif);
   background-position: top; background-repeat: repeat-x;
}

.secilenBaslik
{
   font-size: 13px; font-family: Verdana; font-weight: bold; height:18px;
   text-indent: 5px; padding: 1px; margin-top: 1px;
   border-right: #ffcd70 1px solid; border-top: #ffcd70 1px solid;
   border-left: #ffcd70 1px solid; border-bottom: #ffcd70 1px solid;
   background-image: url(images/secilen_baslik_zemin.gif);
   background-position: top; background-repeat: repeat-x;
}

.icerik {
   font-size: 11px; font-family: Verdana; padding: 5px;
   border-right: #ffcd70 1px solid; border-top: none;
   border-left: #ffcd70 1px solid; border-bottom: #ffcd70 1px solid;
   background-image: url(images/icerik_zemin.gif);
   background-position: left; background-repeat: repeat-y;
}

Açık olmayan başlıkların üzerine gelindiğinde farenin simgesini değiştirmek için başlık sınıfında cursor: pointer tanımlamasını yapmak daha güzel olacaktır. Gelelim sayfamızın tasarımına. CSS dosyamıza link vereceğimiz bir aspx dosyasında Accordion'un yukarıda belirttiğimiz özelliklerini CSS dosyasında tanımladığımız sınıflarla dolduruyoruz. Geriye kalan tek şey ise AccordionPane'lerin başlık ve içeriklerin doldurmak olacaktır.

Default.aspx
<head runat="server">
<title>Accordion'un CSS ile Etkin Kullanımı</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server">
<ajaxToolkit:ToolkitScriptManager ID="ScriptManager1" runat="server" />
<ajaxToolkit:Accordion ID="Accordion1" runat="server" HeaderCssClass="baslik"
HeaderSelectedCssClass="secilenBaslik" ContentCssClass="icerik"
Width="185">
   <Panes>
      <ajaxToolkit:AccordionPane ID="pane1" runat="server">
         <Header>Başlık-1</Header>
         <Content>İçerik-1</Content>
      </ajaxToolkit:AccordionPane>
      <ajaxToolkit:AccordionPane ID="pane2" runat="server">
         <Header>Başlık-2</Header>
         <Content>İçerik-2</Content>
      </ajaxToolkit:AccordionPane>
      <ajaxToolkit:AccordionPane ID="pane3" runat="server">
         <Header>Başlık-3</Header>
         <Content>İçerik-3</Content>
      </ajaxToolkit:AccordionPane>
   </Panes>
</ajaxToolkit:Accordion>
</form>
</body>


Sayfayı çalıştırdığımızda Accordion kontrolünün görünümü yandaki gibi olacaktır. Burada Accordion panelerinin genişlik ve yüksekliklerine göre zemin resimlerini hazırlamamız görünümün düzgün olmasındaki en önemli etkenlerden biri olacaktır.