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.

Leave a Reply

Your email address will not be published. Required fields are marked *