28 Ocak 2009

İş Değişikliği

Bu hafta itibariyle sektördeki çalışmalarıma artık Innova’da Uygulama Geliştirme Uzmanı olarak devam ediyorum. Innova bünyesinde oldukça önemli projelerde görev almanın bana çok şey katacağından eminim. Kendim ve Innova adına hayırlı olması dileğiyle.

İki yılı aşkın süredir çalıştığım Netron’dan ve eğitmenlikten ayrılmak benim için biraz zor oldu tabii ki. Bu süreçte hep yanımda olan değerli iş arkadaşlarıma buradan da teşekkür etmeyi bir borç olarak görüyorum.

Bu arada Netron mail hesabımdan bana ulaşan arkadaşların artık umutluoglu (at) gmail.com adresini kullanmalarını rica edeceğim.

ASP.NET MVC 1.0 RC Resmen Duyuruldu

Dün Internet Explorer 8.0’ın RC1 sürümünün duyurulmasının ardından bu sabahta bir başka önemli Release Candidate duyurusu RSS okuyucularımıza düştü. Aylardır beklediğimiz ASP.NET MVC Framework 1.0’ın Release Candidate sürümü bugün itibariyle herkese açılmış durumda. Önümüzdeki ay içerisinde 1.0 versiyonunun (tahminimce Mart ayını bulur) duyurulması bekleniyor ve en güzel haberlerden birisi de 1.0 versiyonu hemen hemen RC versiyonu ile aynı olacak, yani ciddi değişiklikler beklenmiyor. Bu da RC sürümünü ciddi olarak incelemek için oldukça geçerli bir sebep.

Bu linkten indirebileceğiniz yeni sürümle ilgili bilgileri şimdilik Scott Guthrie ve David Hayden’in yazılarından incelemenizi tavsiye ederim.

Scott Guthrie - ASP.NET MVC 1.0 Release Candidate Now Available
David Hayden - Download ASP.NET MVC 1.0 Release Candidate

25 Ocak 2009

AJAX Sayfalarında Geç Yüklenme İşlemleri

Sayfanızda senkron şekilde yüklenecek içeriklerinizle beraber UpdatePanel'inizin içerisinde de asenkron yüklenecek içerikleriniz var. Fakat UpdatePanel içerikleri biraz yavaş yüklenecek gibi... Biraz daha somut bir örnek verecek olursam normal içeriklerinizin yüklenmesi 2 saniye, asenkron içeriklerinizin yüklenmesi de yaklaşık 7-8 saniye sürüyor. Normal işleyişte sayfanın tamamının oluşturulup istemciye gönderilmesini bekleyecek olursak en az 7-8 saniye istemciyi bekleteceğiz. Peki sayfanın ilk yüklenmesi esnasında, istemcinin tarayısına önce senkron yüklenecek olan içeriği göndersek, bu esnada da UpdatePanel içeriği yüklenmeye devam etse? Nasıl yapabiliriz ki böyle bir işlemi diye soruyorsunuz sanırım. Bu yazımda ASP.NET AJAX uygulamalarında yüklemeyi geciktirme(delay loading) işlemini nasıl gerçekleştirebileceğimize bakıyoruz.

Öncelikle gerekli malzemeler; 1 ScriptManager, 1 Label(senkron içerik için), 1 UpdatePanel, panel içerisine 1 Button ve asenkron içeriği yüklemek için 1 Label daha(sayfamız biraz daha yakışıklı olsun istersek 1 tane de UpdateProgress). İlk label normal içeriği saklayacak, yani ilk yükleme sonucunda istemciye bu kontrol dolu gidecek. Diğer label ise asenkron güncellenecek olan kontrolümüz, yani buradaki yükleme işlemi sayfa istemciye ulaştıktan hemen sonra gerçekleşecek. Sayfamızın HTML kodları ve UpdatePanel'i asenkron güncellenmesinde kullanacağımız kodlar aşağıdaki gibidir.

Default.aspx

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>

<asp:Label ID="lblStatik" runat="server" Text="Burası statik içeriğin geleceği yer"></asp:Label>

<br /><br />      

<asp:UpdatePanel ID="UpdatePanel1" runat="server">

    <ContentTemplate>

        <asp:LinkButton ID="lbGuncelle" runat="server" Text="Güncelle" onclick="lbGuncelle_Click"></asp:LinkButton><br />

        <asp:Label ID="lblAsenkronIcerik" runat="server"></asp:Label><br />

        <asp:UpdateProgress ID="UpdateProgress1" runat="server">

            <ProgressTemplate>

                Bilgiler yükleniyor. Bekleyiniz...

            </ProgressTemplate>

        </asp:UpdateProgress>

    </ContentTemplate>

</asp:UpdatePanel>


Default.aspx.cs

protected void Page_Load(object sender, EventArgs e)

{

    lblStatik.Text = "Bu kontrol statik içerikleri saklıyor";

}

protected void lbGuncelle_Click(object sender, EventArgs e)

{

    System.Threading.Thread.Sleep(3000); //İşlemi geciktirmek için

    lblAsenkronIcerik.Text = DateTime.Now.ToString();

}

Görüldüğü gibi lbGuncelle isimli LinkButton kontrolü UpdatePanel içeriğini güncelliyor. Sayfa bu haliyle ilk yüklendiğinde UpdatePanel'de herhangi bir çıktı oluşmaz. Ancak sayfa ilk yüklendiğinde LinkButton'a otomatik olarak postback yaptırabilirsek bu esnada UpdatePanel içeriği de istemciye gecikmeli olarak ulaşacaktır. İşte bu postback işlemini istemcide sayfa yüklendiği anda yapabilirsek yüklenmenin gecikmeli olarak gerçekleşmesi sağlanacaktır. Burada iki soru var; ilki istemciye sayfanın yüklendiği anı nasıl yakalayabilirim, ikincisi ise LinkButton'a tıklamadan nasıl partial postback işlemini tetiklerim? Her iki işlem de istemci tarafında gerçekleşecek olaylar olduğu için işin ucu JavaScript'e değiyor. Sayfanın yüklenmesi anında JavaScript'in pageLoad fonksiyonu devreye girer. Diğer yandan programatik şekilde bir kontrolü postback işlemine tabi tutmanın yolu da __doPostBack adındaki JavaScript fonksiyonundan geçer. Aşağıdaki JavaScript pageLoad fonksiyonu, UpdatePanel içeriğinin sayfanın ilk yüklenmesi esnasında gecikmeli olarak yüklenmesini sağlayacaktır.

Default.aspx

<script language="javascript" type="text/javascript">

    var ilkYuklenme = true;

 

    function pageLoad()

    {

        if(ilkYuklenme) // if bloğuna sadece bir kez girilmesi için

        {

            __doPostBack('lbGuncelle', ''); //LinkButton'a programatik olarak PostBack işlemi yaptırdık

            ilkYuklenme = false;

        }

    }

</script>

Sayfa istemciye yükleniyorken pageLoad fonksiyonu çalışır. ilkYukleme değişkeni bu esnada true olduğu için LinkButton kontrolü postback işlemi yapar ve UpdatePanel içeriği güncellenmeye başlanır. Thread sınıfının Sleep metodu ile geciktirme işlemi yaptığımız için çok açık bir şekilde sayfa istemciye yüklendiğinde gecikmeli olarak UpdatePanel'in içeriği güncellendiğini görebiliriz.

ajax delay loading

15 Ocak 2009

Response.Redirect() ile Yönlendirilecek Sayfayı Yeni Pencerede Açmak

Bundan 3-4 yıl kadar önce sunucu tarafında yapacağım sayfa yönlendirmesini yeni sayfada açma işlemini gerçekleştirmek için bir hayli araştırma yapmış ama sonucuna ulaşamamıştım. Aslında o kadar da zor değilmiş! Bazı durumlarda code-behind tarafında yazacağımız kodların içerisinde Response.Redirect metodunu kullanarak belirli bir sayfaya yönlendirme yapabiliyoruz. Peki bu yönlendirme işleminde açılacak olan sayfanın, yeni bir tarayıcı penceresinde görüntülenmesini nasıl sağlarız? Aslında bu sorunun cevabının Response.Redirect metoduyla hiçbir ilgisi yok. Olay tamamen bu metodu tetikleyen kontrol üzerinde yapılacak bir işlemle çözülebiliyor. Örneğin yönlendirmeyi Button kontrolü gerçekleştirecek ise aşağıdaki kodlar işimizi görecektir. Bu arada butonun form1 adındaki form elementi içerisinde yer alması gerektiğini söylememe gerek yoktur sanırım :)

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Tıkla Bakalım" OnClientClick="form1.target='_blank';" />

Button'ın Click olay metoduna standart Redirect metodumuzu yazmak yeterli olacaktır.

protected void Button1_Click(object sender, EventArgs e)

{

    Response.Redirect("Default.aspx");

}

Peki işleyiş nasıl? Button içerisinde eklediğimiz ve client tarafında çalışan form1.target='_blank' ifadesi butona tıklandığında işleyişi yeni bir pencereye devrediyor. Dolayısıyla açılan yeni pencere üzerinde sayfa postback oluyor ve Default.aspx sayfasına yönlendirme yapılıyor.

08 Ocak 2009

Ege ve Yaşar Üniversitesi Seminerleri Ardından

Dün Gençsen Geleceksin seminerleri için İzmir'deydim. Yaşar ve Ege Üniversitesi'nde gerçekleştirdiğim iki seminer ile koşturmaca dolu, heyecanlı ve oldukça güzel bir gün geçirdim. Dizüstü bilgisayarımın son zamanlarda projektörlerle anlaşmaya pek yanaşmaması, bana her iki üniversitede de zor dakikalar yaşattı:)

Günün erken saatlerinde İzmir'e inerek Yaşar Üniversitesi'ne geldim. Yaşar Üniversitesi'nin Bornova'daki kampüsü bugüne kadar gördüğüm en modern kampüstü diyebilirim. Konumu, yolları, çevre düzenlemeleri, binaları, derslikleri... gerçekten hepsi harikaydı. Yaşar Üniversitesi'ni bizim için farklı kılan durumlardan birisi de seminere katılan akademisyenlerin çokluğuydu. Seminere katılan öğretim görevlilerinin anlattıklarımızı en az öğrenciler kadar dikkatli bir şekilde dinlemesi bizi oldukça memnun etti. Gerek öğrencilerden, gerekse akademisyenlerden aldığımız pozitif elektrik bizi günün ikinci seminerine daha da motive olmuş şekilde çıkardı.

yasar_universitesi
İzmir Yaşar Üniversitesi'nden günün hatıra fotoğrafı

Öğleden sonra ise Ege Üniversitesi'ndeydim. Yine oldukça kalabalık bir katılımcı kitlesine Microsoft'un yakın gelecekteki yazılım teknolojileriyle ilgili konuşma yapma şansı buldum. Ege Üniversitesi öğrencilerinin sektörü yakından takip ediyor olmalarına ve de, ve deee soru sorma potansiyellerine hayran kaldım diyebilirim. Sanırım süre sıkıntımız olmasaydı salondaki öğrencilerin üçte biri soru sorma şansı bulacaktı :)

ege_uni
Ege Üniversitesi'nden günün hatıra fotoğrafı

Yorucu, ama bir o kadar keyifli bir günün akşamında ise İstanbul'a dönüş yaptım. Bu güzel gün için Yaşar ve Ege Üniversitesi öğrencilerine, akademisyenlere ve Turkcell adına etkinliğe konuşmacı olarak katılan arkadaşım Serdar Şimşek'e teşekkürlerimi sunuyorum. Yine etkinliklerin başarıyla gerçekleşmesi için emek harcayan MSP Okan İncecikli ve Can Bozdoğan'a teşekkür ederim.

05 Ocak 2009

Yeni Yılda Blogumda Yenilikler

Yeni yılla birlikte bloguma birkaç yenilik ekledim.

Bu yeniliklerden biri, artık blogumdaki teknik içerikli yazılarımı -eşimin de yardımlarıyla- İngilizce olarak da yayınlamam. Hatta bu yazılar farklı bir blog olarak karşınıza çıkıyor: www.umutluoglu.com/english

Diğer bir yenilik ise, artık gerçekleştireceğim seminer, webiner, workshop gibi etkinlikleri blog sitemden takip edebilir, hatta RSS listelerinize ekleyebilirsiniz. Etkinlik takvimi eklentim şu an sitemin sağ kısmında Seminer Programım başlığı altında yer alıyor. Dilerseniz bu linkten de gerçekleştireceğim etkinlikleri RSS okuyucularınıza kaydedebilirsiniz.

Aslında en önemli yenilik artık blog yazılarımı www.umutluoglu.com adresine taşımam sanırım. Henüz bu adresteki çalışmalarım tamamlanmadığı için blogspot'a bir süre daha eş zamanlı olarak yazmaya devam edeceğim. Anlaşılacağı üzere, yakında yazılarımı sadece www.umutluoglu.com adresinden takip edebileceksiniz :)

04 Ocak 2009

nedirtv?com - Ocak Ayı Webinerleri

nedirtv?com Webinerlerinedirtv?com ve Ineta Türkiye olarak düzenli şekilde gerçekleştirmeyi planladığımız aylık webinerlere Ocak ayı itibariyle başlıyoruz. Ocak ayı içerisinde 8 farklı webiner ile nedirtv?com editörleri sizlerle olacak. Webinerler bu ay için geçerli olmak üzere her Pazartesi ve Çarşamba akşamı 21:00-22:00 saatleri arasında gerçekleştirilecektir. Visual Studio 2008, Expression Media, C# 3.0, SharePoint, WCF, LINQ to SQL, Ado.Net Data Services ve MOSS Development konularında gerçekleştirilecek oturumları kaçırmamanızı tavsiye ediyorum. Detaylı bilgi ve katılım bilgileri için bu adresteki haberi okuyabilirsiniz. Yine gerçekleştirilecek webinerlerle ilgili duyuru ve hatırlatmaları takip etmek için bu adresten etkinliği ajandanıza ekleyebilirsiniz.

Bu arada webiner konusunda bir açıklama yapma zorunluluğu hissediyorum:) Zira birçok kişi webineri bir salonda, bir sınıfta gerçekleştirilecek seminer olarak düşünüyor. Nedirtv'de bu ayki webinerlerin duyurusunu yaptıktan sonra birkaç kişiden "Hocam biz İstanbul dışında oturuyoruz gelip izleme şansımız yok" şeklinde şikayetler geldi:) Webiner; web üzerinden gerçekleştirilen çevrimiçi seminerdir. Yani webinerlere katılmak için internet bağlantınızın olması ve bilgisayarınıza Live Meeting'i bir defalığına kurmanız yeterlidir. Türkiye'nin, hatta dünyanın neresinde olursanız olun internet bağlantınız olan bir bilgisayardan bu etkinliğe interaktif şekilde katılmanız mümkün. Webinerlere sadece izleyici olarak katılmıyor, aynı zamanda konuşmacılara sorular yöneltip aklınıza takılan hususlarda bilgi alabilmeniz mümkün oluyor. Kabaca bir tabirle bildiğimiz seminerin online ortamda olanı diyebiliriz webinerlere :)

01 Ocak 2009

"You tried to assign the Null value..." Hatası ve Çözümü

MS Access'te hazırladığınız bir tabloyu AccessDataSource kontrolü ile Insert işlemlerinde kullandığınızda "You tried to assign the Null value to a variable that is not a Variant data type" şeklinde bir hatayla karşılaşabilirsiniz. Ben null değer girişi yapmadım ki böyle bir hata alıyorum demeyin, zira sorun sizden değil Visual Studio'nun Insert cümlenize tablonuzun identity kolonunu veri eklenecek kolonmuş gibi eklenmesinden kaynaklanıyor! Çözüm ise oldukça basit; sayfanızın HTML kodları içerisinde AccessDataSource kontrolünüzün InsertCommand özelliğinden identity kolonunuzun(ki genellikle primary key kolonunuz olur) adını ve parametresini (VALUES kısmındaki ? karakterini) kaldırmanız gerekiyor. Ardından
InsertParameters koleksiyonundan yine bu kolon için eklenmiş olan parametreyi de kaldıracak olursanız artık Insert işlemini başarılı bir şekilde gerçekleştirebilirsiniz.

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.