9 Aralık 2018 Pazar

Winforms ListView

Giriş
ListView binding bir bileşen değil, kendisine verilen bilgisinin kopyasını alıyor gibi düşünülebilir. ListBox'tan daha gelişmiş özelliklere sahip. Bu sınıfla çalışırken barındırdığı iki sınıfı daha bilmek lazım. Bunlar ListViewItem ve ListViewSubItem sınıfları

View Tipi
ListView bileşeninin sağ üst köşesindeki küçük oka tıklanarak "View" tipi değiştirilebilir.  4 tane view tipi sunuluyor. Bunlar iconview, small icon-view, list-view, details-view. Ben hep "Details" seçeneğini kullandım.

BeginEdit metodu
LabelEdit alanı true yapılara liste düzenlenebilir. Düzenleme işlemini kodla başlatmak için şöyle yaparız.
listView1.SelectedItems[0].BeginEdit();
Bu kod sonucunda bir TextBox yaratılır. Bu TextBox'ın Key eventleri ne yazık ki ListView nesnesine gelmiyor. Düzenleme işlemi bitince AfterLabelEdit event'i yakalanırsa şu kod çağrılabilir.
private void listView1_AfterLabelEdit(object sender, LabelEditEventArgs e)
{
    // Validation code goes here
}
Columns Alanı - Sütun Eklemek
Tasarım ekranından sütun eklenebileceği gibi, koddan da sütun eklenebilir.
listView1.Columns.Add("ID",20);
listView1.Columns.Add("Name",40);
listView1.Columns.Add("Mobile",40);
Sütunu yaslayabiliriz.
listView1.Columns.Add("From", 100, HorizontalAlignment.Left);
FullRowSelect Alanı- Satır Seçimi
Satırın tamamı seçilsin istersek şöyle yaparız.
listView1.FullRowSelect = true;
ItemCheck Event
Şöyle yaparız.
this.listView1.ItemCheck += new ItemCheckEventHandler(listView1_ItemCheck);
Handler şöyledir.
private void listView1_ItemCheck(object sender, ItemCheckEventArgs e)
{
  if (e.CurrentValue != CheckState.Checked) return;
  for (int i = 0; i < lvBase.Items.Count; i++)
  {
    lvBase.Items[i].Checked = true;
  }
}
Items Alanı
Şöyle yaparız.
listView1.Items.Clear();
Items Alanı - Satır Eklemek
Yeni bir satır nesnesi eklemek için şöyle yaparız. Diğer sütunlara yazmak için ListViewItem sınıfının SubItems listesi kullanılır.
ListViewItem item = new ListViewItem("colum1");
item.SubItems.Add("column2");
item.SubItems.Add("column3");
item.SubItems.Add("column4");
listView1.Items.AddRange(item);
Bir csv dosyadındaki satırları şöyle gösteririz.
foreach(string strView = File.ReadLines(filepath))
{
  String[] strArray = strView.Split(new char[] { ',' });
  ListViewItem item = new ListViewItem(strArray[0].ToString());

  item.SubItems.Add(strArray[1].ToString());
  item.SubItems.Add(strArray[2].ToString());
  item.SubItems.Add(strArray[3].ToString());
  item.SubItems.Add(strArray[4].ToString());
  item.SubItems.Add(strArray[5].ToString());
  item.SubItems.Add(strArray[6].ToString());
  listView1.Items.Add(item);
}
Bir sütunun rengi şöyle değiştirilir.
item.SubItems[0].ForeColor = System.Drawing.Color.Red;
Bir sütunun font'u şöyle değiştirirlir.
item.SubItems[0].Font = new Font(..., FontStyle.Italic);
Şöyle yaparız.
item.UseItemStyleForSubItems = false;
LabelEdit Alanı
Şöyle yaparız.
listView1.LabelEdit = true;
SelectedItems Alanı - Seçili Satırlar
Seçili satırlar şöyle silinir.
foreach (ListViewItem item in lstImgAdded.SelectedItems)
{
    item.Remove();
}
Tag Alanı
Seçili satırın 3. sütununun Tag alanıa erişmek için şöyle yaparız.
if ( listView1.SelectedItems.Count > 0 &&     
     listView1.SelectedItems[0].SubItems.Count > 2 )
   listView1.SelectedItems[0].SubItems[2].Tag == seen ?  "Seen" :  "Not Seen";
Sorting Alanı 
Şöyle yaparız.
listView1.Sorting = SortOrder.None;
View Alanı 
Şöyle yaparız.
listView1.View = View.Details;
SelectedIndexChanged Event
Bu event gelirse SelectedItems listesi seçilen nesneleri içerir.
void listView1_SelectedIndexChanged(object sender, EventArgs e) {
  if (listView1.SelectedItems.Count > 0) {
    label1.Text = (string)listView1.SelectedItems[0].Text;
    textBox1.Text = (string)listView1.SelectedItems[0].SubItems[1].Text;
  }
}

6 Aralık 2018 Perşembe

OleDbCommand Sınıfı

Giriş
Şu satırı dahil ederiz.
using System.Data.OleDb;
Constructor - default
Şöyle yaparız. CommandText ve CommandType alanlarına değer atamak gerekir.
using (OleDbCommand cmd = new OleDbCommand())
{
  cmd.Connection  = connection;
  cmd.CommandText = " Insert into ...";
  ...
}
Constructor - commandtext + connection
Örnek
Şöyle yaparız.
var query = "...";
using (var cmd = new OleDbCommand(query, conn))
{
  ...
}
Örnek
Şöyle yaparız. Sql cümlesi içinde "named parameter" kullanılabilir ancak sırasına dikkat etmek lazım.
OleDbConnection conn = ...;
string sqlString = "SELECT * FROM Person INNER JOIN Employee ON " +
            "Person.ID=Employee.ID WHERE ID = @ID";
OleDbCommand comm = new OleDbCommand(sqlString, conn);
comm.Parameters.AddWithValue("@ID", id);
Constructor
OleDBConnection nesnesi tarafından yaratılabilir.Şöyle yaparız. CommandText ve CommandType alanlarına değer atamak gerekir.
OleDbConnection conn = ...;
OleDbCommand cmd = con.CreateCommand();
CommandText Alanı
Şöyle yaparız
cmd.CommandText = "Update [" + comboBox1.SelectedValue.ToString() + "] SET Wbs ='2'";
CommandType Alanı
Şöyle yaparız.
insertCmd.CommandType = CommandType.Text;
ExecuteNonQuery metodu
Açıklaması şöyle
You can use the ExecuteNonQuery to perform catalog operations (for example, querying the structure of a database or creating database objects such as tables), or to change the data in a database without using a DataSet by executing UPDATE, INSERT, or DELETE statements.
Insert,Update, Delete gibi işlermler için kullanılır. Şöyle yaparız.
cmd.ExecuteNonQuery ();
ExecuteReader metodu
Select cümlesini çalıştırır. Şöyle yaparız.
OleDbDataReader dr = comm.ExecuteReader(CommandBehavior.SingleRow);
if (dr.Read())
{
  ...
}
Parameters Alanı
Açıklaması şöyle
The OLE DB .NET Provider does not support named parameters for passing parameters to an SQL statement
Bazı sql sağlayıcıları (hepsi değil) değişkenlerin yerine ? karakteri kullanılır. Buna dikkat etmek gerekir.

Parameters.AddRange ile şöyle yaparız.
...
var query = "INSERT INTO MY_TABLE VALUES (?, ?, ?, ?, ?)";

using (var cmd = new OleDbCommand(query, conn))
{
  cmd.CommandType = CommandType.Text;
  cmd.Parameters.AddRange(new OleDbParameter[]
  {
    new OleDbParameter("@id", FindItemId(filePath)),
    new OleDbParameter("@filepath", filePath),
    new OleDbParameter("@filename", new FileInfo(filePath).Name),
    new OleDbParameter("@filesize", new FileInfo(filePath).Length),
    new OleDbParameter("@md5", GetMd5Hash(filePath))
  });
  cmd.ExecuteNonQuery();
}
Parameters.Add ile şöyle yaparız.
using (OleDbCommand cmd = new OleDbCommand())
{
  cmd.Connection = connection;
  cmd.CommandText = " Insert into Book(Book_Name,Book_Number,Publisher) 
  values(?,?,?)";
  cmd.Parameters.Add("@BookName", OleDbType.VarChar).Value = bookName.Text;
  cmd.Parameters.Add("@BookNumber", OleDbType.Integer).Value = bookNumber.Text;  
  cmd.Parameters.Add("@Publisher", OleDbType.VarChar).Value = publisher.Text;
  cmd.ExecuteNonQuery();
}
ParametersçAddWithValue ile şöyle yaparız.
cmd.CommandText = "UPDATE Data SET Denom = ?, Denom1 = ? WHERE Limit = ?";
cmd.Parameters.AddWithValue("@den50", CRMden50.Text);
cmd.Parameters.AddWithValue("@den100", CRMden100.Text);
cmd.Parameters.AddWithValue("@lim30", 30);
cmd.ExecuteNonQuery();