26.11.2011

Datalist satır rengi


protected void dlTrades_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
 {
 System.Data.DataRowView drv = (System.Data.DataRowView)(e.Item.DataItem);
 string hld = (string)drv.Row["Hold"].ToString();
 if (hld == "Trade")
 {
 e.Item.BackColor = System.Drawing.Color.LightGreen;
 e.Item.ForeColor = System.Drawing.Color.White;
 e.Item.Font.Bold = true;
 }
 if (hld == "Hold")
 {
 e.Item.BackColor = System.Drawing.Color.LightGray;
 e.Item.ForeColor = System.Drawing.Color.White;
 e.Item.Font.Bold = true;
 }
 System.Data.DataRowView drv2 = (System.Data.DataRowView)(e.Item.DataItem);
 string stat = (string)drv2.Row["Status"].ToString();
 if (stat == "Open")
 {
 e.Item.BackColor = System.Drawing.Color.LightGreen;
 e.Item.ForeColor = System.Drawing.Color.White;
 e.Item.Font.Bold = true;
 }
 if (stat == "Filled")
 {
 e.Item.BackColor = System.Drawing.Color.Gold; e.Item.ForeColor = System.Drawing.Color.White;
 e.Item.Font.Bold = true;
 }
 if (stat == "Closed")
 {
 e.Item.BackColor = System.Drawing.Color.IndianRed;
 e.Item.ForeColor = System.Drawing.Color.White;
 e.Item.Font.Bold = true;
 }
 }
 }

c# string işlemleri


String.Compare() – String ifadeleri karşılaştırmak
string str1 = "Dürdane";
string str2 = "Fikriye";

int result = String.Compare(str1, str2);

if (result < 0)
    Console.WriteLine("{0} < {1}", str1, str2);
else if (result > 0)
    Console.WriteLine("{0} > {1}", str1, str2);
else
    Console.WriteLine("{0} = {1}", str1, str2);

Yukarıdaki kod parçasında 2 string değer, String sınıfının Compare() metodu kullanılarak karşılaştırılmaktadır.
String.Compare() metodun, 1. parametre,2.parametreden küçük ise(alfabetik sıralamaya göre) negatif,büyük ise pozitif eşit ise 0 değerini döndürmektedir.
2 string’in eşit olup olmadığını karşılaştırmak için benzer şekilde
if (str1 == str2)
    Console.WriteLine("{0} = {1}", str1, str2);


karşılaştırmasını kullanabiliriz,fakat hangisinin hangisinden küçük olduğunu bulmak için < ve işaretlerini bu karşılaştırmada kullanamayız.
Aşağıdaki kod parçasına bir bakalım;
string str1 = "Dürdane";
string str2 = "dürdane";

int result = String.Compare(str1, str2);

if (result < 0)
    Console.WriteLine("{0} < {1}", str1, str2);
else if (result > 0)
    Console.WriteLine("{0} > {1}", str1, str2);
else
    Console.WriteLine("{0} = {1}", str1, str2);

2 string ifade de aynıdır fakat 1. String ifadenin ilk harfi büyük olduğundan dolayı,1.string ikincisinden büyük olacak ve Compare metodu 0’dan büyük bir değer döndürecektir.Bazen öyle durumlar olur ki bu 2 string ifadenin eşit olmasını isteyebiliriz yani büyük küçük harf duyarlı olmamasını isteyebiliriz.Bu durumda Compare metodunun 3 parametresi işimizi görecektir.Zira eğer bu parametre true olur ise büyük küçük harf olup olmadığı dikkate alınmayacaktır.Aynı kod parçasını şe şekilde işletelim;
string str1 = "Dürdane";
string str2 = "dürdane";

int result = String.Compare(str1, str2, true); // Buraya DİKKAT!...

if (result < 0)
    Console.WriteLine("{0} < {1}", str1, str2);
else if (result > 0)
    Console.WriteLine("{0} > {1}", str1, str2);
else
    Console.WriteLine("{0} = {1}", str1, str2);

Bu durumda ekran görüntüsü (Dürdane = dürdane) olacaktır.
String.Format() – String biçimlendirmek
Bazen string ifadelerimizi formatlamak(biçimlendirmek) isteyebiliriz.Örneğin elimizde bir tarih varsa bunu anlamlı bir şekilde yazdırmak isteyebiliriz.Veya bir kordinat verilerini anlamlı bir biçimde yazdırmak isteyebiliriz.Şimdi aşağıdaki kod parçacıklarına bakalım;
int x = 3,
    y = 4;

// {0} yazan yere 3,
// {1} yazan yere 4 değeri gelecek ve
// coord değeri "3,4" olacaktır.
string coord = String.Format("{0},{1}", x, y);

// 2 string ifade ("Koordinat" ve "3,4") toplanıyor(birleştiriliyor).
Console.WriteLine("Koordinat:" + coord);

DateTime date = new DateTime(2008, 8, 23);
string dateText = String.Format("{0:d}", date);
Console.WriteLine(dateText);
dateText = String.Format("{0:D}", date);
Console.WriteLine(dateText);

İlk örnekte gerekli açıklama yapılmıştır.2 örnek için ise öncelikle DateTime türünde bir değişken tanımlanmıştır.Ardından String sınıfının Format fonksiyonu kullanılarak bu tarihe 2 çeşit biçim verilmiştir.İsterseniz yukarıdaki kod parçasının ekran çıktısına bir bakalım;
23.08.2008
23 Ağustos 2008 Cumartesi

Bu tarz biçimlendirmelerin bazılarını listeyelim;
{0:d}
23.08.2008
{0:D}
23 Ağustos 2008 Cumartesi
{0:f}
23 Ağustos 2008 Cumartesi 13:20
{0:F}
23 Ağustos 2008 Cumartesi 13:20:05
{0:t}
13:20
{0:T}
13:20:05
{0:y}
Ağustos 2008

Bir string ifadenin sol veya sağ yanına boşluk karakteri doldurmak istiyor iseniz yine String.Format() metodunu kullanabilirsiniz.Aşağıdaki örneğe göz atalım;
string str;

str = String.Format("-{0,15}-""ASP.NET");
Console.WriteLine(str);

str = String.Format("-{0,-15}-""ASP.NET");
Console.WriteLine(str);

Bu durumda birincisinde ASP.NET yazısının sol tarafına 15-7=8 tane boşluk karakteri eklenecek, ikincisinde ise sağ tarafına eklenecektir.
Şimdi ekran çıktısına bakalım;
-        ASP.NET-
-ASP.NET        -

Contains() - EndsWith() – StartsWith()
Contains metodu,bir string ifadenin diğer bir string ifade de içinde geçip geçmediğini bulur,geçiyor ise true geçmiyor ise false döndürür.
Örneğin,
string str1 = "Dürdane";
if(str1.Contains("dane") == true)


gibi bir karşılaştırma doğrudur.”Dürdane” kelimesi, “dane” kelimesini içermektedir ve yukarıdaki if koşulu true değerini döndürecektir.
Benzer şekilde EndsWith() ve StartsWith() metodlarıda aldıkları stringi,karşılaştırma yaptıkları stringin başında mı sonunda mı olduğu bilgisini döndürür.
string str1 = "Dürdane";
if (str1.StartsWith("Dür") == true)
{
    // "Dürdane" kelimesi "Dür" kelimesiyle başlamaktadır.
    // if bloğu işletilecektir.
}

if (str1.EndsWith("dane") == true)
{
    // "Dürdane" kelimesi "dane" kelimesiyle sonlanmaktadır.
    // if bloğu işletilecektir.
}

Split() – String’i dizi halinde parçalamak
Bir string içerisindeki kelimeleri bazı karakterleri kullanarak ayırmak istiyor isek bu durumda Split() metodunu kullanmamız gerekir.”2,3” koordinat bilgisinden 2 ve 3 sayılarını elde etmek istiyor isek Split() metodu harika metoddur.
Aşağıdaki kod parçacığında x,y,z değerleri string ifadeden parçalanıp elde edilmektedir.
// Koordinat bilgisi string olarak tutuluyor.
string coord = "2,3,5";

// Bu komut sonrasında 3 string ifadeden oluşan bir dizi elde edilecektir.
// xyz[0] = "2"
// xyz[1] = "3"
// xyz[2] = "5"
string[] xyz = coord.Split(',');

int x = int.Parse(xyz[0]);
int y = int.Parse(xyz[1]);
int z = int.Parse(xyz[2]);

// Ekran Çıktısı : 2,3,5
Console.WriteLine("{0},{1},{2}", x, y, z);

SubString() – String içindeki alt stringleri elde etmek
Bir string ifadenin içinde,4.karakterden başlayıp 10 karakter elde etmek istiyor isek bu durumda kullanacağımız metod SubString() metodudur.
Aşağıdaki kod parçalarını inceleyelim;
string text = "Visual Studio 2005";
Console.WriteLine(text.Substring(7,4));    // Ekran Çıktısı : "Stud"
Console.WriteLine(text.Substring(7));      // Ekran Çıktısı : "Studio 2005"

ToLower() – ToUpper() – ToLowerInvariant() - ToUpperInvariant()
Bir string ifadedeki bütün karakterleri küçük veya bütün karakterleri büyük yapmak istiyor iseniz bu fonksiyonlar işinizi görecektir.
Aşağıdaki kod parçasına ve ekran çıktısına bakalım;
string text = "Visual Studio 2005";
Console.WriteLine(text.ToLower());          // visual studio 2005
Console.WriteLine(text.ToLowerInvariant()); // visual studio 2005

Console.WriteLine(text.ToUpper());          // VİSUAL STUDİO 2005
Console.WriteLine(text.ToUpperInvariant()); // VISUAL STUDIO 2005

ToLower() ve ToUpper() metodları karakterleri olduğu gibi büyük veya küçük harfe çevirirken, ToLowerInvariant() ve ToUpperInvariant() metodları ise ilgili dile göre değişim göstermektedir. Uygulamayı gerçekleştirdiğim işletim sistemi ingilizce olduğundan dolayı küçük ‘i’ karakterleri büyük harfe çevrildiğinde ‘I’ haline dönüştürülüyor.”Invariant” kullanılmayan metodlarda ise ‘i’ harfleri olduğu gibi ‘İ’ harfine dönüştürülüyor.

Trim() – TrimEnd() – TrimStart() – Boşlukları kaldıran fonksiyonlar
Trim metodları, string içindeki boşluklarla bir derdiniz var ise çok işinize yarayacaktır.
Aşağıdaki kod örneğini ve açıklamaları inceleyelim;
string text = "    Visual Studio 2005    ";

/*
* Trim()       : Text'in başındaki ve sonundaki boşlukları kaldırır
* TrimEnd()    : Text'in sonundaki boşlukları kaldırır.
* TrimStart()  : Text'in başındaki boşlukları kaldırır.
*
*/
Console.WriteLine("-{0}-", text.Trim());        // -Visual Studio 2005-
Console.WriteLine("-{0}-", text.TrimEnd());     // -    Visual Studio 2005-
Console.WriteLine("-{0}-", text.TrimStart());   // -Visual Studio 2005    -


Replace() – Yer değiştirme fonksiyonu
Bir string içindeki bir değeri başka bir değerle değiştirmek istiyor iseniz Replace() metodunu kullanmanız gerekmektedir.
Aşağıdaki kod parçacığını inceleyelim;
string text = "Visual Studio 2005";

string text2 = text.Replace("sual""SORU");
Console.WriteLine(text2);   // "Ekran Çıktısı : ViSORU Studio 2005"

StringBuilder() – String inşa eden sınıf
Birden fazla stringi birleştirmek istiyor iseniz + ile bunu yapabilirsiniz.(str4 = str1+str2+str3).Fakat bu yöntem performans açısından iyi değildir.Onun yerine StringBuilder sınıfını kullanmak yazılımınızı daha kaliteli hale getirecektir.
Aşağıdaki kod parçacığını inceleyelim;
StringBuilder builder = new StringBuilder();
// .Net dilleri dizi içinde tanımlanıyor
string[] diller = new string[] { "C#""VB""C++" };

builder.AppendLine(".Net Dilleri..");
builder.AppendLine();   // Boş bir satır ekleniyor.
for (int i = 0; i < diller.Length; i++)
{
    // Sırasıyla bütün diller yanyana ekleniyor.
    builder.Append(diller[i] + " ");
}
// 0.karakterden başlayarak "-->" ifadesi ekleniyor.
builder.Insert(0, "-->");
// Ekrana ToString() metodu ile yazdırılıyor.
Console.WriteLine(builder.ToString());

Makalemin en başında belirttiğim örneklerde birden fazla string’in birleştirilmesiyle ilgili örneklerin hepsi StringBuilder sınıfı kullanılarak yapılmalıdır.
Her ne kadar çözüm yolları çok basit olsa da incelediğimiz metodlar bir yazılımda sık sık kullanabileceğimiz metodlardır.Burada makalemi bitiyorum. Diğer makalelerimde görüşmek dileğiyle,hoşçakalın.

15.11.2011

function da mantıksal hata


Tablo: Sınavlar
SinavID   = Primary Key
Adi          = Sinav Adı (Örneğin Büyüklük - Küçüklüklük Kavramı Sınavı)







Private Function AltProgram1(ByVal bastarih As DateTime, ByVal bittarih As DateTime) As Integer
        Dim baglanti As New OleDbConnection("Bağlantı Stringi")
        Dim com As New OleDbCommand("Select * From Sinavlar Where BaslangicTarihi < @bastarih and BitisTarihi >@bittarih ", baglanti)
        com.Parameters.AddWithValue("@bastarih", bastarih)
        com.Parameters.AddWithValue("@bittarih", bittarih)
        Dim dr As OleDbDataReader
        baglanti.Open()
        dr = com.ExecuteReader()
        If dr.HasRows Then
            dr.Read()
            AltProgram1 = dr("SinavID")
            dr.Close()
        Else
            Response.Redirect("yenisayfa.aspx")
        End If
        baglanti.Close()
    End Function




hata:
1.yukarıdaki tabloda BaslangicTarihi ve BitisTarihi bulunmamaktadır bu da hataya sebep olur.
2.baslangictarihi ve bitistarihi diyerek bu iki tarihin arasındaki degerleri alması gerekirken dışındaki değerleri alıyor. buda mantıksal hatadır


not:
bu fonksiyonunun hatsız olarak çallıştığındığındaki ama iki tarih arasında sınavlar tablosundan sınav id sini belirlemektir




(Bence:))

öğrenci değerlendirme(proje geliştirme)


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;

public partial class ogretmen_degerlendirme : System.Web.UI.Page
{
    vbbaglanti system = new vbbaglanti();
    SqlConnection baglanti;
    SqlCommand komut;
    SqlDataReader oku;
    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)//test tablosuna bağlanıp birden fazla olan testleri ekrana datalistle gösterimi
        {
            baglanti = system.baglan();
         
            komut = new SqlCommand("select * from test",baglanti);
            oku = komut.ExecuteReader();
            DataList1.DataSource = oku;
            DataList1.DataBind();
            oku.Close();
            komut.Dispose();
            baglanti.Close();

        }
    }
    protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
    {
        Label lblogr = (Label)e.Item.FindControl("lblogr");//datalistin içindeki labelları tanımlanması
        Label lbltest = (Label)e.Item.FindControl("lbltest");
        Label lblevet = (Label)e.Item.FindControl("lblevet");
        Label lblhayir = (Label)e.Item.FindControl("lblhayir");
        string ogr_id = Request.QueryString["ogr_id"].ToString();
        SqlCommand komut2 = new SqlCommand("select count(*) as toplam_sayi  from  degerlendirme where ogr_id=" + Convert.ToInt32(ogr_id) + " and test="+Convert.ToInt32(lbltest.Text)+"", baglanti);//tek test ve öğrenciye göre değerlendirme tablsundan süzme yapılarak öğrenci sayısı öğrenilir
        SqlDataReader oku2= komut2.ExecuteReader();
        oku2.Read();
        double toplam = Convert.ToDouble(oku2["toplam_sayi"].ToString());
        oku2.Close();
        komut2.Dispose();
        komut2 = new SqlCommand("select count(*) as evet  from  degerlendirme where yanit='E' and ogr_id=" + Convert.ToInt32(ogr_id) + " and test=" + Convert.ToInt32(lbltest.Text) + "", baglanti);//yukarıda ki süzme işlemlerinin aynısı ama ek olrak doğru yaptıklarını çekiyoruz
        oku2 = komut2.ExecuteReader();
        oku2.Read();
        double tevet = Convert.ToDouble(oku2["evet"].ToString());
        oku2.Close();
        komut2.Dispose();
        double yevet = (100 * tevet) / toplam;//doğru yaptıklarının yüzdesini hesaplıyoruz
        double yhayir = 100 - yevet;//yanlış yaptıklarının yüzdesini buradan hesaplıyoruz
        lblevet.Text = Convert.ToString(Math.Round(yevet,2));//virgülden sonraya yuvarlama yapılıyoruz
        lblhayir.Text = Convert.ToString(Math.Round(yhayir, 2));
        komut2 = new SqlCommand("select * from ogrenci where ogr_id="+Convert.ToInt32(ogr_id)+"",baglanti);//öğrencinin adını ve soyadını ogrenci tablosundan çekiyoruz
         oku2 = komut2.ExecuteReader();
        oku2.Read();
        lblogr.Text=oku2["ogr_ad_soyad"].ToString();
        oku2.Close();
        komut2.Dispose();
        komut2 = new SqlCommand("select * from test where test_id=" + Convert.ToInt32(lbltest.Text) + "", baglanti);//testin adını öğreniyoruz
        oku2 = komut2.ExecuteReader();
        oku2.Read();
        lbltest.Text = oku2["test_adi"].ToString();
        oku2.Close();
        komut2.Dispose();
     
    }
}