Home »
Posts tagged 'asp.net' (Sayfa 5)
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, onrowcancelingedit, onrowdeleting, 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.
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.

- 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.
- 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.
- 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.
- 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..
- 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..
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.
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.
Dö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="\""" />";
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.
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.
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="\"sira_"">" + 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[] { '&' };
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.
« Newer Posts Older Posts »