Rehber C# DataGridView üzerinde hızlı arama işlemi yapımı

Merhabalar. Bugün sizlere C# DataGridView nesnesi ile nasıl hızlı bir şekilde arama motoru yapacağınızı anlatmaya çalışacağım.
Öncelikle bir adet TextBox ve DataGridView nesnesi ekliyoruz.

1637944169694.png


Ben veri çok olması için sistemde yüklü olan sürücüleri yazdırdım. Siz istediğiniz bir veri yazabilirsiniz.

1637944204420.png


Başvurularımız şu şekilde;

C#:
using System;
using System.Drawing;
using System.IO;
using System.Management;
using System.Windows.Forms;

Form yüklenirken oluşturduğum küçük bir ayar ve veri ekleme işlemi var.

C#:
private void Form1_Load(object sender, EventArgs e){
 rotate();
 }
 private void rotate(){
 DataMainTable.Columns.Add("col_1", "Dosya Adı");
 DataMainTable.Columns.Add("col_2", "Sürücü Adı");
 DataMainTable.Columns.Add("col_3", "Sürücü Tipi");
 DataMainTable.Columns.Add("col_4", "Başlangıç");
 settings_data_table();
 }
 private void settings_data_table(){
 DataMainTable.ColumnHeadersDefaultCellStyle.BackColor = Color.DodgerBlue;
 DataMainTable.ColumnHeadersDefaultCellStyle.ForeColor = Color.White;
 DataMainTable.DefaultCellStyle.SelectionBackColor = Color.DodgerBlue;
 DataMainTable.DefaultCellStyle.SelectionForeColor = Color.White;
 DataMainTable.Columns[0].Width = 150;
 DataMainTable.Columns[1].Width = 300;
 DataMainTable.Columns[2].Width = 125;
 DataMainTable.Columns[3].Width = 85;
 DataMainTable.EnableHeadersVisualStyles = false;
 DataMainTable.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None;
 DataMainTable.AllowUserToResizeRows = false;
 try{
 ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_SystemDriver");
 foreach (ManagementObject queryObj in searcher.Get()){
 object driver_name = queryObj["PathName"];
 string driver_name_x64 = Convert.ToString(driver_name).Trim();
 string driver_name_x128 = Path.GetFileName(driver_name_x64);
 object driver_path = queryObj["Caption"];
 string driver_path_x64 = Convert.ToString(driver_path).Trim();
 object driver_type = queryObj["ServiceType"];
 string driver_type_x64 = Convert.ToString(driver_type).Trim();
 object driver_start = queryObj["StartMode"];
 string driver_start_x64 = Convert.ToString(driver_start).Trim();
 string[] driver_infos = { driver_name_x128, driver_path_x64, driver_type_x64, driver_start_x64 };
 DataMainTable.Rows.Add(driver_infos);
 }
 }catch (ManagementException) { }
 DataMainTable.ClearSelection();
 }

Ardından TextBox'a çift tıklayıp şu kodları içine yazıyoruz. Bu hızlı ve otomatik arama yapmanızı sağlar.

C#:
 if (SearchEngine.Text == ""){
 DataMainTable.ClearSelection();
 DataMainTable.FirstDisplayedScrollingRowIndex = DataMainTable.Rows[0].Index;
 }else{
 try{
 foreach (DataGridViewRow row in DataMainTable.Rows){
 if (row.Cells[1].Value.ToString().ToLower().StartsWith(SearchEngine.Text.ToString().Trim().ToLower())){
 row.Selected = true; DataMainTable.FirstDisplayedScrollingRowIndex = row.Index; break;
 }
 }
 }catch(Exception){ }
 }

Not: StartsWith yazarsanız ilk harfinden itibaren arama yapar. Equals yazarsanız tüm kelime eşleşirse değeri seçer.
Not: row.Cells[1] değeri sütunu seçer. Sütun sıralaması 0'dan başlar. Hangi sütun üzerinde arama yapacaksanız o sütun değerini seçiniz.

Şimdi deneme zamanı;

1637944405468.png


1637944415898.png


Görüldüğü üzere otomatik seçiyor ve ilk sıraya getiriyor. Siz yazıyı sildiğiniz anda otomatik DataGridView en üste gider ve seçim iptal edilir.

1637944641954.png


Yardımcı olabildiysem ne mutlu. İyi çalışmalar herkese.
 
Son düzenleyen: Moderatör:
Elinize sağlık. StartsWith methodu yerine Contains methodu daha iyi olurdu bence.

Evet, daha iyi olabilirdi. Ancak Contains metodu ile birden fazla değer seçme olanağı sunuyor. Bunun için ekstra yapı yapmak gerekir.

İyi çalışıyorda listede olmayan bir şey girdiğimde null değer gönderiyor.
Bunu nasıl çözebilirim?

Null dönmemesi gerekir. Seçme işlemi yapmaz.
 

Yeni konular

Geri
Yukarı