- 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.
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
Tablo oluştura basıp bir tablo oluşturuyoruz. Ben Test Adında bir tablo yaptım ve alanlarını belirledim.
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.
Manege NuGet Packages üzerinden Microsoft.Data.Sqlite.Core kütüphanesini indiriyoruz.
Using ekliyoruz.
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.
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.
Ş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.
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:
Son olarak kodu Form yüklendiği an çağırıyorum. TestPanel adında Form içersinde bir FlowLayoutPanel var.
Öncelike verileri alacağımız bir veritabanı oluşturmanız gerekiyor ben bu iş için SQLite kullanacağım.
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
Tablo oluştura basıp bir tablo oluşturuyoruz. Ben Test Adında bir tablo yaptım ve alanlarını belirledim.
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>
Manege NuGet Packages üzerinden Microsoft.Data.Sqlite.Core kütüphanesini indiriyoruz.
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.
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:
- İlk olarak, bir SQLite veritabanı bağlantısı açılır.
- Ardından, cntrl adlı kontrolün alt kontrol listesi temizlenir ve yeni bir Test_UserControl listesi oluşturulur.
- Bir SQLite komutu oluşturulur ve bu komut, veritabanında belirtilen SQL sorgusunu çalıştırır.
- Sorgu sonucunda dönen her satır için, bir Test_UserControl nesnesi oluşturulur ve bu nesne, oluşturulan listeye eklenir.
- 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");
}