Author: admin

Aralık Kullanarak Switch-Case | C#

Aralık Kullanarak Switch-Case | C#

Merhaba, tek bir değerle karşılaştırarak switch-case yapısı olduğu gibi SQL’deki gibi başka şartlar da kullanılabiliyormuş. Şu şekildeymiş: Selamlar.

Javascript > WebApi Cross-Origin Ayarı| C#

Javascript > WebApi Cross-Origin Ayarı| C#

Merhaba, API’leri şimdiye kadar hiç Ajax ile tetiklememiştim.Öyle bir ihtiyaç oldu ve hata aldım.Hatanın da detayı yok maalesef.status 0 dönüyor. Biraz araştırdıktan sonra çözümü buldum:Package Manage Console’dan aşağıdaki paketi yüklüyoruz: Sonra WebApiConfig.cs’ye şu satırı ekliyoruz: Sonra da ilgili Controller’ın tepesine de şunu ekliyoruz: Selamlar.

EPPlus İle Makrolu Excel Oluşturma | C#

EPPlus İle Makrolu Excel Oluşturma | C#

Merhaba, excel işlemlerinde EPPlus kullanıyorum.
Her ihtiyacımı görüyor sağolsun.
Geçenlerde de, içerisinde makro barındıran bir excele ihtiyacım oldu.
Baktım ona da destekleri varmış.
Bir kez daha takdir ettim.

Excel oluşturduğum metodu tümüyle paylaşıyorum.

Makro eklediğim kısım en altta.

public static byte[] OlusturExcel<T>(IEnumerable<T> liste, string calismaSayfasiAdi)
{
	byte[] sonuc;
	using (ExcelPackage pck = new ExcelPackage())
	{
		var ws = pck.Workbook.Worksheets.Add(calismaSayfasiAdi);
		// Once basliklari yazalim.
		IList<PropertyInfo> properties = typeof(T).GetProperties().ToList();
		int kolonSayac = 1;
		int satirSayac = 1;
		foreach (PropertyInfo prop in properties)
		{
			string baslik = prop.Name;
			ws.Cells[satirSayac, kolonSayac].Value = baslik;
			ws.Cells[satirSayac, kolonSayac].Style.Font.Bold = true;
			ws.Cells[satirSayac, kolonSayac].Style.Font.Name = "Tahoma";
			ws.Cells[satirSayac, kolonSayac].Style.Font.Size = 10;
			ws.Cells[satirSayac, kolonSayac].Style.Fill.PatternType = ExcelFillStyle.Solid;
			ws.Cells[satirSayac, kolonSayac].Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.AliceBlue);
			kolonSayac++;
		}
		// Sonra iceriklere gecelim.
		satirSayac = 2;
		foreach (T item in liste)
		{
			kolonSayac = 1;
			foreach (PropertyInfo prop in properties)
			{
				object propValue = prop.GetValue(item, null);
				if (propValue == null)
				{
					ws.Cells[satirSayac, kolonSayac].Value = "";
				}
				else
				{
					TypeCode typeCode = Type.GetTypeCode(prop.PropertyType);
					switch (typeCode)
					{
						case TypeCode.Int32:
							ws.Cells[satirSayac, kolonSayac].Value = Convert.ToInt32(propValue.ToString().Replace(".", ","), CultureInfo.GetCultureInfo("tr-TR"));
							break;
						case TypeCode.Decimal:
							ws.Cells[satirSayac, kolonSayac].Value = Convert.ToDecimal(propValue.ToString().Replace(".", ","), CultureInfo.GetCultureInfo("tr-TR"));
							break;
						default:
							ws.Cells[satirSayac, kolonSayac].Value = propValue.ToString().Trim();
							break;
					}
				}
				ws.Cells[satirSayac, kolonSayac].Style.Font.Name = "Tahoma";
				ws.Cells[satirSayac, kolonSayac].Style.Font.Size = 9;
				kolonSayac++;
			}
			satirSayac++;
		}
		ws.DefaultRowHeight = 25;
		ws.Cells.AutoFitColumns();				
		// Makro ekledigim kisim iste burasi...
		pck.Workbook.CreateVBAProject(); 
		pck.Workbook.CodeModule.Name = "Module1";
		StringBuilder bfrMakroKod = new StringBuilder();
		bfrMakroKod.Append(@"Function ZamkinosEPPlusTest() As Boolean");
		bfrMakroKod.Append(Environment.NewLine);
		bfrMakroKod.Append(@"    MsgBox ""Zamkinos test!""");				
		bfrMakroKod.Append(Environment.NewLine);
		bfrMakroKod.Append(@"    ZamkinosEPPlusTest = False");				
		bfrMakroKod.Append(Environment.NewLine);
		bfrMakroKod.Append(@"End Function");
		bfrMakroKod.Append(Environment.NewLine);
		pck.Workbook.CodeModule.Code = bfrMakroKod.ToString();
		sonuc = pck.GetAsByteArray();
	}
	return sonuc;
}

Selamlar.

Selenium ChromeDriver Hatası | C#

Selenium ChromeDriver Hatası | C#

Merhaba, web sitelerinden bazı bilgileri alabilmek için Selenium kütüphanesini kullanarak bir uygulama geliştirmiştim.Ancak uygulamanın çalıştığı bilgisayardaki Chrome, her güncellendiğinde sistemdeki versiyonla programın kullandığı ChromerDriver aynı değil hatası veriyordu. Ben de biraz araştırma ve biraz da şansımın yardımıyla şu yöntemi buldum: Bu şekilde yolu sabit verince 

“Could not load file or assembly System.Net.Http, Version=4.0.0.0” Hatası | C#

“Could not load file or assembly System.Net.Http, Version=4.0.0.0” Hatası | C#

Merhaba, .net 4.6.1 kullanan birkaç projeyi 4.7.1’e geçirmek istedim.Aslında konunun başlangıcı “Could not create SSL/TLS secure channel.” hatasıydı.Neyse, bu hatayı araştırırken 4.6 framework’ünde sunucudaki geçerli protokolü kullandığına dair bir yazı okudum.Yani bizim atadığımız protokolü hesaba almıyor arkadaş.Yazıda bir kaç yöntem önermişti.Bir tanesi de 4.7’ye geçebilirsiniz 

DataGridView İpuçları | C#

DataGridView İpuçları | C#

Merhaba, C#’ta datagrid kullandığım form uygulamaları oluyor.
Her seferinde yaptığım işlemleri bir daha araştırıp çözümler buluyormuşum gibi hissetmeye başladım.
O yüzden hepsi burada topluca dursun diyerek burada paylaşıyorum:

  • Bir hücrede link göstermek ve hücre tıklanınca onu açmak
private void InitializeComponent()

altına şunu ekliyoruz:

this.MyDataGridView.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.MyDataGridView_CellContentClick);

Ana kodumuza da şunu ekliyoruz:

        private void MyDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 11 && !(e.RowIndex == -1))
            {
                DataGridView myDataGridView = (DataGridView)sender;
                string sUrl = myDataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
                Process.Start(new ProcessStartInfo { FileName = sUrl, UseShellExecute = true });
            }
        }

  • Bir hücrenin parasal değer göstermesi için formatlanması

Misal 6, 7 ve 15. kolonlar parasal değer içersin.

			for (int i = 0; i < 16; i++)
            {
                switch (i)
                {
                    case 6:
                    case 7:
                    case 15:
                        MyDataGridView.Columns[i].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
                        MyDataGridView.Columns[i].DefaultCellStyle.FormatProvider = Sabitler.UsCulture;
                        MyDataGridView.Columns[i].DefaultCellStyle.Format = "N2";
                        break;
                }
            }

  • Datatable ile gride verileri yükleme

Önce DataGridView kolonlarını belirliyoruz.

dt.Columns.Add(new DataColumn("City", typeof(string)));
            dt.Columns.Add(new DataColumn("District", typeof(string)));
            dt.Columns.Add(new DataColumn("Neigborhood", typeof(string)));
            dt.Columns.Add(new DataColumn("BuildingNumber", typeof(string)));
            dt.Columns.Add(new DataColumn("ZipCode", typeof(string)));
            myDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

Elimizde bir liste olsun ve bu listeden DataTable dolduralım.

dt.Rows.Clear();
		foreach (XmlNode node in lstEv)
		{
			dt.Rows.Add(
				node.Attributes["CT"].Value,
				node.Attributes["DS"].Value,
				node.Attributes["NH"].Value,
				node.Attributes["BN"].Value,
				node.Attributes["ZC"].Value
			);
		}
		myDataGridView.DataSource = dt;

  • Filtreleme

Filtreleme için DataGridView üzerine bir kaç TextBox ekleyebiliriz. Örneğin birisi şehir filtresi olsun.

private void InitializeComponent()	

altına şunu ekliyoruz:

this.txtFiltreSehir.TextChanged += new System.EventHandler(this.txtFiltreSehir_TextChanged);

Ana kodumuza da şunu ekliyoruz:

        private void txtFiltreSehir_TextChanged(object sender, EventArgs e)
        {
            dt.DefaultView.RowFilter = string.Format("[{0}] LIKE '%{1}%'", "City", txtFiltreSehir.Text);
        }

  • Sıra numarası kolonu ekleme
		myDataGridView.DataSource = dt;
		foreach (DataGridViewRow row in myDataGridView.Rows)
		{
			row.HeaderCell.Value = String.Format("{0}", row.Index + 1);
		}

  • Header font stili
myDataGridView.Columns[i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
		myDataGridView.Columns[i].HeaderCell.Style.Font = new Font("Arial", 13F, FontStyle.Bold, GraphicsUnit.Pixel);

  • Bir label’da Thread ile çalıştırılan bir işleme ait işlenen kayıt sayısını göstermek

Farklı bir kaç siteden verileri çeken ve ilgili GRID’lere dolduran bir uygulama idi benimkisi.
Ana ekranda da durumu görüntülemek için LABEL nesneleri vardı.

		public class ThreadTemelNesne
		{
			public Label? Lbl1 { get; set; }
			public Label? Lbl2 { get; set; }
			public string? SehirAdi { get; set; }
		}
	
		public void GetirBirinciSitedenVeri(ThreadTemelNesne objThread)
        {
            Thread trd = new Thread(new ParameterizedThreadStart(getirBirinciSitedenVeri));
            trd.IsBackground = true;
            trd.Start(objThread);
        }
		
		private void getirBirinciSitedenVeri(object objThread)
        {
            ThreadTemelNesne obj = (ThreadTemelNesne)objThread;
            Label l = obj.Lbl1;
            Label l2 = obj.Lbl2;
			//....
			//..
			if (l.InvokeRequired)
			{
				l.Invoke(new MethodInvoker(delegate { l.Text = sayac.ToString() + ". record has been downloaded..."; }));
			}
			else
			{
				l.Text = sayac.ToString() + ". record has been downloaded...";
			}
		}

Selamlar.

Bir Kolonu Anahtar Bir Kolona Göre Parçalama  | MsSql

Bir Kolonu Anahtar Bir Kolona Göre Parçalama | MsSql

Merhaba, elimde malzemeler ve o malzemelerle uyumlu araç ID’lerinin olduğu şöyle bir veri seti var: Bu veriden şöyle bir sonuç tablosu elde etmek istiyorum: Bunun için aşağıdaki scripti kullandım. Script içerisinde geçen fonksiyon da bu: Selamlar.