September 2004 - Posts

VB6 ile FSO

.Net Framework 2.0 sürümü kapiya dayanmis ortalik .Net ile kasip kavrulurken, sizinde benim gibi isiniz VB6 ya düserse ve hele hele VB6 ile FSO ( File System Object ) kullanacaksaniz yazdiginiz FSO ile ilgili kodlar neden çalismiyor diye kara kara düsünüyorsaniz. Visual Studio 6 da Project menüsünden Reference'a girip "Microsoft Scripting Runtime" i projenize dahil edin.

Posted by Selçuk Yavuz | with no comments
Filed under:

MSN 7.0 Beta yayında

MSN 7.0 Beta sürümünü su adresten indirebilirsiniz

http://www.softpedia.com/public/cat/10/4/1/10-4-1-128.shtml

Yahoo Messenger daki " Buzz " özelligi bu MSN Messenger'a da  eklenmis. Birde renkli renkli animasyonlar varki görülmeye deger.

Posted by Selçuk Yavuz | with no comments
Filed under:

DataGrid ile Çalışmak

0. Giriş

      DataGrid Win32 programcılarının sık kullandıkları bir araçtır, web programcıları için ise yeni bir kavram. Şimdi web ortamında DataGrid ile verileri görüntülemek, düzenlemek ve silme konularını ele alacağız.

      Sayfa boyunca çalışacak her fonksiyonun kullacabileceği bir SqlConnection nesnesi tanımlamamız ve bu nesnenin ConnectionString özelliğini sayfa yüklenirken çalışacak olan Page_Load özelliğinde atayacağız.

      Page_Load fonksiyonun hemen üzerinde SqlConnection nesnemizi tanımlayalım.

SqlConnection myConn = new SqlConnection();
 

 Page_Load fonksiyonu içerisinde ise ConnectionString özelliğini atayalım. 

private void Page_Load(object sender, System.EventArgs e)
{
	myConn.ConnectionString = 
		"server=.;uid=sa;password=123;database=pubs";
}

 

1. Verileri Görüntülemek

      Önce DataGrid imizi oluşturalım. Senaryomuz bir SqlServer da bulunan "pubs" database indeki Employee tablosundaki lname ve fname isimli sütünlarını görüntüleyen, güncelleyen ve kaydı silen bir uygulama olacak.

      Bunun için ASPX sayfamızda <form> etiketleri arasına aşağdıaki kodu yazalım.  

<asp:DataGrid id="dgEmployee" runat="server" 
    AutoGenerateColumns="False">
	
  <Columns>
    <asp:BoundColumn Visible="False" DataField="emp_id" ReadOnly="True" 
      HeaderText="ID"></asp:BoundColumn>
			
    <asp:BoundColumn DataField="lname" HeaderText="Last Name">
      </asp:BoundColumn>
		
    <asp:BoundColumn DataField="fname" HeaderText="First Name">
      </asp:BoundColumn>
		
    <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="Update" 
      CancelText="Cancel" EditText="Edit"></asp:EditCommandColumn>
		
    <asp:ButtonColumn Text="Delete" CommandName="Delete">
    </asp:ButtonColumn>
  </Columns>
</asp:DataGrid>

 DataGrid kontrolünde verileri görüntülemek için Bir Connection, DataAdapter ve DataSet e ihtiyacımız var. Connection ile veritabanına bağlanacak, DataAdapter ile DataSet i dolduracağız ve son olarak DataGrid kontrolünün DataSource özelliğine DataSet içinde bulunan Table'ın DefaultView özelliğini atayacağız. Son olarak DataGrid kontrolümüzün DataBind metodunu çalıştırarak işlemimizi sonlandıracağız.

      Bunun için Doldur isimli bir fonksiyon yazacağız ve gerektiği yerde bu fonksiyonu çağırarak DataGrid imizi dolduracağız.  

	private void Doldur()
	{
		string sql = "Select * From Employee";

		SqlDataAdapter myAdp = new SqlDataAdapter(sql,myConn);

		DataSet myDS = new DataSet();

		myAdp.Fill( myDS );

		dgEmployee.DataSource = myDS.Tables[0].DefaultView;
		dgEmployee.DataBind();
	} 

Sayfamız açılır açılmaz verilerin görüntülenmesi için Page_Load fonksiyonu içerisinde Doldur fonksiyomuzu çalıştıracağız. Yalnız DataGrid içindeki Update komutununu verdiğimizde Update fonksiyonu çalışmadan önce Page_Load fonksiyonu çalışmaktadır. Bu yüzden Page_Load fonksiyonu içinde Doldur fonksiyonunu çağırmadan önce sayfanın PostBack olup olmaığını kontrol edeceğiz. Aksi halde DataGrid içerisinde yaptığımız değişiklikleri yakalayamadan eski verilerle dolacaktır.  

private void Page_Load(object sender, System.EventArgs e)
{
	myConn.ConnectionString = 
		"server=.;uid=sa;password=123;database=pubs";
	
	if(!IsPostBack)
	{
		Doldur();
	}
	
} 

2. Verileri Güncellemek

      DataGrid de verileri güncellemek için DataGrid imize bir Edit-Update-Cancel kolonu ekledik. Kayıtlar görüntülenirken Edit LinkButton'una tıkladığımızda DataGrid in EditCommand olayı çalışır. Burada DataGrid in Edit moduna girecek satırını bildiriyoruz.  

private void dgEmployee_EditCommand(object source, 	System.Web.UI.WebControls.DataGridCommandEventArgs e)
	{
		dgEmployee.EditItemIndex = e.Item.ItemIndex;
		Doldur();

	}
 Artık verilerin bulunduğu satır bir TextBox halini alır. Edit kolonu ise Update ve Cancel LinkButton larının bulunduğu bir kolon halini alır.

      Edit modundan çıkmak için Cancel LinkButonuna tıklanır. Burada DataGrid in CancelCommand event i çalışacaktır. Burada DataGrid in EditItemIndex özelliğine -1 değerini atarız.  

private void dgEmployee_CancelCommand(object source, 
	System.Web.UI.WebControls.DataGridCommandEventArgs e)
	{
		dgEmployee.EditItemIndex = -1;
		Doldur();
	} 

Update LinkButton una bastığımızda DataGrid in UpdateCommand, Cancel LinkButton una bastığımızda ise CancelCommand eventları çalışır. UpdateCommand olayı icra ettiğinde verilerin yeni hallerini yakalayıp veritabanında gerekli değişiklikleri yapalım.

      UpdateCommand eventında iki argüman girer. Biri sender diğer e. Sender event ı gönderendir. Buarada sender Datagrid. e değişkeni ise EventHandler tıklama işlemini yapan satır özelliklerini taşır.

      Örneğin LastName edit modundaki TextBox değerien ulaşmak için e.Item.Cells[1].Contols[0] yolunuz kullanırız.Güncellenecek yeni verileri yakaladıktan sonra sql komutunu bir string te oluştururuz. Daha sorna SqlCommand kullanarak bu sql komutunu icra ederiz. Güncelleme işlemi işlemi gerçekleştirken sonra DataGrid in Edit modundan çıkması için DataGrid in EditItemIndex özelliğine -1 değerini atarız. Son olarak Doldur fonksiyonunu çalıştırarak verilerin güncel halini görüntüleriz.  

private void dgEmployee_UpdateCommand(object source, 
  System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
	
      string emp_id;
      string LastName;
      string FirstName;
			
      emp_id = e.Item.Cells[0].Text;
      LastName = ((TextBox) e.Item.Cells[1].Controls[0]).Text;
      FirstName = ((TextBox) e.Item.Cells[2].Controls[0]).Text;
			
      string sql = "Update Employee Set"
         +" lname = '" + LastName + "',"
         + " fname = '" + FirstName + "'"
         + " Where emp_id = '" + emp_id + "'";

      SqlCommand myComm = new SqlCommand();
      myComm.Connection = myConn;
      myComm.CommandText = sql;

      myConn.Open();

      myComm.ExecuteNonQuery();

      myConn.Close();

      dgEmployee.EditItemIndex = -1;
      Doldur();
    }
  
private void dgEmployee_UpdateCommand(object source, 
  System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
	
      string emp_id;
      string LastName;
      string FirstName;
			
      emp_id = e.Item.Cells[0].Text;
      LastName = ((TextBox) e.Item.Cells[1].Controls[0]).Text;
      FirstName = ((TextBox) e.Item.Cells[2].Controls[0]).Text;
			
      string sql = "Update Employee Set"
         +" lname = '" + LastName + "',"
         + " fname = '" + FirstName + "'"
         + " Where emp_id = '" + emp_id + "'";

      SqlCommand myComm = new SqlCommand();
      myComm.Connection = myConn;
      myComm.CommandText = sql;

      myConn.Open();

      myComm.ExecuteNonQuery();

      myConn.Close();

      dgEmployee.EditItemIndex = -1;
      Doldur();
    }

 

3. Verileri Silmek

      Verileri silmek için DataGrid e Delete kolonu eklemiştik. Delete LinkButton una tıkladığımızda DataGrid in DeleteCommand event i çalışır. Burada silinecek kaydın ID si alınıt ve gerekli sql komutu oluşturularak SqlCommand yardımıyla icra edilir. Nihayetinde Doldur fonksiyonu çalıştırılarak verilerin güncellenmiş hali DataGrid de görüntülenir.

 

 
private void dgEmployee_DeleteCommand(object source, 
	System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
		string emp_id;
			
		emp_id = e.Item.Cells[0].Text;
			
		string sql = "Delete From Employee"
			+ " Where emp_id = '" + emp_id + "'";

		SqlCommand myComm = new SqlCommand();
		myComm.Connection = myConn;
		myComm.CommandText = sql;

		myConn.Open();

		myComm.ExecuteNonQuery();

		myConn.Close();

		Doldur();
	}
 

 

Posted by Selçuk Yavuz | with no comments
Filed under:

Sıra sıra diziler..

Progamcilik Okullarinin sinavlarinda ve bazi Yazilim Sirketlerinin mülakatlarinda sik sik sorular bir sor tipidir : "Dizideki elemanlari siraya koyunuz".

Hemen yeni bir dizi olusturululur. Eski dizi bir döngüye sokulur. Döngü sirasinda sayilarin büyüklügü küçüklügü kontrol edilerek yeni diziye aktarilir -di !

Artik böyle bir soru ile karsilasinca "Nasil istersiniz ? Büyükten küçüge mi ? Küçükten büyüge mi ?" diye sorabiliriz.

Çünkü .Net bunu tek bir fonksiyonla yapiyor ;)

 

 
1    System.Array.Sort( numbers );  // Küçükten büyüge
2    System.Array.Reverse( numbers );  // Mevcut siranin tersi
 
Posted by Selçuk Yavuz | with no comments
Filed under: ,

Öyle bir geçer zamanki..

Zaman su gibi akip gidiyor. Örnegin bugün itibariyle kaç günlüksünüz ? Bu mühim soruya gelin .Net te C# dili ile cevap verelim. Bunu için .Net in System.TimeSpan sinifindan yararlanmamiz gerekiyor. Aynen söyle :

 
1    DateTime dogumtarihi;
2    DateTime bugun;
3      
4    dogumtarihi = DateTime.Parse("01/01/1981");
5    bugun = DateTime.Now;
6    
7    System.TimeSpan span = bugun.Subtract( dogumtarihi );
8    
9    System.Console.WriteLine( span.Days );
 
Posted by Selçuk Yavuz | with no comments
Filed under: ,

23 Ekimde ''Veritabanı Atelyesi''ndeyim

Verivizyon.com un kurucu üyesi Yasar Gözüdeli ile birlikte 30 Kasimda Ankarada düzenledigimiz SQL Server 2000 Workshop un bir benzerini 23 Ekim Cumartesi günü Istanbul Gelisim Platformunda Veritabani Atelyesi'04 adi altinda tekrar düzenleyecegiz.

Ayrintili Bilgi ve Kayit

Posted by Selçuk Yavuz | with no comments
Filed under:
More Posts