Rehber C# UserContol ile Veritabanındaki Verileri Listeleme

Katılım
22 Temmuz 2019
Mesajlar
1.839
Makaleler
2
Çözümler
23
Adım adım anlatım yapacağım.




Öncelike verileri alacağımız bir veritabanı oluşturmanız gerekiyor ben bu iş için SQLite kullanacağım.

1700511135842.png


Veritabanını oluştururken, veritabanı dosyanızı uygulamanızın Debug klasörüne yerleştirin. Eğer uygulama yolunu bilmiyorsanız Visual Studio üzerinden dosya simgesine tıklayarak kolayca bulabilirsiniz.

Örnek yol: 'C:\Uygulamanızın İsmi\bin\Debug

1700511395345.png




Tablo oluştura basıp bir tablo oluşturuyoruz. Ben Test Adında bir tablo yaptım ve alanlarını belirledim.

1700511691058.png


1700511745471.png




connectionStrings: Bu bölüm, uygulamanın veritabanı bağlantı dizelerini içerir. Burada, DBconnection adında bir bağlantı dizesi tanımladım. Bu örnekte, SQLite veritabanı için bir bağlantı dizesi bulunmaktadır. app.config içeresine bunu yerleştiriyoruz.

"Data source=.\\TestDB.db" kısmına kendi veritabanımızın isimini yazın.

XML:
    <connectionStrings>
        <add name="DBconnection" connectionString="Data source=.\\TestDB.db;Versiyon=3" providerName="System.Data.SQLite" />
    </connectionStrings>

1700512064267.png




Manege NuGet Packages üzerinden Microsoft.Data.Sqlite.Core kütüphanesini indiriyoruz.

1700512223256.png




Using ekliyoruz.

C#:
using System.Data.SQLite;

Bu kısımdan sonra sizin ihtiyacınız tam olarak ne ise ona göre uygulamanızı şekillendirin. Benim yapacağım tarz bir şey istiyorsanız uygulamanıza bir UserControl
ekleyin.

1700512586803.png


Contol'ün kod kısmına ben bunları yazdım.
Bu kodun genel amacı, bir UserControl içinde bulunan bazı verileri yüklemek ve bu verileri UI elemanlarına (label'lar) yerleştirmektir. TestID, TestName, ve TestNo özellikleri, bu UserControl içindeki veriye erişim sağlayan arayüzü temsil eder. Bu tür bir yapı, kullanıcı arayüzü elemanlarını bir sınıf içinde düzenlemek ve yönetmek için sıkça kullanılır.

C#:
private int _testID;
private string _testName;
private int _testNo;

public int TestID
{
    get => _testID;
    set => _testID = value;
}

public string TestName
{
    get => _testName;
    set => _testName = value;
}

public int TestNo
{
    get => _testNo;
    set => _testNo = value;
}

private void LoadTestData()
{
    TestID_Label.Text = TestID.ToString();
    TestName_Label.Text = TestName;
    TestNo_Label.Text = TestNo.ToString();
}

private void Test_UserControl_Load(object sender, EventArgs e)
{
    LoadTestData();
}


Şimdi listeleme yapmak için kodumuzu yazıyoruz.
Bir sınıf içeresinden kodlarınızı çağırmak daha mantıklıdır fakat ben daha kolay anlaşıldığı için doğrudan form içerisinden çağıracağım.

Void içerisine kodumuzu yazıyoruz.

C#:
public void TestList(Control cntrl, string sqlCommand)
{
    try
    {
        using (SQLiteConnection connection = new SQLiteConnection(ConfigurationManager.ConnectionStrings["DBconnection"].ConnectionString))
        {
            connection.Open();

            cntrl.Controls.Clear();
            List<Test_UserControl> test_UserControls = new List<Test_UserControl>();

            using (SQLiteCommand command = new SQLiteCommand(sqlCommand, connection))
            {
                using (SQLiteDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        Test_UserControl test_UserData = new Test_UserControl
                        {
                            TestID = Convert.ToInt32(reader["TestID"]),
                            TestName = reader["TestName"].ToString(),
                            TestNo = Convert.ToInt32(reader["TestNo"])
                        };

                        test_UserControls.Add(test_UserData);
                    }
                }
            }

            foreach (var control in test_UserControls)
            {
                cntrl.Controls.Add(control);
            }
        }
    }
    catch (SQLiteException sqlEx)
    {
        MessageBox.Show("SQLite Hatası: " + sqlEx.Message);
    }
    catch (Exception ex)
    {
        MessageBox.Show("Bir hata oluştu: " + ex.Message);
    }
}

Bu kod, bir SQLite veritabanından veri okuyor ve bu verileri kullanarak bir dizi Test_UserControl nesnesi oluşturuyor. Her Test_UserControl nesnesi, veritabanından okunan bir satıra karşılık gelir ve TestID, TestName ve TestNo özelliklerine sahiptir.

Kodun işleyişi şu şekildedir:
  1. İlk olarak, bir SQLite veritabanı bağlantısı açılır.
  2. Ardından, cntrl adlı kontrolün alt kontrol listesi temizlenir ve yeni bir Test_UserControl listesi oluşturulur.
  3. Bir SQLite komutu oluşturulur ve bu komut, veritabanında belirtilen SQL sorgusunu çalıştırır.
  4. Sorgu sonucunda dönen her satır için, bir Test_UserControl nesnesi oluşturulur ve bu nesne, oluşturulan listeye eklenir.
  5. Son olarak, oluşturulan Test_UserControl nesneleri, cntrl kontrolünün alt kontrol listesine eklenir.

Son olarak kodu Form yüklendiği an çağırıyorum. TestPanel adında Form içersinde bir FlowLayoutPanel var.

C#:
private void Test_Load(object sender, EventArgs e)
{
    TestList(TestPanel, "SELECT* FROM Test ORDER BY TestID ASC");
}


1700514249009.png
 

Dosya Ekleri

  • 1700512220157.png
    1700512220157.png
    28,7 KB · Görüntüleme: 39

Technopat Haberler

Yeni konular

Geri
Yukarı