C# etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
C# etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

17 Mart 2010 Çarşamba

TextBox.Enable = False;

TextBox 'ları müdehale edilemeyecek şekilde kullanmak istediğimizde "TextBox1.Enable" false olarak seçebiliyoruz ancak false seçtiğimizde arka renk "BackColor" gri renge dönüşüyor kötü bir görüntü oluyor. En azından benim hoşuma gitmiyor. :)

Bu durumda kullanışsız bir görünüme bürünen TextBox 'ı Formun "Form_Load" yüklenmesi anında kod ile yaparsanız istediğiniz sonucu elde edebilirsiniz.

textbox1.Enabled = false;
textbox1.BackColor = Color.White;

13 Mayıs 2009 Çarşamba

C# 4.0 Features

C# 4.0 gelirken kokusuda çoktan duyulmaya başladı. Yazılımcı için kolaylıklar sağlayacak yeni yöntemler geliştiriliyor olması çok güzel. Adil Mughal 'ın zahmet edip yazıp yayınladığı C# 4.0 için Optional Parameters ve Named Argument okuduktan sonra paylaşmak istedim.

http://adilamughal.blogspot.com/
http://www.codeproject.com/KB/cs/CSharp4_Features.aspx

public class Employee

{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Qualification { get; set; }
public string MiddleName { get; set; }

public Employee(string firstName, string lastName)
{
FirstName= firstName;
LastName= lastName;
Qualification= "N/A";
MiddleName= string.Empty;
}

public Employee(string firstName, string lastName, string qualification)
{
FirstName= firstName;
LastName= lastName;
Qualification= qualification;
MiddleName= string.Empty;
}

public Employee(string firstName, string lastName, string qualification, string middleName)
{
FirstName= firstName;
LastName= lastName;
Qualification= qualification;
MiddleName= middleName
}
}

C# 4.0 ile, sadece bir yapıcıyı "constructor" oluşturmaya ihtiyaç duyuluyor.

public Employee(string firstName, string lastName, string qualification = "N/A", string middleName = "")

{
FirstName= firstName;
LastName= lastName;
Qualification= qualification;
MiddleName = middleName;
}

Çok basit :) ve kolayca çağırabilirsin:

Employee(“Adil”,”Mughal”);
Employee emp= newoyee("Adil", "Mughal");

Yapıcıda "constructor" bazı opsiyonel parametreler örneği.

public Employee(string firstName, string lastName, string qualification = "N/A", string middleName = "")

Employee emp= new Employee("Adil", "Mughal");
Employee emp = new Employee("Adil", "Mughal", middleName: "Ahmed");

Query'i cevaplamak için yeteri kadar iyi. :). Employee constructor'da bazı değişiklikleri yapınca ve lastName opsiyonel oldu.

public Employee(string firstName, string lastName = "", string qualification = "N/A", string middleName = "")

Şimdi tamamen basit ve esnek Employee instantiate nesnesi olacaktır.

Employee("Adil", qualification:"BS");
Employee("ABC", lastName: "EFG", qualification: "BS");
Employee("XYZ", middleName: "MNO");

1 Mart 2009 Pazar

Login failed for user 'NT AUTHORITY\NETWORK SERVICE'.

Uygulamanızdan SQL Server üzerinde işlem (veri çekmek yada yazmak gibi) yapmak istediğinizde “Login failed for user 'NT AUTHORITY\NETWORK SERVICE'.” şeklinde bir hata mesajı alıyorsanız önce SQL Server üzerinde ilgili veritabanındayken New Query tılyayıp alttaki sorguyu çalıştırın.

sp_grantlogin 'NT AUTHORITY\NETWORK SERVICE'

Sonra da veritabanınızın altındaki security - users bölümünde 'NT AUTHORITY\NETWORK SERVICE' kullanıcısının üzerinde sağ tıklayıp properties seçerek Role Members kıısmından veritabanınız için gerekli (db_datareader, db_datawriter gibi) yetkileri verirseniz hatadan kurtulabilirsiniz.

21 Ocak 2009 Çarşamba

Barkod yazıcısından etiket dökümü.

Bir firma için yazdığım depo uygulamasında barkod yazıcısından etiket dökümü almak için kullandığım kod parçası belki işinize yarar. :)

//YaziciCiktisi Methodunu kullanarak yazıcı ayarları ve seçiminin yapılması istersek print preview ile çıktıyı önce ekrana alabiliriz.
private void YaziciCiktisi()
{
PrintDocument dokuman = new PrintDocument();
PrintDialog yazici = new PrintDialog();
try
{
dokuman.PrintPage += new PrintPageEventHandler(YazdirilacakEtiketBilgileri);
yazici.PrinterSettings = new PrinterSettings();
yazici.Document = dokuman;
yazici.UseEXDialog = true;
if (DialogResult.OK == yazici.ShowDialog(this))
{
dokuman.PrinterSettings.PrinterName = yazici.PrinterSettings.PrinterName;
dokuman.Print();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
dokuman.Dispose();
}
}

//Başlık ve detay satırları şeklinde kullandım. etiketin üst kısmında firma bilgileri ve sonrasında koli içersinendeki ürün bilgileri yazdırdım.
void YazdirilacakEtiketBilgileri(object sender, PrintPageEventArgs e)
{
Font fontFirmaBaslik = new Font("Arial", 12);
Font fontStatik = new Font("Arial", 10);
Font fontDinamikBaslik = new Font("Arial", 9);
Font fontDinamik = new Font("Arial", 7);

e.Graphics.DrawString("FİRMA ÜNVANI", fontFirmaBaslik, Brushes.Black, 130, 10);

e.Graphics.DrawString(lblFirmaUnvani.Text.ToUpper(), fontStatik, Brushes.Black, 10, 40);
e.Graphics.DrawString(": " + txtFirmaUnvani.Text, fontStatik, Brushes.Black, 110, 40);

e.Graphics.DrawString("İLİ", fontStatik, Brushes.Black, 10, 55);
e.Graphics.DrawString(": " + txtIli.Text, fontStatik, Brushes.Black, 110, 55);

e.Graphics.DrawString("ALT MÜŞTERİ", fontStatik, Brushes.Black, 10, 70);
e.Graphics.DrawString(": " + txtAltMusteri.Text, fontStatik, Brushes.Black, 110, 70);

e.Graphics.DrawString(lblIrsaliyeNo.Text.ToUpper(), fontStatik, Brushes.Black, 10, 85);
e.Graphics.DrawString(": " + txtIrsaliyeSeriSiraNo.Text, fontStatik, Brushes.Black, 110, 85);

e.Graphics.DrawString(lblKoliBilgisi.Text.ToUpper(), fontStatik, Brushes.Black, 200, 85);

e.Graphics.DrawString("ÜRÜN KODU", fontDinamikBaslik, Brushes.Black, 10, 120);
e.Graphics.DrawString("ÜRÜN ADI", fontDinamikBaslik, Brushes.Black, 110, 120);
e.Graphics.DrawString("MİKTAR", fontDinamikBaslik, Brushes.Black, 300, 120);
e.Graphics.DrawString("BİRİM", fontDinamikBaslik, Brushes.Black, 350, 120);

int satir = 135, koliNo = 0;


if (_yazKoliNo > 0) koliNo = _yazKoliNo;
else koliNo = _koliNo;

//Detay satırlarını yazdırıyoruz.
for (int i = 0; i < dgSiparisListesi.Rows.Count; i++)
{
if (Convert.ToInt32(dgSiparisListesi.Rows[i].Cells["KOLI"].Value) == koliNo)
{
e.Graphics.DrawString(dgSiparisListesi.Rows[i].Cells["sip_stok_kod"].Value.ToString(), fontDinamik, Brushes.Black, 10, satir);
e.Graphics.DrawString(dgSiparisListesi.Rows[i].Cells["sto_isim"].Value.ToString(), fontDinamik, Brushes.Black, 110, satir);
e.Graphics.DrawString(dgSiparisListesi.Rows[i].Cells["MIKTAR"].Value.ToString(), fontDinamik, Brushes.Black, 310, satir);
e.Graphics.DrawString("ADET", fontDinamik, Brushes.Black, 350, satir);
satir = satir + 15;
}
}
}

2 Ekim 2008 Perşembe

.Net 3.5 ve LINQ

Önceki yazımda yapıyı kullanmaya başladıkça dedim ve bıraktım. :) Neden bahsetmedim ki dedim ve...

.Net Framework 3.5 ile bir projeye oluşturup LINQ to SQL Classes ekliyoruz. Bu sınıf veritabanı ile ilgili bilgileri barındırıyor. Server Explorerdan kullanacağımız veritabanını Data Connection yardımı ile ekliyoruz. Oluşan Data Connection dan kullanacağımız Tablo, Functions ve Stored Procedures 'leri ekliyoruz.





Sınıfın (Class) için verdiğiniz isimnin sonuna "Veritabanı Adı + " "DataContext" ekliyor. İlgili sınıfı örneklediğinizde artık tablo ve alanlara kolaylıkla erişebiliyorsunuz.

VeritabaniDataContext vt = new VeritabaniDataContext();




SQL Server 2008 kullanmanızıda şiddetle önerebilirim. T-SQL ile sorgular yazmak oldukça kolaylaşıyor. Tablo isimleri, alan isimleri vs bir boşluk tuşu kadar yakın.


Arada bir gözleri dinlendirmeyi ihmal etmeyin gözlerimiz en değerli organımızdır.

Linq'de Left Outer Join kullanmak.

Yeni başladığım bir iş için .Net 3.5 ile hayatımıza katılan LINQ den de yararlanmak istedim. Önce nereden bulaştım LINQ Query'e diye düşünmedim değil hani :). T-SQL kodu yazmak sanki daha kolay gibi gelmişti. Ama yapıyı kullanmaya başladıkça kolaylıklarıda fark etmemek mümkün değil.

Başta biraz uğraştırdı ama LINQ ile LEFT OUTER JOIN kullanmak isterseniz. Çok da zor değilmiş. :)

var sorguSiparisler = (from s in vt.SIPARISLERs
join b in vt.BARKOD_TANIMLARIs on s.sip_stok_kod equals b.bar_stokkodu
into tempBARKOD_TANIMLARIs from b in tempBARKOD_TANIMLARIs.DefaultIfEmpty()
orderby s.sip_stok_kod
where s.sip_evrakno_sira == Convert.ToInt32(btnSipGetir.Text)
select new { s.sip_stok_kod, b.bar_kodu, s.sip_miktar });

21 Ağustos 2008 Perşembe

Access Database'inden System Database Referansı İçin Connection String

Access database ile çok fazla uğraşmamıştım ama SystemDb kullanarak da verileri hiç çekmemiştim. Her şeyin bir ilki vardır diyerek atıldım işe.

Geçenlerde IBM SurePOS 700 kasalarda kullanılan Genius v2.2 database inden satış bilgilerini ticari programa satış irsaliyesi olarak oluşturmak amaçlı program yazmam gerekiyordu. Atıldığım işten altaki bağlantı satırı ortaya çıktı. İhtiyacı olanlar için...

Ufak bir hatırlatma eğer x64 sistem kullanıyor iseniz "Provider=Microsoft.Jet.OLEDB.4.0" desteklemiyor. Yazdığınız uygulamanın properties'inden Build sekmesinde Platform target seçeneğini x86 olarak değiştirin.

string oleDbConStr = @"Provider=Microsoft.Jet.OLEDB.4.0; Password=sifre; Persist Security Info=True; User ID=Kullanici Adi; Data Source=C:\Data Files\DataDb.mdb; Jet OLEDB:System database=C:\Data Files\SystemDb.mdw; Jet OLEDB:Database Password=Db Sifresi";

20 Ağustos 2008 Çarşamba

Visual Studio 2008 ve .NET Framework 3.5 SP1

İşte düzeltmelerde geldi.

  • WPF uygulamaları için %20-45 arası performans iyileştirmeleri.
  • SQL Server 2008'i desteklemek için data platform tarafında, ADO.NET Entity Framework, ADO.NET Data Services başta olmak üzere gelen yenilikler.
  • WPF uygulamaları için daha gelişmiş tasarımcılar.
  • Visual Studio 2008'in SQL Server 2008'i tam olarak desteklemesi.
  • TFS tarafında müşteri geribildirimleri sonucu eklenmiş özellikler, iş maddesi ön izleme ile geliştirilmiş e-mail entegrasyonu ve SQL 2008 üzerinde TFS'in host edilmesi desteği.

Installer için link.

http://www.microsoft.com/downloads/details.aspx?FamilyId=FBEE1648-7106-44A7-9649-6D9F6D58056E&displaylang=en

ISO için link.

http://www.microsoft.com/downloads/details.aspx?familyid=27673C47-B3B5-4C67-BD99-84E525B5CE61&displaylang=en

Visual Studio 2008 SP1 ve .NET Framework 3.5 SP1'ı hızlıca yüklemenizi tavsiye ederim.

29 Ocak 2008 Salı

C# - Excel sayfalarını OleDb aracılığı ile okunarak DataGridView'da görüntülenmesi


Buradaki "Provider=Microsoft.ACE.OLEDB.12.0;" Office 2007 (12) için dir. Ve daha eski sürümleride başarılı bir şekilde okumaktadır. Office 2007 kullanırsanız Excel dosyasının uzantısının .xlsx olduğunu unutmayın. :=)

using System;
using System.Linq;
using System.Data.OleDb;
using System.Windows.Forms;
using System.Collections.Generic;

namespace DevXpress
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
   
        private void barButton_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            string path = "C:\\Ucret.xlsx";
            gvExcelBilgileri.Columns.Add("Adi", "Adı");
            gvExcelBilgileri.Columns.Add("Soyadi", "Soyadı");
            gvExcelBilgileri.Columns.Add("Ucret", "Ücret");

            using (OleDbDataReader oleDbExcelOkuyucu = ExcelDataGetir(path, "Sayfa1"))
            {
                while (oleDbExcelOkuyucu.Read())
                {
                    gvExcelBilgileri.Rows.Add(oleDbExcelOkuyucu.GetValue(0), oleDbExcelOkuyucu.GetValue(1), oleDbExcelOkuyucu.GetValue(2));
                }
            }
        }

        public OleDbDataReader ExcelDataGetir(string dosyaAdi, string sayfaIsmi)
        {
            OleDbConnection oleDbConnection = new OleDbConnection(String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0; HDR=Yes;""", dosyaAdi));
            OleDbCommand oleDbCommand = new OleDbCommand(String.Format("Select * From [{0}$]", sayfaIsmi), oleDbConnection);
            oleDbConnection.Open();
            OleDbDataReader oleDbOkuyucu = oleDbCommand.ExecuteReader();
            return oleDbOkuyucu;
        }
    }
}