Kategoriler


SON YORUMLAR
Tatar Ramazan
Bilgisayar mühendisliğinden şikayet etmeyeyim diyorum ama bütün veriler beni haklı çıkarıyor. Aşağıda yazdık okuyun: Yazılım uzmanı pozisyonu için; 1-) Kariyernette 2000-3000 TL arası maaş veren 100 ilan var. 2-) 3000-6000 arası maş veren 100 ilan 3-) 6000 ve üzeri veren sadece 5 ilan var Bu mu iyi para kazandıran meslek?! Memurluğu iyi ki bırakmamışım. Bir de adamın canını çıkarıyorlar. Her çıkan teknolojiyi öğrenmeni bekliyorlar. İstanbulda kiralar 2000.den başlıyor. 6000 TL bile yüksek maaş falan değil. 2008.de mezun oldum. O zaman da aynı paralar veriliyordu. Zaman geçtikçe aday sayısı artıp rekabet kızıştıkça maaşlar düşüyor, vasatlaşıyor. 2010 yılında 5000 TL kazanan grafikerler duyuyordum. Mesleğimiz yerlerde sürünüyor. Memur olmak ta zorlaşınca uyanık iş veren size iyi para verir mi sanıyorsunuz? Nasıl olsa kaçamazsınız Devlet.e...KPSS zor artık.

yeşekkür ederiz beğendim
Dilara
Merhaba, ben bilgisayar mühendisliği öğrencisiyim yabancı dilimde var ama sitelerden okuduğum yorumlardan dolayı gelecek kaygısı yaşıyorum,nasıl bir yol izlemem gerek lütfen yorumlarınızla bana yardımcı olur musunuz?
sultan b.
makaleniz gerçekten yardımcı ve aydınlatıcı fakat örnekler verirken sürekli .abi, adam. vs özneler kullanmanız beni rahatsız etti. bilgisayar mühendisi olmak isteyen bir kadın olarak açıkçası bu durum beni biraz umutsuzluğa sürüklemedi de değil.
irfan
https://www.udemy.com/linux-and-bash-shell-scripting-from-beginner-to-intermediate/learn/v4/overview
Tatar Ramazan
İlerde düzelecek inşaallahu Teala her şey. Herkes hakkını eninde sonunda alır. Son gülen iyi güler. Başlangıçta bütün mühendisler aynı alır ama kendini geliştiren ilerleyen dönemlerde farkı açar.
tatar ramazan-a
tatar ramazan ağlamayı bırak. kendi şirketini kurma vaktin gelmiş. devletten ayrıl. işveren ol artık. herkesi eleştirmeyi bırak. eleştirilmeyecek bir şirket kur.
bir zamanlar anadoluda
zamanında iyi sürünmüş, iyi aşağılanmış ve itlerin çakalların arasında yaşamış, onlarla savaşmış itliği çakallığı halen öğrenen birisi olarak tavsiyeler: 1- kendini geliştirmek tam bir saçmalıktır (Google vb. mülakatlara falan girmek gibi durumlar hariç) 2- herşey çevrenle başlar çevrenle biter, iş bulma da karı da kız da çevrene bakar. başta suratıma bile bakmayan kızlar, popülerlğimi (milletçe akıllı, çalışkan, başarılı, zengin, cool diye nitelenmek gibi) görünce köpeğim oldu selam dahi vermiyorum yine rahat vermiyorlar. 3- nasıl populer oldum? çalışarak mı? en az çalışanlardandım. 4- algıyı yöneteceksiniz. kendinizi satmayı bileceksiniz. reklamınızı yapacaksınız. kendini satamazsanız ne kız gelir ne iş verirler. 5- o beğenmediğin 3 birimlik erkek veya işe giren eleman, potansiyeli 1 ise 3 gösterir sen 10 ken bişr gösteremezsen, ne karı gelir ne birşey. yarın karın da sygı duymaz gözünün önünde başkasıyla sikişir.
Tatar Ramazan
Site sahibine 2008 de mail atmıştım danışmıştım. O günden beri siteyi takip ederim. Ateşli yazıları kendimi geliştirmemde etkili olmuştur. İstanbul üniversitesi iyi eğitim veriyor diye yorum yazan da bendim. Çok uyanığımdır. Zekam keskindir. Keşke üniversitem de biraz yol gösterseydi. Dersler, kitaplar belli sen niye hocalardan rehberlik bekledin diyecek olursanız: Tamam da bir sürü programlama dili var. Hangisinden başlayacağım, ne bileyim? C dilini öğrenin sonra C# veya java dan devam edersiniz diyebilirlerdi. Bunu bile yapamadılar. Bölüm başkanı da değişmişti. İyi şeyler yapayım derken daha kötü batırdı. Nesne tabanlı programlama dersinde for döngüsü gördük C sharpta. En azından takip programı yaptırdı bize işte. ADO.NET, SQL Server öğrendik. Ama sınıf nesne tabanlı programlamayı bir türlü sökemedi. Çünkü C dilinde struct konusunu öğrenmeyince sınıfları da özümsemek zor oldu. Debelendik durduk. İTÜ, Yıldız Teknik, İstanbul gibi üniversitelerin farkı burda. Bu kadar basit! C, C++ dilini iyi veriyor adamlar. Yahu C dilinin konularını tahtaya yazsaydı araştırma görevlisi bana yeterdi bile. Mıy mıy mıy yapıp durdular 4 sene boyunca. Ben ilk yarıyıl tatilinde (5 haftaydı) evde İntegraldan 200 soru çözüp vize finalden 100-100 almış adamım. Görün işte ben bile geri kalıyorsam programcılıkta öğretimde sorun var demek ki. Site sahibine kalsa üniversite önemli değil. Tabi kendisi İstanbul üniversitesinde iyi eğitim aldı. Kötü öğretimi, ilgisizliği tatmadı.
Tatar Ramazan
Eve şanssızdım her açıdan bundan sonra mutlu olur muyum bilmiyorum. Biz imanlıyız umudumuzu kesmeyiz. Yazdıklarımda doğruluk payı da var ama. Meslek ve sektörde bir sürü sıkıntı var. Sektör yöneticileri ve Üniv. hocaları niye bir araya gelip sorunları çözemiyor. Bilişim sektörü daha verimli büyük olabilirdi. Yazılım çağı diyorsak bu işe bir el atmalıyız. Mesleğimden şikayet ederim ama aynı zamanda ateşli gayretli adamımdır. Üniversitede gene hasta takip programı, satranç oyunu, E-Ticaret sitesi ve irili ufaklı 30 tane program yapmıştım. Çok boş mezun olmadım. Sınıfın ineklerindendim. Marmara bölgesinde 92 den sonra kurulan bir üniversitede okudum. Hocalar ilgisiz ve bilgisizdi. Sınıfın % 70 i C dilini öğrenemeden mezun oldu. Şunu şöyle yapın demekten aciz adamları hoca diye başımıza niye koyuyorlar? Sistemde de saçmalık var. Derslerin çoğu işe yaramıyor. Lise 1 den itibaren programlama çalışsaydım şimdi çok farklı olurdu. Boş yere zaman kaybı okumak. İnsanlara da zulmetmeyin gayrı. Bilim adamı olmak isteyen üniversitede kalsın. Bana Java, .NET, Oracle lazım kardeşim. Okumayanların eşi, arabası var. Ben sürünüp duruyorum. Memur maaşıyla bi şey yapamıyorsun ki. 2 ay önce 5000 tl oldu işte. Harita mühendisine de veriyorlar o kadar zaten. Benim sadece SQL bilgim onları ezmeye yeter.
HARUN AYDIN
YAZI BENİ DE ETKİLEDİ.BENDE BİLGİSAYAR ALANINDA İLERLEMEK İSTİYORUM.İLGİM DE VAR AMA YETERLİ BİLGİM YOK.BU YAZIDA ANLADIM Kİ GEREK DE YOKMUŞ İYİ BİR OKULDAYIM İYİ BİR ÜNİVERSİTE DE KAZANMAK İÇİN ELİMDEN GELENİ YAPICAM. BU YAZI İÇİN ÇOK TEŞEKKÜR EDERİM..
Mehmet Cemil Bayhan
Çok harika bir makale yazmışsınız.Ellerinize sağlık. Beni bayağı gaza getirdi gerçekten. Ben şuan lise 3 öğrencisiyim. Şimdiden bilgisayar hakkında bilgi sahibi olmaya çalışıyordum ama sizin bu yazınızı okuduktan sonra fikrim değişti. Artık şuan düşüneceğim tek şey YGS-LYS. SİZE NE KADAR TEŞEKKÜR ETSEM AZDIR. ÇOOOOOK TEŞEKKÜR EDİYORUM.........😆😉😊
Mehmet Cemil Bayhan
Çok harika bir makale yazmışsın ızgara.Ellerinize sağlık. Beni bayağı gaza getirdi gerçekten. Ben şuan lise 3 öğrencisiyim. Şimdiden bilgisayar hakkında bilgi sahibi olmaya çalışıyordum ama sizin bu yazınızı okuduktan sonra fikrim değişti. Artık şuan düşüneceğim tek şey YGS-LYS. SİZE NE KADAR TEŞEKKÜR ETSEM AZDIR. ÇOOOOOK TEŞEKKÜR EDİYORUM.........😆😉😊
eskidevir-yenidevir
sizin şanssızlığınız olmuş. işler yolunda gitmemiş diye anlıyorum.

Bilgisayar Mühendisleri
Here is the website inspired me to use 
it as a guide when I tried to define 
myself as an engineer candidate a few 
years ago. It really helped me to work
 and study feeling in confidence with 
being on the right way. I suggest this 
website to whom it may direct her/his 
to find the right career path. It 
includes many articles varies from 
real life experiences to detailed 
software engineering issues. But the 
most dignified parts for me are the 
articles in general and career titles.
Son okunan makaleler:
DataGrid ve GridView Kontrollerinde Görünmez Kolonlar
Ajax kullananlar için yükleniyor resimleri
Bir bilgisayar mühendisinin bilmesi gereken en temel teknolojiler
ASP .NET - XML Files
ASP.NET - Event Handlers
Asp.Net 2.0 ve Client Script Callback
Ado.Net 2.0 - Connection Pooling' in Önemi
Bilgisayar Mühendisleri Kaç Para Alır?
Bilgisayar mühendisliğinde okuyan öğrencilere tavsiyeler
ViewState İçeriğini Sıkıştırmak
ASP.NET - The Hashtable Object
Bilgisayar Mühendisliğini yeni kazandım, neler yapmalıyım?
ASP .NET Maintaining the ViewState
ASP.NET - The SortedList Object
ASP.NET - The ArrayList Object
Bilgisayar Mühendisleri Kaç Para Alır?
VNC Nedir? (Virtual Network Computing)
Bilgisayar Mühendisi Ne İş yapar? Program Nedir? Çeşitli Sorular?
Flash CS4’ün Getirdiği Yenilikler
Dünyanın En İyi 500 üniversitesi 2007 Sıralaması Açıklandı

Bilgisayar Mühendisleri Portalı

DataGrid ve GridView Kontrollerinde Görünmez Kolonlar


ASP.NET uygulamalarında, verileri tablo biçiminde görüntülerken, bazı kolonları kullanıcılardan saklamak isteyebiliriz.Bu ihtiyacın birkaç sebebi olabilir.Örneğin tablomuzun primary key kolonu, genelde programcının kullanacağı bir değeri içerir ve kullanıcılar tarafından görülmesi tercih edilmeyebilir.Benzer şekilde programcının, sayfadaki veritabanı işlemlerinde kullanmak üzere tabloya aldığı; ancak kullanıcıların görmelerini istemediği kolonlar olabilir. İşte bu gibi durumlarda akla ilk gelen yol, ilgili kolonun visible özelliğine false atamaktır.

Web’te kullandığımız DataGrid ve GridView kontrolleri arasında, görünmez kolonların ( visible özelliklerine false atanmış olan kolonlar ) işleyişi bakımından önemli farklar mevcuttur. Eğer veritabanından gelen bilgi içerisinde, kullanıcılardan saklamak istediğimiz kolonlar var ise her iki kontrol (DataGrid ve GridView) için farklı şekilde düşünmemiz gerekir. Bu durum, GridView kontrolünün görünmez kolonlara veri bağlamamasından kaynaklanır. Şimdi, isterseniz, bir web site projesi üzerinden ilerleyerek problemi daha net görmeye ve çözüm yollarını incelemeye çalışalım.

Öncelikle yeni bir web site projesi açıp, sayfamızı aşağıdaki gibi oluşturalım. Ben, yapacağımız örneklerde AdventureWorks veritabanını kullanacağım. Eğer AdventureWorks sisteminizde bulunmuyor ve başka bir veritabanında çalışıyorsanız, bağlantı ayarının yanı sıra HeaderText ve DataField bildirimlerini de gelen veriye göre düzenlemeniz gerekir.

default.aspx
<asp:TextBox ID="txtRowIndex" runat="server" />
<asp:Button ID="btnGoruntule" runat="server" Text="Görüntüle" OnClick="btnGoruntule_Click" />

<asp:SqlDataSource ID="dsProduct" runat="server"
   ConnectionString="data source=localhost;database=AdventureWorks;integrated security=SSPI"
   SelectCommand="SELECT ProductID, Name, ListPrice, SellStartDate FROM Production.Product">
</asp:SqlDataSource>

<asp:DataGrid ID="dgProducts" runat="server" AutoGenerateColumns="False" OnItemDataBound="dgProducts_ItemDataBound" >
   <Columns>
      <asp:TemplateColumn HeaderText="RowIndex">
         <ItemTemplate>
            <asp:Label ID="lblRowIndex" runat="server"></asp:Label> <%-- Satır numalarını tutmak için faydalandığımız Label --%>
         </ItemTemplate>
      </asp:TemplateColumn>
      <asp:BoundColumn HeaderText="ProductID" DataField="ProductID"  Visible="False" /> <%-- ProductID kolonunu gizlemek istiyoruz --%>
      <asp:BoundColumn HeaderText="Name" DataField="Name" />
      <asp:BoundColumn HeaderText="ListPrice" DataField="ListPrice" />
      <asp:BoundColumn HeaderText="SellStartDate" DataField="SellStartDate" />
   </Columns>
</asp:DataGrid>

default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
   dgProducts.DataSource = dsProduct;
   dgProducts.DataBind();
}

protected void btnGoruntule_Click(object sender, EventArgs e)
{
   int satirSayisi=Convert.ToInt16(txtRowIndex.Text);
   string gelenDeger = dgProducts.Items[satirSayisi].Cells[1].Text; //İstenen satırın ProductID değeri
  
   Response.Write(satirSayisi+" indeksli verinin ProductID değeri:"+gelenDeger);
}

int index = 0;
protected void dgProducts_ItemDataBound(object sender, DataGridItemEventArgs e)
{
   //Template kolonumuzda satır numaralarını oluşturuyoruz

   DataGridItem gelenSatir=e.Item;

   try // e parametresiyle yakaladağımız satırın RowType özelliği hataya sebep verecek bir değer içeriyorsa görmezden gel ( Header gibi )
   {
      Label lblIndex = (Label)gelenSatir.Cells[0].FindControl("lblRowIndex");
      lblIndex.Text = index.ToString();
      index++;
   } catch { }
}

Sayfamızı oluşturduktan sonra çalıştırıp test edelim.



Açılan sayfada TextBox içerisine tablodaki RowIndex’lerden birini yazıp ProductID değerini elde edebiliyoruz. Yani erişilen kolonun görünür olup olmaması herhangi bir sorun teşkil etmiyor.
Şimdi bir de GridView için, aynı işlemin ne gibi sonuçlar doğuracağını görmek amacıyla projemize yeni bir web form ekleyip aşağıdaki gibi tasarlayalım.

default2.aspx
<asp:TextBox ID="txtRowIndex" runat="server" />
<asp:Button ID="btnGoruntule" runat="server" Text="Görüntüle" OnClick="btnGoruntule_Click" />

<asp:SqlDataSource ID="dsProduct" runat="server"
   ConnectionString="data source=localhost;database=AdventureWorks;integrated security=SSPI"
   SelectCommand="SELECT ProductID, Name, ListPrice, SellStartDate FROM Production.Product">
</asp:SqlDataSource>

<asp:GridView ID="gvProducts" runat="server" AutoGenerateColumns="false" OnRowDataBound="gvProducts_RowDataBound">
   <Columns>
      <asp:TemplateField HeaderText="RowIndex">
         <ItemTemplate>
            <asp:Label ID="lblRowIndex" runat="server" />
         </ItemTemplate>
      </asp:TemplateField>
      <asp:BoundField HeaderText="ProductID" DataField="ProductID" Visible="False" /> <%-- ProductID kolonunu gizlemek istiyoruz --%>
      <asp:BoundField HeaderText="Name" DataField="Name" />
      <asp:BoundField HeaderText="ListPrice" DataField="ListPrice" />
      <asp:BoundField HeaderText="SellStartDate" DataField="SellStartDate" />
   </Columns>
</asp:GridView>

default2.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
   gvProducts.DataSource = dsProduct;
   gvProducts.DataBind();
}

protected void btnGoruntule_Click(object sender, EventArgs e)
{
   int satirSayisi = Convert.ToInt16(txtRowIndex.Text);
   string gelenDeger = gvProducts.Rows[satirSayisi].Cells[1].Text; //İstenen satırın ProductID değeri
  
   Response.Write(satirSayisi + " indeksli verinin ProductID değeri:" + gelenDeger);
}

int index = 0;
protected void gvProducts_RowDataBound(object sender, GridViewRowEventArgs e)
{
   //Template kolonumuzda satır numaralarını oluşturuyoruz

   GridViewRow gelenSatir = e.Row;

   try
   {
      Label lblIndex = (Label)gelenSatir.Cells[0].FindControl("lblRowIndex");
      lblIndex.Text = index.ToString();
      index++;
   } catch { }
}

Default2.aspx sayfasını çalıştırıp, herhangi bir satırın ProductID değerini elde etmeye çalışalım.



Gördüğünüz gibi, istediğimiz sonucu alamamıza rağmen, çalışma zamanında bir istisnayla ( exception ) karşılaşmıyoruz. Başka bir deyişle, gizlenmiş ProductID kolonu bize değer olarak boş bir string ifadesi döndürüyor. Peki sebep nedir?

Her şey güvenlik için

DataGrid kullandığımızda,kolonun visible özelliğinin true ya da false olduğuna bakılmaksızın veri bağlanıyor ve bu bilgi ViewState içerisinde yerini alıyor.Eğer ihtiyacımız olan şey tablodaki bir kolonu kullanıcılardan saklamaksa, tahmin edersiniz ki, bu pek güvenli bir yöntem değildir.ViewState bilgisi enkript edilmediğinde istemciler tarafından okunur formatta elde edilebilir.Bu da sayfamız için önemli bir güvenlik açığıdır.İşte bu yüzden, ASP.NET 2.0 ile birlikte gelen GridView kontrolünde, gizlenmek istenen kolonların korunumu adına alınmış bazı önlemler vardır.Yaptığımız örnekte yaşadığımız problem de, aslında, görünmeyen kolonlara veri bağlanmamasından kaynaklanmaktadır.Öyleyse GridView’de bir kolonu görünmez yapamıyorsak, gizlemek istediğimiz bir kolon olursa nasıl bir yol izleyebiliriz?Bu amaçla GridView kontrolü içerisinde yer alan DataKeys özelliğinden faydalanacağız.

ViewState bilgisi her ne kadar okunamaz görünse de, Base64 encoding yapılarak elde edilmiş basit bir değerdir ve çeşitli araçlarla okunur hale getirilmesi oldukça basittir.Bu yüzden ViewState içerisinde kredi kartı bilgisi gibi önem arz eden verileri saklamak çok tehlikeli sonuçlar doğurabilir.

DataKeys kullanımı

Default2.aspx sayfamızı aşağıdaki gibi değiştirelim.

default2.aspx
<asp:TextBox ID="txtRowIndex" runat="server" />
<asp:Button ID="btnGoruntule" runat="server" Text="Görüntüle" OnClick="btnGoruntule_Click" />

<asp:SqlDataSource ID="dsProduct" runat="server"
   ConnectionString="data source=localhost;database=AdventureWorks;integrated security=SSPI"
   SelectCommand="SELECT ProductID, Name, ListPrice, SellStartDate FROM Production.Product">
</asp:SqlDataSource>

<asp:GridView ID="gvProducts" runat="server" AutoGenerateColumns="false" OnRowDataBound="gvProducts_RowDataBound" DataKeyNames="ProductID" >
   <Columns>
      <asp:TemplateField HeaderText="RowIndex">
         <ItemTemplate>
            <asp:Label ID="lblRowIndex" runat="server" />
         </ItemTemplate>
         </asp:TemplateField>
      <asp:BoundField HeaderText="Name" DataField="Name" />
      <asp:BoundField HeaderText="ListPrice" DataField="ListPrice" />
      <asp:BoundField HeaderText="SellStartDate" DataField="SellStartDate" />
   </Columns>
</asp:GridView>

Farkettiyseniz,DataKeyNames özelliğine ProductID değerini atadıktan sonra GridView’e bağladığımız kolonlar arasından ProductID’yi çıkarıyoruz.Aslında çıkarıp çıkarmamazın bir önemi yok.Daha önce dediğimiz gibi GridView içerisindeki görünmez kolonlara veri bağlanmıyor.Biz DataKeyNames özelliğini kullanarak ilgili verilerin DataKeys koleksiyonunda tutulacağını söylüyoruz.Dolayısıyla veriye bu özellik yardımıyla ulaşacağımız için ayrıca bir kolon eklenmesine gerek kalmıyor. Ardından kod tarafına geçip, DataKeys özelliği yardımıyla ProductID değerlerine erişelim.
 
default2.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
   gvProducts.DataSource = dsProduct;
   gvProducts.DataBind();
}

protected void btnGoruntule_Click(object sender, EventArgs e)
{
   int satirSayisi = Convert.ToInt16(txtRowIndex.Text);
   string gelenDeger = gvProducts.DataKeys[satirSayisi].Value.ToString(); //İstenen satırın ProductID değeri
   Response.Write(satirSayisi + " indeksli verinin ProductID değeri:" + gelenDeger);
}

int index = 0;
protected void gvProducts_RowDataBound(object sender, GridViewRowEventArgs e)
{
   //Template kolonumuzda satır numaralarını oluşturuyoruz

   GridViewRow gelenSatir = e.Row;

   try
   {
      Label lblIndex = (Label)gelenSatir.Cells[0].FindControl("lblRowIndex");
      lblIndex.Text = index.ToString();
      index++;
   } catch { }
}

Artık default2.aspx sayfamızı çalıştırdığımızda, istenen satırın ProductID değerini elde edebildiğimizi görüyoruz.



Yaptığımız tek şey, gizlemek istediğimiz kolonu DataKeyNames özelliğinde belirtmektir. Bundan sonra, DataKeys içerisindeki Key tipinden nesnelere erişebiliyor ve ProductID değerlerini elde edebiliyoruz. ( Value özelliği aracılığıyla )

Gelelim bu yöntemi daha güvenli kılan şeyin ne olduğuna. GridView’de bir kolonu gizlediğinizde, bu verinin, korunması gereken bir veri olduğu kabul edilir. Ancak kolona bağlanan veri, ViewState ile birlikte istemcilere okunur formatta ( enkript edilmemişse ) ulaşacağından; GridView, programcıyı DataKeys kullanmaya zorlar.Çünkü biz DataKeyNames özelliğine değer atadığımızda, farkında olmadan ViewState ve ControlState’in enkript edileceğini de söylemiş oluyoruz ve böylece içeriğin korunumu sağlanıyor.

ASP.NET 2.0’la gelen bu yenilik güvenlik açısından faydalı görünüyor; ancak, tahmin edersiniz ki, DataKeyNames kullanmak, performans kaybına ve sayfa boyutunun artmasına neden oluyor.Eğer performans kaygınız varsa ve DataKey değerlerinin istemcilere açık şekilde gitmesi bir sorun yaratmıyorsa,enkript işlemini engelleyerek belli bir performans artışı sağlayabilirsiniz.Bunun için web.config içerisinden system.web altındaki pages tagının viewStateEncryptionMode özelliğine "Never" değerini atamak gerekir. ( Varsayılan değeri "Auto" olduğu için - herhangi bir ayar yapmadıysanız - DataKeyNames’e değer atadığınızda ViewState mutlaka enkript edilir. )

<pages viewStateEncryptionMode="Never" />

DataKeys, ControlState içerisinde tutulur.

DataKeyNames, DataKeyField özelliğine benzer olup, önemli bir farkı çoklu kolon kullanımına izin vermesidir.Bunu nasıl yapacağımızı görmek amacıyla bir web form daha yaratalım ve sayfaya aşağıdaki kodu ekleyelim.

default3.aspx
<asp:TextBox ID="txtRowIndex" runat="server" />
<asp:Button ID="btnGoruntule" runat="server" Text="Görüntüle" OnClick="btnGoruntule_Click" />

<asp:SqlDataSource ID="dsProduct" runat="server"
   ConnectionString="data source=localhost;database=AdventureWorks;integrated security=SSPI"
   SelectCommand="SELECT ProductID, Name, ListPrice, SellStartDate FROM Production.Product">
</asp:SqlDataSource>

<asp:GridView ID="gvProducts" runat="server" AutoGenerateColumns="false" OnRowDataBound="gvProducts_RowDataBound" DataKeyNames="ProductID,Name" >
   <Columns>
      <asp:TemplateField HeaderText="RowIndex">
         <ItemTemplate>
            <asp:Label ID="lblRowIndex" runat="server" />
         </ItemTemplate>
      </asp:TemplateField>
      <asp:BoundField HeaderText="ListPrice" DataField="ListPrice" />
      <asp:BoundField HeaderText="SellStartDate" DataField="SellStartDate" />
   </Columns>
</asp:GridView>

default3.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
   gvProducts.DataSource = dsProduct;
   gvProducts.DataBind();
}

protected void btnGoruntule_Click(object sender, EventArgs e)
{
   int satirSayisi = Convert.ToInt16(txtRowIndex.Text);
  
   string gelenProductID = gvProducts.DataKeys[satirSayisi].Values[0].ToString(); //İstenen satırın ProductID değeri
   string gelenName = gvProducts.DataKeys[satirSayisi].Values[1].ToString(); //İstenen satırın Name değeri
  
   Response.Write(satirSayisi + " indeksli verinin ProductID değeri:" + gelenProductID + "<br>");
   Response.Write(satirSayisi + " indeksli verinin Name değeri:" + gelenName);
}

int index = 0;
protected void gvProducts_RowDataBound(object sender, GridViewRowEventArgs e)
{
   //Template kolonumuzda satır numaralarını oluşturuyoruz

   GridViewRow gelenSatir = e.Row;

   try
   {
      Label lblIndex = (Label)gelenSatir.Cells[0].FindControl("lblRowIndex");
      lblIndex.Text = index.ToString();
      index++;
   } catch { }
}

DataKeyNames’e değer atarken, kullanmak istediğimiz kolonları virgülle ayırarak belirtebiliyoruz.Böylece birden fazla kolon da DataKeys içerisinde tutulabiliyor.




TemplateField kullanımı

GridView’de visible özelliği false olan kolonlara veri bağlanmadığını biliyoruz.Fakat bu kolon bir TemplateField olursa,içerisine koyacağımız bir kontrolü veriyi elde etmek amacıyla kullanabiliriz.
Öyleyse projemize yeni bir web form ekleyerek, TemplateField kullanımını incelemeye çalışalım.

default4.aspx
<asp:TextBox ID="txtRowIndex" runat="server" />
<asp:Button ID="btnGoruntule" runat="server" Text="Görüntüle" OnClick="btnGoruntule_Click" />

<asp:SqlDataSource ID="dsProduct" runat="server"
   ConnectionString="data source=localhost;database=AdventureWorks;integrated security=SSPI"
   SelectCommand="SELECT ProductID, Name, ListPrice, SellStartDate FROM Production.Product">
</asp:SqlDataSource>

<asp:GridView ID="gvProducts" runat="server" AutoGenerateColumns="false" OnRowDataBound="gvProducts_RowDataBound">
   <Columns>
      <asp:TemplateField HeaderText="RowIndex">
         <ItemTemplate>
            <asp:Label ID="lblRowIndex" runat="server" />
         </ItemTemplate>
      </asp:TemplateField>
      <asp:TemplateField HeaderText="ProductID" Visible="false"> <%-- ProductID kolonu için bir TemplateField tanımlayıp,visible özelliğine false atıyoruz. --%>
         <ItemTemplate>
            <asp:Label ID="lblProductID" runat="server" Text=’<%# Eval("ProductID") %>’ /> <%-- ProductID kolonundan gelen veriyi, TemplateField’imizin içerisindeki Label’ın Text özelliğine Eval metodu ile  bağlıyoruz--%>
         </ItemTemplate>
      </asp:TemplateField>
      <asp:BoundField HeaderText="Name" DataField="Name" />
      <asp:BoundField HeaderText="ListPrice" DataField="ListPrice" />
      <asp:BoundField HeaderText="SellStartDate" DataField="SellStartDate" />
   </Columns>
</asp:GridView>

default4.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
   gvProducts.DataSource = dsProduct;
   gvProducts.DataBind();
}

protected void btnGoruntule_Click(object sender, EventArgs e)
{
   int satirSayisi = Convert.ToInt16(txtRowIndex.Text);

   Label lblProductID =(Label)gvProducts.Rows[satirSayisi].Cells[1].FindControl("lblProductID");
   string gelenDeger = lblProductID.Text;
  
   Response.Write(satirSayisi + " indeksli verinin ProductID değeri:" + gelenDeger);
}

int index = 0;
protected void gvProducts_RowDataBound(object sender, GridViewRowEventArgs e)
{
   //Template kolonumuzda satır numaralarını oluşturuyoruz

   GridViewRow gelenSatir = e.Row;

   try
   {
      Label lblIndex = (Label)gelenSatir.Cells[0].FindControl("lblRowIndex");
      lblIndex.Text = index.ToString();
      index++;
   } catch { }
}

Default4.aspx dosyasını çalıştıralım.



Gördüğünüz üzere, TemplateField kolonumuzun içerisindeki Label kontrolümüze erişebiliyoruz ve bunu kolonun gizlenmiş olmasına rağmen yapabiliyoruz. Yalnız burada DataKeyNames özelliğine değer atamadığımız için herhangi bir enkript işlemi gerçekleşmiyor.Bu sebeple, eğer korumak istediğiniz bir veri söz konusuysa DataKeyNames kullanmak gerekir.Doğru bir kod tasarımı için de kullanılması gereken yol budur. Böylece bir makalenin daha sonuna gelmiş bulunuyoruz.Bir dahaki makalede görüşmek üzere,hoşçakalın...

Bu makaleyi beğendin mi? Yorumunu Yaz!







Sizden Gelen Yorumlar:

Yorum Yazın

turkiyem(16.04.2015 16:19:10)
Hocam harika anlatmışsınız. Ellerinize sağlık. Sorunumu hallettim anlatım sayesinde.Teşekkürler.
%0 %0 %100
Katılıyorum Çekimserim Katılmıyorum



susam sokağı(27.10.2011 08:53:57)
Teşekkürler, örnekli güzel bir açıklama olmuş. Tahmin ettiğim gibi güvenlik ile ilgili bir sorundan dolayı, gridView kullanılmış :)
%0 %0 %100
Katılıyorum Çekimserim Katılmıyorum






Copyright© 2001-2017. Bilgisayar Mühendisleri Portalı | Bütün hakları saklıdır.