TimeSpan ile şu kadar saniye, dakika, saat ve gün olayı

TimeSpan iki zaman arasındaki farkı bize veren bir fonksiyon. Kullanımıda
gerçekten çok basit. İşlemin sonunda bize milisaniye, saniye, dakika, saat ve gün değerlerini double tipinde geri döndürüyor.
Facebook, friendfeed veya twitter gibi sitelerde, bu içerik bir kaç saniye önce
eklendi yada 5 saat önce yüklendi gibi mesajları görmüşsünüzdür, TimeSpan
kullanarak bu işlemin nasıl yapıldığına bir göz atalım.

protected void Page_Load(object sender, EventArgs e)
{
    DateTime hesaplanacakZaman = new DateTime(2010, 05, 15, 21, 23, 00);
    Response.Write(neZaman(hesaplanacakZaman));
}

public string neZaman(DateTime d) {
    TimeSpan tS = DateTime.Now-d;
    int dakika = (int)tS.TotalMinutes;
    int saat = (int)tS.TotalHours;
    int gun = (int)tS.TotalDays;
    string strTemp;
    if (dakika < 1)
    {
        strTemp = "bir kaç saniye önce";
    }
    else if (dakika < 60)
    {
        strTemp = dakika+" dakika önce";
    }
    else if (saat < 24)
    {
        strTemp = saat+" saat önce";
    }
    else
    {
        strTemp = gun+" gün önce";
    }
    return strTemp;
}

Gördünüz gibi gayet basit ve anlaşılır bir yöntem. Sonraki yazıda görüşmek üzere hoşçakalın..

GridView XML Veri Listeleme, Ekleme, Düzenleme ve Silme İşlemleri

Asp.Net ile ilgili epeydir yazı yazmıyordum, kısmet bugüneymiş. Başlıktan da anlaşılacağı üzere gridview kontrolü ile xml bir veriyi nasıl listeleyebilir, düzenleyebilir, silebilir ve yeni bir kayıt ekleyebileceğimize bakacağız. Bunun yanında gridview nesnesini css ile kolayca nasıl biçimlendirebildiğimizide göreceğiz. Lafı daha fazla uzatmadan konumuza dönelim. Aşşağıda xml verimizi görüyoruz.

    <?xml version="1.0" encoding="utf-8"?>
    <urunler>
      <urun>
        <kod>001</kod>
        <ad>Cep telefonu7</ad>
        <fiyat>1145</fiyat>
        <parabirimi>$</parabirimi>
      </urun>
      <urun>
        <kod>002</kod>
        <ad>Fotoğraf makinası</ad>
        <fiyat>250</fiyat>
        <parabirimi>TL</parabirimi>
      </urun>
    </urunler>

İlk önce projemize yeni bir gridview kontrolü ekleyip, onrowcancelingeditonrowdeleting, onrowediting, onrowupdating olaylarını(event) etkinleştiriyoruz. Sonrasında AutoGenerateColumns özelliğinide false olarak ayarlıyoruz. Bunun nedeni sütunları biz elle oluşturacağız, eğer sütunları direk almak istersek bu özellik true olarak kalabilir.
Birde unutmadan CssClass olarak da gridView değerini veriyoruz. Bunu gridview imizi biçimlendirirken kullanacağız. Bir sonraki adımımız xml verimizden gelecek olan veri alanlarını ve biçimlendirme için gerekli olan diğer tanımlamaları yapmak. Aşşağıda bu saydığım olayların yapılmış halini görebilirsiniz. Unutmadan birde yeni veri girişi için gerekli olan formumuz bulunuyor.

    <asp:GridView runat="server" ID="gvListe" CssClass="gridView"
        onrowcancelingedit="gvListe_RowCancelingEdit"
        onrowdeleting="gvListe_RowDeleting" onrowediting="gvListe_RowEditing"
        onrowupdating="gvListe_RowUpdating" AutoGenerateColumns="False">

        <HeaderStyle CssClass="baslik" />
        <RowStyle CssClass="satir" />
        <AlternatingRowStyle CssClass="aSatir"/>

        <Columns>
            <asp:TemplateField HeaderText="Kod">
                <EditItemTemplate>
                    <asp:TextBox ID="txtKod" runat="server" Text='<%# Bind("kod") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="lblKod" runat="server" Text='<%# Bind("kod") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Ad">
                <EditItemTemplate>
                    <asp:TextBox ID="txtAd" runat="server" Text='<%# Bind("ad") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="lblAd" runat="server" Text='<%# Bind("ad") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Fiyat">
                <EditItemTemplate>
                    <asp:TextBox ID="txtFiyat" runat="server" Text='<%# Bind("fiyat") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="lblFiyat" runat="server" Text='<%# Bind("fiyat") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Para Birimi">
                <EditItemTemplate>
                    <asp:TextBox ID="txtParaBirimi" runat="server" Text='<%# Bind("parabirimi") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="lblParaBirimi" runat="server" Text='<%# Bind("parabirimi") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:CommandField ShowEditButton="True" ShowDeleteButton="true" />
        </Columns>
    </asp:GridView>

    <div class="form">
        <h1>Yeni kayıt ekle !</h1>
        <span>Kod</span><asp:TextBox runat="server" ID="txtKod" />
        <span>Ad</span><asp:TextBox runat="server" ID="txtAd" />
        <span>Fiyat</span><asp:TextBox runat="server" ID="txtFiyat" />
        <span>Para Birimi</span><asp:TextBox runat="server" ID="txtParaBirimi" />

        <asp:Button runat="server" ID="btnEkle" Text="Ekle !" onclick="btnEkle_Click" />
    </div>

Geliyoruz ikinci aşamamıza nedir bu aşamalar ? Xml verisinin listelenmesi, düzenlenmesi ve silinmesi. Bu işlemler için gerekli olan kodlarımıza bakıyoruz.

public partial class _Default : System.Web.UI.Page
{
string strVeriYol;
XmlDocument xdDoc = new XmlDocument();
protected void Page_Load(object sender, EventArgs e)
{
strVeriYol = Server.MapPath("~/veri.xml");
if (!IsPostBack)
{
gvDoldur();
}
}

protected void gvDoldur() {
DataSet ds = new DataSet();
ds.ReadXml(strVeriYol);
gvListe.DataSource = ds.Tables[0];
gvListe.DataBind();
}

protected void gvListe_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
string strKod = ((Label)gvListe.Rows[e.RowIndex].Cells[0].FindControl("lblKod")).Text;
xdDoc.Load(strVeriYol);
XmlNode xnDuzenle = xdDoc.SelectSingleNode("/urunler/urun[kod='" + strKod + "']");
xnDuzenle.ParentNode.RemoveChild(xnDuzenle);
xdDoc.Save(strVeriYol);
gvListe.EditIndex = -1;
gvDoldur();
}
protected void gvListe_RowEditing(object sender, GridViewEditEventArgs e)
{
gvListe.EditIndex = e.NewEditIndex;
gvDoldur();
}
protected void gvListe_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
gvListe.EditIndex = -1;
gvDoldur();
}
protected void gvListe_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
string strKod = ((TextBox)gvListe.Rows[e.RowIndex].Cells[0].FindControl("txtKod")).Text;
string strAd = ((TextBox)gvListe.Rows[e.RowIndex].Cells[1].FindControl("txtAd")).Text;
string strFiyat = ((TextBox)gvListe.Rows[e.RowIndex].Cells[2].FindControl("txtFiyat")).Text;
string strParaBirimi = ((TextBox)gvListe.Rows[e.RowIndex].Cells[3].FindControl("txtParaBirimi")).Text;

xdDoc.Load(strVeriYol);
XmlNode xnDuzenle = xdDoc.SelectSingleNode("/urunler/urun[kod='"+strKod+"']");
if (xnDuzenle != null)
{
xnDuzenle["kod"].InnerText = strKod;
xnDuzenle["ad"].InnerText = strAd;
xnDuzenle["fiyat"].InnerText = strFiyat;
xnDuzenle["parabirimi"].InnerText = strParaBirimi;
xdDoc.Save(strVeriYol);
}
gvListe.EditIndex = -1;
gvDoldur();
}
protected void btnEkle_Click(object sender, EventArgs e)
{
xdDoc.Load(strVeriYol);
XmlElement xeYeni = xdDoc.CreateElement("urun");
xeYeni.InnerXml = "" + txtKod.Text + "" + txtAd.Text + "" + txtFiyat.Text + " " + txtParaBirimi.Text + "";
xdDoc.DocumentElement.AppendChild(xeYeni);
xdDoc.Save(strVeriYol);
Response.Redirect("default.aspx");
}
}

Üçüncü aşamamızda gridview imizi biçimlendirmek için gerekli olan css kodlarımız bulunuyor. Burada ilk önce table elementini sıfırlıyoruz. Daha sonra
gridview nesnemizin içinde tanımlamış olduğumuz, HeaderStyle, RowStyle ve AlternatingRowStyle özelliklerini biçimlendiriyoruz. Burada size tavsiyem
sayfanızın yorumlanmış halinin kaynak kodlarına bakmanızdır.
İlgili kodları buradan indirebilirsiniz.
Evet arkadaşlar geldik bir yazının daha sonuna, umarım faydalı olmuştur. Herkese çalışmalarında başarılar.

Asp.Net projelerimizde neden jQuery kullanmalıyız ?

Bilmeyenler için jQuery bir javascript çatısıdır. (framework). Bilidiğiniz üzere web ortamında kullanıcı tarafında yapmamız gereken aksiyonları javascript ile yapabiliyoruz. Web 2.0 ile birlikte kullanıcı tarafındaki özellikler bir hayli arttı ve önem kazandı. Bu olayın şüphesiz öncüleri Facebook ve Google gibi isimler oldu. Hayatımıza giren yeni özelleklerden bazıları şu şekilde; sayfa yeniden yüklenmeden sunucu taraflı işlemler yapabilme (ajax), sekme (tab), aramalarda otomatik tamamlama (auto complete) gibi.. Asp.Net geliştiricilerinin bildiği üzere Ajax Control Kit ile yukarda bahsettiğim işleri çok basit bir şekilde projelerimize uygulayabiliyoruz. Böyle bir imkan varken neden jQuery kullanalım dimi ? Bunun bir çok sebebi bulunuyor, isterseniz bunlara bir göz atalım.

jquery logo

  1. Esneklik: Ajax control kit ile kalıpların az dışına taşmaya kalktığınızda önümüze öyle engeller çıkarki takla üzerine takla atmak zorunda kalırız. jQuery ile bir satırlık kod ile yapacağınız şeyi satırlarca kod yazarak ancak çözeriz, çoğu zaman çözemeyiz bile.
  2. Diğer scriptlerle olan çakışmalar: Projeniz bitmek üzeridir ve sizden istenen son bir özelliğin daha eklenmesi istenir. İnterneti didik didik ararsınız ve bu iş için mükemmel bir script bulursunuz. Scripti projenizde çalıştırmaya kalkarsınız fakat bir türlü çalışmaz çünkü control kit ile çakışmıştır. Durupda pirincin taşını ayıklamak çok uzun zaman alır hatta çoğu zaman taşı ayıklayamazsınız bile :) Burda şunu söyleyebilirsiniz, jQuery kullanılan bir sayfaya farklı bir script eklemeye çalıştığımızda da bu durumun olması olasıdır. Evet doğru fakat bu durum ajax control kit kadar sık karşılaşılan bir durum değildir. Ayrıca jQuery kullanıyorsanız sayfanıza çoğu zaman ekstradan bir script ekleme ihtiyacı duymazsınız, ya kendiniz yazarsınız yada yüzlerce eklentiden bir tanesini alır direk kullanır yada isteğinize göre düzenleyebilirsiniz.
  3. Performans: Siz kullanmasanız bile en basit işler için bile ajax control kit arka planda öyle şeyleri sayfanıza yüklerki performans bu durumdan ciddi anlamda etkilenir. Hatta çoğumuzun başına tarayıcının kitlenmesi gibi durumlar gelmiştir. jQuery ile herşeyin kontrolü bizdedir, biz ne yazarsak o olur, bu yüzden çok daha verimli çalışır.
  4. Tarayıcı uyumluluğu: Bu web tasarımı ile uğraşan herkesin ortak sıkıntısıdır, zaten tasarımı taracıya uydurmak için çeşitli taklalar atıyoruz birde bunun içine ajax control kit girince işkence kaçınılmaz oluyor. Çoğu zamanda elleriniz kollarınız bağlı hiç bir şey yapamıyorsunuz. jQuery tarafında ise böyle bir derdiniz yok bir kere yazın heryerde çalışsın, mobil cihaz tarayıcılarında bile..
  5. Kontrol edilebilirlilik: Eğer yapılan iş sizin kontrolünüz dışındaysa koda, ekleme, çıkarma veya düzenleme gibi işlemler çok zordur. Yeni açtığınız projenize jquery.js yi ekledikten sonra dışarıdan hiç bir scripte gerek kalmadan projenizi sonlandırabilirsiniz. Kodunu yazamayacağınız şeyler içinse jquery eklentilerini gönül rahatlığıyla kullanabilirsiniz.

jQuery dünyasına ilk adımı atmak biraz zor gelebilir fakat içine girdiğinizde kullanması ve kodlanması oldukça kolay bir çatı olduğunu göreceksiniz. Yaptığınız işten bir okadar daha zevk alacağınızın garantisinide ben veriyorum. Şimdilik benden bu kadar ilerleyen günlerde tekrar görüşmek üzere, hoşçakalın..

Asp.Net ile jQuery Autocomplete kullanmak

Bilmeyenler için autocomplete nedir onu söyleyeyim, bir textbox’ a kelime girmeye başlıyorsunuz ve o ana kadar girilmiş olan karakterleri veritabanında arayıp alt tarafta açılan listede, ilgili kayıtları kullanıcıya sunan bir sistem. Google buna güzel bir örnek teşkil ediyor. Bu işlem için Ajax Control Toolkit içinde bulunan AutoComplete nesnesiyle de işimizi görebiliyoruz. Fakat ajax control araçlarıyla projemize bir şey eklediğimizde arka planda bir kod ve dosyada beraberinde projemize eklenmiş oluyor, bu durum büyük projelerde problemler çıkartabilir. Hemde zaman zaman tarayıcıdan tarayıcıya antin kuntin problemleride beraberinde getiriyor. Aklıma gelmişken, oldukçada yavaş çalışıyor. Kısacası kullanması basit fakat performansı çok kötü bir yöntem. Uzun zamandır projelerimde jQuery kullanıyorum ve en ufak bir problem dahi yaşamadım. Master sayfama jQuery’ i ekliyorum ve tüm projede istediğim herşeyi rahatlıkla yapabiliyorum. Farklı durumlar içinse bir sürü eklentisi bulunuyor. AutoComplete‘ de bunlardan biri. Eklentinin sayfasına buradan ulaşabilir, demosuna buradan bakabilirsiniz. Anlatacağım örnekte direk veritabanından arama yapacağız. Daha fazla uzatmadan kodlarımıza bakalım. İlk önce gerekli dosyaları indirip, projemize ekliyoruz.

http://jquery.bassistance.de/autocomplete/lib/jquery.js
http://jquery.bassistance.de/autocomplete/jquery.autocomplete.js

http://jquery.bassistance.de/autocomplete/jquery.autocomplete.css

Sonrasında aşşağıdaki gibi kodumuzu yazıyoruz.

Default.aspx sayfamız

	<script type="text/javascript">
    $(document).ready(function() {
        $("input#<%=txtKelime.ClientID %>").autocomplete('Ara.aspx').result(function(event, item) {
            $("#<%=txtGizliAlan.ClientID %>").val(item.toString().split(",")[1]);
        });
	});
	</script>

	<form runat="server" id="form1">
		<asp:textbox id="txtKelime" runat="server" />
		<asp:textbox id="txtGizliAlan" runat="server" style="display:none" />
	</form>

Yukarıdaki kodda txtGizliAlan olarak gördüğümüz alan, seçtiğimiz kaydın id değerinin saklandığı alanımız. Yani ilgili kaydın id sini veritabanına yazacaksak burayı kullanıyoruz.

Ara.aspx sayfamız

protected void page_load(object sender, EventArgs e) {
string strKelime = Request.QueryString["q"];// burada gelen değeri sql enjeksiyondan korunmak için kontrol etmeyi unutmayın !
DataTable dt = veritabani.DataTableGetir("Select * from tabloAdi where aranacakAlan like '%" + strKelime + "%'");
foreach (DataRow dr in dt.Rows)
{
Response.Write(dr["alanAdi"].ToString() + "|" + dr["id"].ToString() + Environment.NewLine);
}
}

İşte bu kadar kolay ! Artık bizimde bir Autocomplete mekanızmamız var.

ASP.NET ile Google Api Kullanarak Hava Durumu Almak

Başlıktan da anlaşılacağı gibi Google Api yi kullanarak şehirlerin hava sıcaklığı, nem oranı, rüzgarın hızı gibi bilgileri alacağız. İstenilirse 5 günlük durum bilgisini de almamız mümkün fakat bu örnekte 1 günlük bilgiyi alacağız. İlk başta Meteoroloji müdürlüğünün yayınladığı bilgilerini kullanarak yapmak istedim fakat ne hikmetse sağlıklı çalışmıyor, muhtemelen bilginin çekildiğini anlayıp engelliyorlar. İlgilenenler için ilgili adres http://www.dmi.gov.tr/FTPDATA/analiz/sonSOA.xml burası. Buranın bir eksiği de görsellik için bir adres verilmemesi, bunun içinde ayrı bir mekanizmayla resimleri alıyordum, dünya kadar zaman harcamıştım ama elimde sadece koskoca bir hiç kaldı. İlgilenenlere kodları gönderebilirim.

Google Api ASP.NET C# Hava DurumuDönelim konumuza, nedenini bilmiyorum ama Google’ ya her konuda çok güveniyorum, dedim madem öyle Google’ nin hizmetini kullanayım. Klasik bir xml okuyucuyla (reader) bilgileri alıp istediklerimi aldım fakat ne göreyim gelen bilgiler İngilizce :| Tarayıcıdan adresi yazınca Türkçe kodlarla çekince İngilizce gelmesi hayra alamet değildi, neyse aradım taradım hl=tr parametresinin de eklenmesi gerektiğini anladım. Ama gelin görünki adres satırından bu bilgiyi gönderebilmek için & (ve (ampersand)) imininde olması gerekiyor. Bu imi direk XML adresi olarak veremiyorsunuz bunu zaten site haritası yaparken yıllar önce öğrenmiştik, yerine & ifadesini   yazıyorduk. Ama ne var ki bu şekilde istek   gönderdiğimde hiç bir değişiklik olmuyordu. Saatler geçiyor sinirden neyapacağımı nasıl bir izleyeceğimi bilmiyordum, kontrol çalışıyor fakat veriler İngilizce geliyordu, dedimki madem öyle Google Translate ile Türkçe’ ye çevireyim, hoop dedim yok daha neler altı üstü hava durumu gösterilecek. Şunu da söylemeliyim o kadar araştırmama rağmen hiç bir çözüme ulaşamadım en sonunda Google’ ya bile yazdım. Kulağı belki biraz sıkıntılı bir şekilde tuttum fakat saat gibi çalışıyor. Performans olarak da fena değil gibi. Şunu da belirtmek isterim, yazıyı bu kadar uzatmamda ki amaç zaman zaman ufak gibi görünenproblemler nedeniyle işlerin nasıl yoldan çıktığını göstermek.

Default.aspx

    <style type="text/css">
    body{
        font-family:Arial;
        font-size:13px;
    }
    .hava{
        padding:5px;
        border:1px solid #e7e7e7;
        border-right-width:2px;
        border-bottom-width:2px;
        width:250px;
    }
    .sehir{
        font-size:11px;
        background-color:#ffba00;
    }

    .ikon img{
       float:left;
       margin:5px;
    }

    .derece{
        color:#ffba00;
        font-size:15px;
        display:inline-block;
        margin-top:2px;
        font-weight:bold;
    }
    .nem,.ruzgar{display:block;font-size:9px;}
    </style>
 <div class="hava">
        <img src="http://www.google.com.tr/intl/tr/logos/Logo_50wht.gif" alt="Google" />
        <br />
         <asp:DropDownList runat="server" ID="ddlSehirler" CssClass="sehir">
            <asp:ListItem>ADANA</asp:ListItem>
            <asp:ListItem>ADIYAMAN</asp:ListItem>
            <asp:ListItem>AFYONKARAHİSAR</asp:ListItem>
            <asp:ListItem>AĞRI</asp:ListItem>
            <asp:ListItem>AKSARAY</asp:ListItem>
            <asp:ListItem>AMASYA</asp:ListItem>
            <asp:ListItem>ANKARA</asp:ListItem>
            <asp:ListItem>ANTALYA</asp:ListItem>
            <asp:ListItem>ARDAHAN</asp:ListItem>
            <asp:ListItem>ARTVİN</asp:ListItem>
            <asp:ListItem>AYDIN</asp:ListItem>
            <asp:ListItem>BALIKESİR</asp:ListItem>
            <asp:ListItem>BARTIN</asp:ListItem>
            <asp:ListItem>BATMAN</asp:ListItem>
            <asp:ListItem>BAYBURT</asp:ListItem>
            <asp:ListItem>BİLECİK</asp:ListItem>
            <asp:ListItem>BİNGÖL</asp:ListItem>
            <asp:ListItem>BİTLİS</asp:ListItem>
            <asp:ListItem>BOLU</asp:ListItem>
            <asp:ListItem>BURDUR</asp:ListItem>
            <asp:ListItem>BURSA</asp:ListItem>
            <asp:ListItem>ÇANAKKALE</asp:ListItem>
            <asp:ListItem>ÇANKIRI</asp:ListItem>
            <asp:ListItem>ÇORUM</asp:ListItem>
            <asp:ListItem>DENİZLİ</asp:ListItem>
            <asp:ListItem>DİYARBAKIR</asp:ListItem>
            <asp:ListItem>DÜZCE</asp:ListItem>
            <asp:ListItem>EDİRNE</asp:ListItem>
            <asp:ListItem>ELAZIĞ</asp:ListItem>
            <asp:ListItem>ERZİNCAN</asp:ListItem>
            <asp:ListItem>ERZURUM</asp:ListItem>
            <asp:ListItem>ESKİŞEHİR</asp:ListItem>
            <asp:ListItem>GAZİANTEP</asp:ListItem>
            <asp:ListItem>GİRESUN</asp:ListItem>
            <asp:ListItem>GÜMÜŞHANE</asp:ListItem>
            <asp:ListItem>HAKKARİ</asp:ListItem>
            <asp:ListItem>HATAY</asp:ListItem>
            <asp:ListItem>IĞDIR</asp:ListItem>
            <asp:ListItem>ISPARTA</asp:ListItem>
            <asp:ListItem>İSTANBUL</asp:ListItem>
            <asp:ListItem>İZMİR</asp:ListItem>
            <asp:ListItem>KAHRAMANMARAŞ</asp:ListItem>
            <asp:ListItem>KARABÜK</asp:ListItem>
            <asp:ListItem>KARAMAN</asp:ListItem>
            <asp:ListItem>KARS</asp:ListItem>
            <asp:ListItem>KASTAMONU</asp:ListItem>
            <asp:ListItem>KAYSERİ</asp:ListItem>
            <asp:ListItem>KIRIKKALE</asp:ListItem>
            <asp:ListItem>KIRKLARELİ</asp:ListItem>
            <asp:ListItem>KIRŞEHİR</asp:ListItem>
            <asp:ListItem>KİLİS</asp:ListItem>
            <asp:ListItem>KOCAELİ</asp:ListItem>
            <asp:ListItem>KONYA</asp:ListItem>
            <asp:ListItem>KÜTAHYA</asp:ListItem>
            <asp:ListItem>MALATYA</asp:ListItem>
            <asp:ListItem>MANİSA</asp:ListItem>
            <asp:ListItem>MARDİN</asp:ListItem>
            <asp:ListItem>MERSİN</asp:ListItem>
            <asp:ListItem>MUĞLA</asp:ListItem>
            <asp:ListItem>MUŞ</asp:ListItem>
            <asp:ListItem>NEVŞEHİR</asp:ListItem>
            <asp:ListItem>NİĞDE</asp:ListItem>
            <asp:ListItem>ORDU</asp:ListItem>
            <asp:ListItem>OSMANİYE</asp:ListItem>
            <asp:ListItem>RİZE</asp:ListItem>
            <asp:ListItem>SAKARYA</asp:ListItem>
            <asp:ListItem>SAMSUN</asp:ListItem>
            <asp:ListItem>SİİRT</asp:ListItem>
            <asp:ListItem>SİNOP</asp:ListItem>
            <asp:ListItem>SİVAS</asp:ListItem>
            <asp:ListItem>ŞANLIURFA</asp:ListItem>
            <asp:ListItem>ŞIRNAK</asp:ListItem>
            <asp:ListItem>TEKİRDAĞ</asp:ListItem>
            <asp:ListItem>TOKAT</asp:ListItem>
            <asp:ListItem>TRABZON</asp:ListItem>
            <asp:ListItem>TUNCELİ</asp:ListItem>
            <asp:ListItem>UŞAK</asp:ListItem>
            <asp:ListItem>VAN</asp:ListItem>
            <asp:ListItem>YALOVA</asp:ListItem>
            <asp:ListItem>YOZGAT</asp:ListItem>
            <asp:ListItem>ZONGULDAK</asp:ListItem>
        </asp:DropDownList><br />
        <span runat="server" ID="spnIkon" class="ikon"></span>
        <span runat="server" ID="spnDerece" class="derece"></span>
        <span runat="server" ID="spnDurum" class="durum"></span>
        <span runat="server" ID="spnNem" class="nem"></span>
        <span runat="server" ID="spnRuzgar" class="ruzgar"></span>
    </div>

Default.aspx.cs

try
        {
            string strGelenIl = Request.QueryString["Il"];
            if (string.IsNullOrEmpty(strGelenIl))
            {
                strGelenIl = "TRABZON";
            }
            WebClient webClient = new WebClient();
            string strKaynak = webClient.DownloadString("http://www.google.com/ig/api?weather=" + strGelenIl + "&hl=tr");
            TextReader trOkuyucu = new StringReader(strKaynak);
            webClient.Dispose();

            ddlSehirler.Attributes.Add("onchange", "location.href='?Il='+this.value+''");
            ddlSehirler.SelectedValue = strGelenIl;

            XmlTextReader rdr = new XmlTextReader(trOkuyucu);
            XmlDocument myxml = new XmlDocument();
            myxml.Load(rdr);
            XmlNodeList xnlHedef = myxml.SelectNodes("xml_api_reply/weather/current_conditions");

            string strDerece = xnlHedef.Item(0).SelectSingleNode("temp_c").Attributes["data"].InnerText;
            string strDurum = xnlHedef.Item(0).SelectSingleNode("condition").Attributes["data"].InnerText;
            string strNem = xnlHedef.Item(0).SelectSingleNode("humidity").Attributes["data"].InnerText;
            string strIkon = "<img src="\" alt="\&quot;&quot;" />";
            string strRuzgar = xnlHedef.Item(0).SelectSingleNode("wind_condition").Attributes["data"].InnerText;
            spnIkon.InnerHtml = strIkon;
            spnDurum.InnerText = strDurum;
            spnDerece.InnerText = strDerece + " °C";
            spnNem.InnerText = strNem;
            spnRuzgar.InnerText = strRuzgar;

            trOkuyucu.Dispose();
            rdr.Close();
            rdr = null;
            myxml = null;
            xnlHedef = null;
        }
        catch (Exception)
        {

        }

İlgili dosyaları buradan indirebilirsiniz. Bir yazının daha sonuna geldik, kalın sağlıcakla.

ASP.NET ile Dosya yükleme, listeleme ve silme işlemleri

Merhaba arkadaşlar, başlıktan da anlaşıldığı gibi asp.net ile dosya yükleme (file upload), yüklediğimiz dosyaları listeleme (file list) ve listelediğimiz dosyalardan seçileni fiziksel olarak silme işlemini göstermeye çalışacağım. Öncelikle şunu belirtmek istiyorum, bu örneğimizde veritabanı bulunmuyor, yani işlemlerimizi direk klasör içindeki dosyalar ile yapacağız.

Öncelikle yeni açtığımız projemizin içine dosyalar adında bir klasör açıp, bu klasöre yazma izni veriyoruz. İlk önce default.aspxsayfamızın kodlarına bakalım.

<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
<asp:Label runat="server" ID="mesaj"></asp:Label>
<asp:Label runat="server" ID="lblyd"></asp:Label>
<asp:DropDownList runat="server" ID="ddl"></asp:DropDownList>
<asp:LinkButton runat="server" ID="btnsil" Text="Seçilen dosyayı sil !" onclick="btnsil_Click"></asp:LinkButton>

Şimdide default.aspx.cs kodlarımıza bakalım

using System;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.IO;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
yuklenenDosyalar();
}
}
protected void yuklenenDosyalar() {
DirectoryInfo klasor = new DirectoryInfo(MapPath("dosyalar"));
ddl.DataSource = klasor.GetFiles();
ddl.DataBind();
lblyd.Text = ddl.Items.Count + " adet yüklenmiş dosya ! ";
if (ddl.Items.Count == 0)
{
ddl.Items.Add("Yüklenmiş dosya bulunmuyor.!");
ddl.Enabled = false;
btnsil.Visible = false;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
try
{
FileUpload1.SaveAs(Server.MapPath(@"dosyalar\" + FileUpload1.FileName));
string uzanti = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
mesaj.Text = "Dosya başarıyla yüklendi !
";
mesaj.Text += "Dosya adı: " + FileUpload1.FileName + "
";
mesaj.Text += "Dosya türü: " + FileUpload1.PostedFile.ContentType + "
";
mesaj.Text += "Dosya boyutu: " + FileUpload1.PostedFile.ContentLength + "byte
";
mesaj.Text += "Dosya uzantısı: " + uzanti + "
";
ddl.Enabled = true;
yuklenenDosyalar();
}
catch (Exception)
{
mesaj.Text = "Bir hata oluştu ve dosya yüklenemedi ! Muhtemelen ilgili klasörün yazma izni bulunmuyor.";
}
}
else
{
mesaj.Text = "Lütfen dosya seçiniz !";
}
}
protected void btnsil_Click(object sender, EventArgs e)
{
File.Delete(MapPath("dosyalar/"+ddl.SelectedValue));
mesaj.Text = ddl.SelectedValue + " Dosyası başarıyla silindi !";
yuklenenDosyalar();
}
}

Görüldüğü üzere dosyaları yüklemek, listelemek ve silmek gerçekten çok basit. Burada en genel şekliyle örnek vermeye çalıştım, eğer istersek basit bir if bloğuyla sadece jpeg uzantılı dosyalar veya boyutu 10kb den küçük dosyalar yüklenebilir gibi filtrelerde koyabiliriz. Herkese iyi çalışmalar.

jQuery ile sürükle bırak yaparak sıralama işlemi

Sıralamadan kastım, kategori sıralama olabilir, eklenti sıralama olabilir, yazı sıralama olabilir vb.. Normalde sıralama işlemlerini yapabilmek için epeyce kod yazmaktan ziyade kullanıcının nasıl en rahat şekilde kullanabileceğinin hesabını kitabını sıklıkla yapıyoruz. Sağolsun  jQuery‘ nin Ui (kullanıcı arayüzü (user interface)) imdadımıza yetişiyor. Önce  sıralama (sortable) fonksiyonunu kullanıyoruz, daha sonra veriyi serileştiriyoruz (serialize) sonrada ajax ile postalıyoruz.Hemen kodlarımıza bakalım. Öncelikle bu iki dosyayı  Jquery Ui indirelim ve sayfamıza ekleyelim.Veritabanımızdaki kategoriler tablomuz.

	CREATE TABLE [kategoriler] (
	  [id] int IDENTITY(1, 1) NOT NULL,
	  [kategoriadi] nvarchar(50) NULL,
	  [sira] int NULL,
	  PRIMARY KEY CLUSTERED ([id])
	)
	ON [PRIMARY]
	GO

 

sirala.aspx sayfamızın içeriği

	<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
	<script type="text/javascript" src="jquery-ui-1.7.1.custom.min.js"></script>
	body {
		font-family: Arial, Helvetica, sans-serif;
		font-size: 16px;
		margin-top: 10px;
	}
	#icerik ul{
	    margin:0;width:300px
	}
	#icerik ul li {
		list-style: none;
		margin: 0 0 4px 0;
		padding: 5px;
		background-color:#007dd5;
		color:#fff;
	}
	#icerik li:hover{
	    cursor:move;
	}
	.yeniyer{border:2px dotted #860101}
<script type="text/javascript">
$(document).ready(function(){
    $(function() {
	    $("#icerik ul").sortable({
	        placeholder: 'yeniyer',
	        opacity: 0.6,
	        cursor: 'move',
	        update: function() {
		    var order = $(this).sortable("serialize");
		    $.post("kaydet.aspx", order);
	    }
	    });
    });
});
</script>
	<div id="icerik">
        <ul>
	         <asp:Literal runat="server" ID="liste"></asp:Literal>
        </ul>
    </div>

Sirala.aspx.cs sayfamızın içeriği

 protected void Page_Load(object sender, EventArgs e)
 {
 if(!IsPostBack)
 {
 listeDoldur();
 }
 }
 
protected void listeDoldur() {
 DataTable dt = veritabani.DataTableGetir("select * from kategoriler order by sira asc");
 foreach (DataRow dr in dt.Rows)
 {
 liste.Text += "

	<li id="\&quot;sira_&quot;">" + dr["kategoriadi"].ToString() + "</li>

";
 }
 }
 

kaydet.aspx.cs sayfamızın içeriği, yani sıralama işlemlerini veritabanına yazan sayfamız.

 protected void Page_Load(object sender, EventArgs e)
 {
 string gelen = Request.Form.ToString().Replace("%5b%5d", "[]").Replace("sira[]=", "");
 char[] ayrac = new char[] { '&amp;' };
 string[] gelenler = gelen.Split(ayrac);
 int i = 1;
 foreach (string veri in gelenler)
 {
 veritabani.guncelle("Update kategoriler set sira='" + i + "' where id=" + veri + " ");
 i++;
 }
 }
 

Örneğin tamamını indirmek için tıklayın. Çalışan örneğe buradan bakabilirsiniz.

Aynı kullanıcı adı daha önceden kullanılmışmı doğrulaması.

Bir kullanıcı kayıt formumuz varsa, önceden kaydedilmiş kullanıcıyı tekrardan
kaydetmemek için bir kontrol yapıp, yeni üye olacak kullanıcıya bu kullanıcı adı
kullanımda gibisinden bir hata verdirmemiz gerekir. Çünkü aynı kullanıcı adından
2 veya daha fazla olursa karışıklıklar meydana gelir ve bunu kimse istemez.
Mantığımız çok basit, yeni yazılan kullanıcı adını eski kayıtlar içerisinden
kontrol edip eğer varsa uyarı veriyor yoksa kayıt işlemini tamamlıyoruz. Bunu
tek bir sql cümlesinde çözmemizde mümkün fakat yeni başlayan arkadaşların olayın
mantığını anlaması açısından c# da kod yazarak bu sorunu çözeceğiz.

Düzenleme
Kullanıcı adını yazıp diğer textboxa geçtiğiniz anda kontrolü yapıp, kullanıcı adı yanına anında müsaitmi değilmi bilgisini yazdırıyoruz. Burada textboxın ontextchanged özelliğinden faydalanıyoruz. Eğer işlem gerçekleştirilirken sayfanın postBack olmasını istemiyorsanız formu UpdatePanel içine alarak isteği gerçekleştirebilirsiniz.

[/html]
SqlConnection conn = new SqlConnection(veritabani.baglanti());//bağlantı cümleniz burada olacak.
protected void Button1_Click(object sender, EventArgs e)
{
if (!kontrol(kullaniciadi.Text)) { //False ise, yani böyle bir kullanıcı yoksa ekleme işlemini yapıyoruz.
SqlCommand sql = new SqlCommand(“insert into kullanicilar (kullaniciadi,sifre,telefon) values (‘”+kullaniciadi.Text+”‘,'”+sifre.Text+”‘,'”+telefon.Text+”‘)”, conn);
conn.Open();
sql.ExecuteReader();
conn.Close();
sql.Dispose();
kullaniciadi.Text = null;
sifre.Text = null;
telefon.Text = null;
mesaj.Text = “Kayıt başarıyla yapıldı !”;
}
else
{
mesaj.Text = “Bu kullanıcı adı kullanımda !”;
}
}

private bool kontrol(string gelenkullanici) {
bool varmisinYokmusun;
SqlCommand sql = new SqlCommand(“Select * from Kullanicilar where kullaniciadi='”+gelenkullanici+”‘”, conn);
conn.Open();
SqlDataReader dr = sql.ExecuteReader();
//eğer kayıt varsa True, yoksa False döndürüyoruz.
varmisinYokmusun = dr.HasRows;
conn.Close();
dr = null;
return varmisinYokmusun;
}

protected void kullaniciadi_TextChanged(object sender, EventArgs e)
{
if (kontrol(kullaniciadi.Text))
{
durum.Text = “Bu kullanıcı adı kullanımda !“;
}
else
{
durum.Text = “Bu kullanıcı adı müsait !“;
}
}
[/html]

		<table border="1" width="100%">
	        <tr>
		        <td>kullanıcı adı</td>
		        <td>
                    <asp:TextBox AutoCompleteType="Disabled" ID="kullaniciadi" runat="server" ontextchanged="kullaniciadi_TextChanged" AutoPostBack="true"></asp:TextBox>
                    <asp:Label runat="server" ID="durum"></asp:Label>    
                </td>
	        </tr>
	        <tr>
		        <td>şifre</td>
		        <td>
                    <asp:TextBox ID="sifre" runat="server"></asp:TextBox></td>
	        </tr>
	        <tr>
		        <td>telefon</td>
		        <td>
                    <asp:TextBox ID="telefon" runat="server"></asp:TextBox></td>
	        </tr>
	        <tr>
		        <td><asp:Label runat="server" ID="mesaj" ForeColor="Red"></asp:Label></td>
		        <td>
                    <asp:Button ID="Button1" runat="server" Text="Ekle !" onclick="Button1_Click" /></td>
	        </tr>	        
        </table>

Çalışan örneğe

buradan
ulaşabilirsiniz.
Bu yazıyı aldığım bir eposta üzerine yazdım, umarım faydalı olmuştur. Herkese iyi çalışmalar.

GridView Satırlarını tıklayınca genişletmek (Expand Rows)

Nedenini bilmiyorum ama başlığı seçerken epeyce zorlandım, neyse ki bir tane buldum :) Konumuza dönelim, GridView kontrolünde verileri listeletirken ilgili satırın altında ilişkili diğer kayıtları göstermemiz gerekebiliyor. Bu sayede kullanıcıya çok işlevsel bir listeleme yapabiliyoruz. Bu işlem için genelde kullanılan yöntem; tüm verilerin tümünün çekilip sonra javascript kullanarak göster-gizle şeklinde gösterilmesi. Bu yöntemde ciddi anlamda performans sıkıntısı yaşarız çünkü 40 tane kaydımız olsa ve bu kayıtlara ait 5′ er de alt kayıt olsa ilk seferde toplam 200 kayıt listelemiş oluyoruz. Anlatacağım yöntemde bu işi jQuery Ajax ile birlikte verimli ve efektif bir şekilde çözeceğiz. (Bugün çok değişik bir gün sanırım havalardan kaynaklanıyor, anlatım bozukluğu varsa kusuruma bakmayın) Mekanızmamız iki adet .aspx sayfasından oluşuyor. Birincisi normal kayıtlarımızı listelettiğimiz GridGenislet.aspx diğeri ise üzerine tıklayınca açılacak olan kısmın bilgilerini getiren Genisle.aspx GridGenislet.aspx sayfamızın ilgili kodlarına bakalım. Burada jQuery ile açılıp kapanma işlemi sırasında oluşacak efekt işini ve Genisle.aspx sayfamıza Ajax ile ilgili kayıtların gelmesini sağlayacak fonksiyonumuzu yazıyoruz. Sonrada Tümünü Göster ve Tümünü Gizle olayını ekledim. Sırf jQuery i biraz daha algılayabilmek adına :)

	$(document).ready(function(){
		$('a#tgizle').click( tumunuGizle );
		$('a#tgoster').click( tumunuGoster );
	});

	function tumunuGizle(){
	    $('div.genisleyenDiv').slideUp();
	}

	function tumunuGoster(){
	    $("div.genisleyenDiv").each(function()
        {
           goster($(this).attr('id'));
        });
	}
	//can damarımız burdaki fonksyion, genisle.aspx e id bilgisini gönderip sayfamızda gösteriyoruz.
	function goster(divId)
	{
		$('div#'+divId).toggle('slow');
		$('div#'+divId).load('Genisle.aspx?Id='+divId);
	}

GridGenislet.aspx.cs sayfamızın ilgili kodlarına bakalım.

	DataTable dt = veritabani.DataTableGetir("Select top 10 id,baslik,icerik,tarih from yazilar");
	GridView1.DataSource = dt;
	GridView1.DataBind();

	for (int i = 0; i &lt; GridView1.Rows.Count; i++)
	{
		//burada hersatırın onclick özelliğine goster fonksiyonumuzu atıyoruz ve ilgili id yi yazdırıyoruz.
	    GridView1.Rows[i].Cells[0].Attributes.Add("onclick", "goster('" + dt.Rows[i][0].ToString() + "')");
	}

Genisle.aspx sayfamızda ise gelen id değerini alıp sql cümlemizdeki yerine koyuyor ve listeletiyoruz. Burdaki yöntemde ben GridView üzerine anlatmaya çalışıyorum, mantığı anlarsanız çoğu yerde bu mekanizmayı kullanabilirsiniz.

Sadece dilimin döndüğünce mantığı anlatmaya çalıştım, eğer isteyen olursa çalışır kodları da paylaşabilirim. Çalışan örneği görmek için tıklayın. Zaman problemim nedeniyle css ile süsleyemedim, istendiği taktirde çok şık bir görünüm verilebilir. Herkese güzel günler diliyor ve konuyu burada noktalıyorum.

ASP.NET DropDownList, CheckBoxList ve RadioButtonList Kontrollerinin Kullanımı

Klasik asp den asp.net e zar zorda olsa geçmiş biri olarak, .net’ in en hayran olduğum kısımlarından biride form elemanlarının kullanım esnekliği. Yani bir sürü kodla yaptığımız işleri asp.net de çoğu zaman hiç kod yazmadan halledebilmemiz mümkün. Hele ki  Ajax Control Toolkit ile birleşince mükemmel sonuçlar elde ediyorsunuz. Bu yazımda ajaxı işin içine katmadan, sadece temel hatlarıyla DropDownList, CheckBoxList ve RadioButtonList kontrollerinin en çok kullanılan özelliklerini anlatmaya çalışacağım. DropDownList: En aşina olduğumuz kontrollerin başında geliyor. Bu kontrolün içine eleman nasıl ve ne şekilde ekleniyor bir bakalım.

DropDownList1.Items.Add("Eleman Ekle");
// bu şekilde eleman eklediğimizde value = "Eleman Ekle" olacaktır, yani kullanıcının gördüğünün aynısı.
DropDownList1.Items.Add(new ListItem("Görünen Kısım", "değerimiz"));
// burada ise istediğimiz value değerini atayabiliyoruz. "değerimiz" value miz oluyor.
DropDownList1.Items.Insert(0,"Index kullanımı");
// buradaki 0 eklenecek elemanımızın sırasını tahin ediyor. 0 = en üst

CheckBoxList: İçinde checkbox lar olan liste şeklindeki elemanımız oluyor yani birden fazla seçim yapabildiğimiz bir kontrol. Html de böyle bir eleman bulunmuyor, kod yazarak bu tarz bir seçim listesi yapabiliyorduk. Yapması ayrı sıkıntı içinden veri alması apayrı bir sıkıntıydı. Özelliklede RepeatColumns, RepeatDirection ve RepeatLayout gibi ayarlarıyla tam manasıyla istediğimiz şekilde listeleme yapmamıza olanak sağlayan bu kontrolün içinden veri almak da çok basit ve zahmetsiz. DropDownList e eklediğimiz şekilde CheckBoxList içine ekleme yapabiliyoruz. Kodları buraya yazmıyorum,  indirilebilir örnek de hepsi bulunuyor.

Varsayılan şekliyle CheckBoxList

RepeatColumns=”5″ değerini verdiğimizde oluşan görüntü.

RepeatColumns=”5″ ve RepeatDirection=”Horizontal” değerlerini verdiğimizde oluşan görüntü.

RadioButtonList: CheckBoxList’ in tüm özelliklerini taşıyan bu kontrolün ayrıldığı nokta, sadece bir tane seçim yapabilmemiz.

Yukarıda anlattığım kontrollerin veritabanı ile bağlantısı ise şu şekilde yapılıyor.

SqlConnection conn = new SqlConnection("bağlantı cümlemiz");
SqlDataAdapter sqlAdap = new SqlDataAdapter("Select * from TabloAdi", conn);
DataSet Ds = new DataSet();
sqlAdap.Fill(Ds);
kontrol.DataSource = Ds;
kontrol.DataTextField = "alanAdi"; //görünecek kısım
kontrol.DataValueField="alanAdi2"; //değer (value) kısmı
kontrol.DataBind();

İlgili dosyaları buradan indirebilirsiniz. Umarım faydalı bir yazı olmuştur :)

GridView ve Modal Popup Extender ile birlikte çalışma

Ajax uygulamaları artık web sayfalarının olmazsa olmazlarından, Asp.Net ile birlikte  Ajax Control Toolkit ile birlikte ajaxın nimetlerinden en iyi ve rahat şekilde faydalanmamız hedeflenmiş. Bu yazımda Modal Popup Extender ile GridView satırında bulunan kaydın id si ile birlikte nasıl işlerimizi yürüteceğimizi anlatmaya çalışacağım. Bu konuda beni bilgilendiren Yunus Emre ye sonsuz teşekkürlerimi sunuyorum.

Burada Modal Popup kontrolüne ait bilgiler bulunuyor. Klasik kullanımı oldukça basit olan bu kontrolü GridView gibi kayıtların listelendiği nesnelerde kullanmak için farklı yöntemler kullanmak gerekiyor. Bu yöntemde aptal buton adı verilen bir buton kullanıp, modal popupu bir nevi kandırıp hata vermemesini sağlıyacağız. Modal Popupumuzun güzel görünmesi için gerekli olan sitil kodlarımız.

.popupArka{
    background-color:#333;
    filter:alpha(opacity:90);
}

.popupKapat{
    text-align:right;
    background-color:#706c6c;
    padding:2px;
    border-bottom:1px solid #c0c0c0;
}

.popupKapat input{
    font-weight:bold;
    width:25px;
    height:25px;
}

.popupKapat span{
    float:left;
    font-size:18px;
    color:White;
    font-weight:bold;
}

Üstten aşşağıya doğru açıklamaya çalışayım. ScriptManager ajax kontrollerinin çalışması için gerekli olan mekanızmamız. UpdatePanel, içerisinde olayların ajax kullanılarak gerçekleşeceği alan. Yani burada sayfamız yenilenmeden işlemlerimiz gerçekteşecek. GridView bildiğimiz Grid :) burda dikkat etmemiz gereken noktalar onrowcommand=”GridView1_RowCommand” burdaki ifadeyi aşşağıdaki kodlarda görebilirsiniz. TemplateField içinde bir adet LinkButon’ umuz bulunuyor. Bunu normal buton imagebuton şeklinde de değiştirebilirsiniz. Buna tıklandığında modalboxumuz açılacak. Burdaki önemli nokta  CommandName=”Detay” ve ommandArgument=’gidecekDeğer’ Aşşağıya indiğimizde modal boxun kendisini görüyoruz. İçinde sitil ve diğer tanımlamalarımız bulunuyor. Bu tanımlamalardan biride yukarda bahsettiğim aptalbuton. Hemen altta ise panel‘ imizi panelimizi görüyoruz. ModalPopup bu paneli bize gösterecek. Belki biraz karışık bir anlatım oldu ama örneği uygulayınca hiçde öyle olmadığını göreceksiniz ve sürekli bu kontrolü kullanmak isteyeceksiniz.

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<div class="popupKapat"><span>Modal Box Başlık</span></div>

RowCommand’ dan gelen Detay adındaki butonumuzu bulup, iFrameOlustur methodumuzu çalıştırıyoruz. iFrameOlustur methodumuzda popupPanel içine myiframe kontrolünü ekliyoruz. Kodlara bakıldığında herşeyin anlaşıldığını düşünüyorum.

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Detay")
{
iFrameOlustur("GosterilecekSayfa.aspx?Id=" + e.CommandArgument, "800", "500");
ModalPopupExtender1.Show();
}
}

protected void iFrameOlustur(string src, string width, string height)
{
HtmlGenericControl myiframe = new HtmlGenericControl("iframe");
myiframe.Attributes.Add("frameborder","0");
myiframe.Attributes.Add("src", src);
myiframe.Attributes.Add("width", width);
myiframe.Attributes.Add("height", height);
popupPanel.Controls.Add(myiframe);
}

Evet arkadaşlar bir yazının daha sonuna geldik. İnşallah işinize yarayan bir yazı olur. Hepinize güzel günler diliyorum.

Web Servis Yazmak ve Kullanmak

Bu yazımda elimden geldiğince Web Service (Web Servis) konusuna değinmeye çalışacağım. Öncelikle web servis nedir sorusunun cevabını kendimce vermeye çalışayım. Çeşitli uygulamalar geliştiren bir firma olduğunuzu kabul edelim. Projelerinizde sık sık kullandığınız yapılar var örneğin, seçilen şehire göre ilçeleri listeleme veya döviz kurlarını gösterme gibi.. Biraz daha geniş düşünürsek, birden fazla uygulamada kullandığımız sanal posları tek bir merkezde toplayıp, istediğimiz uygulamadan veri gönderip işlemlerimizi gerçekleştirebiliriz. Servislerin bir güzelliği de, php, klasik asp, jsp, java vb.. dillerlede çok rahat bir şekilde kullanılması. Ne kadar yazarsam yazayım web servisin nimetlerini uygulamadan görmemiz imkansız. Öncelikle burada ve şurada ki makalelere göz atmanızda fayda var.

Visual Studio 2008′ i çalıştırıp, File / New Project / ASP.NET Web Service
Application
‘ a tıklayıp yeni projemizi oluşturuyoruz.

Karşımıza ilk gelen ekran şu şekilde olacaktır.

Hiç birşey yapmadan projemizi çalıştırıp örneğimizi gözlemliyoruz. (F5) Gördüğünüz gibi karşınıza HelloWorld adındaki işlemimiz geldi. Sayfadaki tasarımıda biz yapmadık otomatik geldi.

HelloWorld işlemine tıkladığımızda Çağır adındaki butonu görüyoruz, alt satırlarda gerekli açıklamalar yer alıyor.

Çağır butonuna tıkladığımızda, karşımıza xml şeklide bir veri geliyor. Hello World değişkeni string olduğu için string olarak geri döndü.

Gördüğünüz gibi çok basit bir yapı. Hemen kendimize bir işlem yazalım ve bilgimizi pekiştirelim. Projemize geri dönüyoruz ve HelloWord un altına yazmaya başlıyoruz. İşlemimiz ad ve soyad kontrolü yapıp geriye bool (true, false) bir değer döndürsün.

    [WebMethod]
    public bool ilkServisimiz(string ad, string soyad)
    {
        bool geriDonecekDeger;
        if (ad == "ali" && soyad == "veli")
        {
            geriDonecekDeger = true;
        }
        else
        {
            geriDonecekDeger = false;
        }
        return geriDonecekDeger;
    }
    //gördünüz gibi klasik c# dan hiç bir fark bulunmuyor.
    //servisde görüntülenecek işlemin kodlarının başına [WebMethod] eklememiz yeterli.

Bu basit yapıda ad ve soyad adında iki stringi alıp kontrol ediyoruz. Eğer istediğimiz bilgiler gelirse true değilse false döndürüyoruz. Projemizi hemen çalıştırıyoruz. HelloWorld şleminin altında ilkServisimiz adındaki işlemi görmüş olmamız gerekiyor. Tıklayıp çalıştırdığımızda bizden ad ve soyad değişkenlerini isteyen bir form görüntüleniyor. ali veli yazıp çağır dediğimizde sonuç true olarak, aksi durumda false olarak dönüyor. İlk servisimiz hayırlı uğurlu olsun :)

Şimdi web servis uygulamamızı web sayfalarımızda nasıl kullanacağımıza bakalım. Hemen Visual Studio 2008 den File / New Web Site diyoruz. Default.aspx sayfamızın içine hemen aşağıdaki gibi basit bir form koyuyoruz.

Ad

&lt;asp:TextBox ID="txtad" runat="server"&gt;&lt;/asp:TextBox&gt;

&lt;br /&gt;

Soyad

&lt;asp:TextBox ID="txtsoyad" runat="server"&gt;&lt;/asp:TextBox&gt;

&lt;br /&gt;

&lt;asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Gönder" /&gt;

&lt;br /&gt;

&lt;asp:Label runat="server" ID="lblmesaj" ForeColor="Red"&gt;&lt;/asp:Label&gt;

Şimdi gelelim web servisimizi web sayfamızda kullanmak için gerekli adımlara.  Solution Explorer dan sağ tuş tıklayıp Add Web Reference diyoruz.

Açılan pencereye oluşturduğumuz web servisin adresini girip Go diyoruz. Karşımıza işlemlerimiz geliyor ve ilkServisimiz adlı işleme tıklıyoruz.

Görüldüğü gibi web servis projemizi çalıştırdığımızdaki ekranlar ile birebir aynı bir arayüz geliyor karşımıza. Web reference name kısmında referans için bir isim giriyoruz. Ben ebreferansim diye giriyorum ve Add Reference ye tıklayıp projeme dahil ediyorum.

Solution Explore baktığımızda APP_WebReferences klasörünün altına gerekli dosyaların geldiğini görüyoruz. Aynı projede birden fazla web servis kullanmamız mümkün.

Default.aspx.cs dosyamıza gidip kodlarımızı yazmaya başlıyoruz. Unutmadan kodlarımızı oluşturduğumuz formdaki butonun onclick özelliğine yazıyoruz.

protected void Button1_Click(object sender, EventArgs e)
{
// servis adındaki nesnemizi oluşturuyoruz.
webreferansim.Service1 servis = new webreferansim.Service1();

//hemen servisimiz içindeki kodları hatırlayalım
//---------------------------------------------------
//[WebMethod]
//public bool ilkServisimiz(string ad,string soyad) {}
//aşşağıdaki satırda, ad ve soyad değişkenlerini aynen methodumuza gönderiyoruz.
bool servistenGeriDonenDeger = servis.ilkServisimiz(txtad.Text, txtsoyad.Text);

//dönen değeri ekrana yazdırıyoruz.
Response.Write("Geri dönen değerimiz: <strong>" + servistenGeriDonenDeger + "</strong>");

//pekiştirmek için basit bir if bloğu
if (servistenGeriDonenDeger)
{
lblmesaj.Text = "Bilgiler doğru !";
}
else
{
lblmesaj.Text = "Bilgiler yanlış !";
}
}

İşte bu kadar gördüğünüz gibi .net ortamında web servis hazırlama ve kullanma işi gerçekten çok basit. Unutmadan burada incelemeye değer çokça servis bulunuyor. Umarım faydalı bir yazı olmuştur, hoşçakalın.

Örnek
dosyaları buradan indirebilirsiniz.