dsurucu
Aşağıda hem OpenFileDialog ile dosya seçip hem de Windows Gezgini’nden sürükle-bırak ile bir veya birden fazla dosyanın yolunu ve adını DataGridView
’e ekleyen eksiksiz bir WinForms örneği bulabilirsiniz.
using System;
using System.IO;
using System.Linq;
using System.Windows.Forms;
namespace DragDropDataGridViewExample
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
SetupDataGridView();
SetupDragDrop();
}
private void SetupDataGridView()
{
// DataGridView'i oluştur ve iki sütun ekle
dataGridView1.Columns.Clear();
dataGridView1.AutoGenerateColumns = false;
dataGridView1.AllowUserToAddRows = false;
var colName = new DataGridViewTextBoxColumn()
{
HeaderText = "Dosya Adı",
Name = "DosyaAdı",
DataPropertyName = "Name",
AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
};
var colPath = new DataGridViewTextBoxColumn()
{
HeaderText = "Dosya Yolu",
Name = "DosyaYolu",
DataPropertyName = "FullName",
AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
};
dataGridView1.Columns.AddRange(colName, colPath);
}
private void SetupDragDrop()
{
// Sürükle bırak desteği
dataGridView1.AllowDrop = true;
dataGridView1.DragEnter += DataGridView1_DragEnter;
dataGridView1.DragDrop += DataGridView1_DragDrop;
// OpenFileDialog butonuna tıklama
btnOpenFile.Click += BtnOpenFile_Click;
}
private void BtnOpenFile_Click(object sender, EventArgs e)
{
using (var ofd = new OpenFileDialog())
{
ofd.Multiselect = true;
ofd.Filter = "Tüm Dosyalar|*.*";
if (ofd.ShowDialog() == DialogResult.OK)
{
foreach (var file in ofd.FileNames)
AddFileToGrid(file);
}
}
}
private void DataGridView1_DragEnter(object sender, DragEventArgs e)
{
// Sadece dosya yolu bırakılınca izin ver
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.Copy;
else
e.Effect = DragDropEffects.None;
}
private void DataGridView1_DragDrop(object sender, DragEventArgs e)
{
// Bırakılan dosya yollarını al
var files = (string[])e.Data.GetData(DataFormats.FileDrop);
foreach (var file in files)
AddFileToGrid(file);
}
private void AddFileToGrid(string filePath)
{
// Geçerli bir dosya mı?
if (!File.Exists(filePath)) return;
// Aynı dosya daha önce eklenmiş mi kontrol et
bool exists = dataGridView1.Rows
.Cast<DataGridViewRow>()
.Any(r => string.Equals(
r.Cells["DosyaYolu"].Value as string,
filePath,
StringComparison.OrdinalIgnoreCase));
if (exists) return;
var fi = new FileInfo(filePath);
dataGridView1.Rows.Add(fi.Name, fi.FullName);
}
}
}
Adım Adım Açıklama
DataGridView Hazırlığı
AutoGenerateColumns = false
ile otomatik sütun oluşumunu kapatıyoruz.
- İki adet
DataGridViewTextBoxColumn
ekliyoruz: Dosya Adı ve Dosya Yolu.
OpenFileDialog ile Dosya Seçme
- Bir buton (
btnOpenFile
) tıklamasında OpenFileDialog
açılıyor, çoklu seçim (Multiselect = true
) aktif.
- Kullanıcı “Tamam” deyince seçilen her dosya
AddFileToGrid
metoduna gönderiliyor.
Sürükle–Bırak Özelliği
dataGridView1.AllowDrop = true
ile bırakmayı etkinleştiriyoruz.
DragEnter
olayında, bırakılan verinin dosya yolu içerip içermediğini kontrol edip uygun Copy etkisini ayarlıyoruz.
DragDrop
olayında ise gelen dosya yollarını alıp aynı AddFileToGrid
metoduna gönderiyoruz.
Dosya Ekleme ve Çift Kayıt Kontrolü
AddFileToGrid
içinde FileInfo
ile dosya adı ve tam yolunu alıyoruz.
- Aynı dosya birden fazla kez eklenmesin diye DataGridView satırlarını tarayıp kontrol yapıyoruz.
Bu yapıyla hem kullanıcı arayüzü üzerinden dosya seçebilir, hem de Windows Gezgini’nden doğrudan sürükle-bırakla dosya ekleyebilirsiniz. Üzerine eklemek istediğiniz başka sütunlar (boyut, oluşturulma tarihi vb.) varsa, FileInfo
’dan gelen diğer özellikleri de benzer şekilde ekleyebilirsiniz.