DataGridView
CurrentCell Alanı
Şöyle yaparız
Açıklaması şöyle. Sadece bu çağrıyı yapmak yetmez.
Şöyle yaparız.
Oject tipindendir. Çok farklı çeşitlerde veriyi kullanabiliyor. Liste verirsek nesnenin public property alanlarını gösterir. Şöyle yaparız.
Satırlara Rows alanı ile erişiriz. Aynı bir dizide olduğu gibi silme, ekleme çıkarma yapılabilir. DataGridViewRow yazısına taşıdım.
SelectionMode Alanı
Şöyle yaparız.
Eğer gösterilecek liste çok büyükse VirtualMode kullanılmalı. DataGridViewCellValueEventArgs parametresi hangi satırın istendiğini belirtir. Şöyle yaparız.
Diğer Metodlar
Sütun Formatı
Sütun formatı değiştirilebilir.
Checkbox sütun şöyle eklenir.
Renk Değiştirme
AlternatingRowsDefaultCellStyle alanında BackColor farklı bir renk seçilirse, her tek satır yeni renk ile boyanır.
SelectedRows
Tüm seçili satırla şöyle silinebilir. Satır nesnesini sildiğimiz için indeks'lerin kaymasından etkilenmeyiz.
SelectedCell
CurrentCell Alanı
Şöyle yaparız
if (grid.Rows.Count > 0)
{
grid.Rows[0].Selected = true;
grid.CurrentCell = grid.Rows[0].Cells[0];
}
CurrentRow AlanıAçıklaması şöyle. Sadece bu çağrıyı yapmak yetmez.
To change the current row, you must set the CurrentCell property to a cell in the desired row.Örnek
Şöyle yaparız.
dataGridView1.CurrentRow.Cells[2].Value.ToString()
DataSource AlanıOject tipindendir. Çok farklı çeşitlerde veriyi kullanabiliyor. Liste verirsek nesnenin public property alanlarını gösterir. Şöyle yaparız.
List<Foo> list = ...;
dataGridView1.DataSource = list;
Dizi için şöyle yaparız.
ReadOnly Alanı
Şöyle yaparız
Sütun sayısı şöyle kontrol edilir.Foo[] data = ...
dataGridView1.DataSource = data;
Bu alana DataSet veya DataTable tipinden nesneler de atanabilir.ReadOnly Alanı
Şöyle yaparız
void InitializeGrid()
{
grid.ReadOnly = true;
grid.AllowUserToAddRows = false;
grid.AllowUserToDeleteRows = false;
grid.MultiSelect = false;
grid.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
grid.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
grid.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
...
}
RowCount Alanıif (dataGridView1.RowCount > 0){...}
Rows AlanıSatırlara Rows alanı ile erişiriz. Aynı bir dizide olduğu gibi silme, ekleme çıkarma yapılabilir. DataGridViewRow yazısına taşıdım.
SelectionMode Alanı
Şöyle yaparız.
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
VirtualModeEğer gösterilecek liste çok büyükse VirtualMode kullanılmalı. DataGridViewCellValueEventArgs parametresi hangi satırın istendiğini belirtir. Şöyle yaparız.
dataGridView1.VirtualMode = true;
dataGridView1.CellValueNeeded += new
DataGridViewCellValueEventHandler(dataGridView1_CellValueNeeded);
Daha sonra event handler şöyle yazılır. e nesnesinin RowIndex ve ColumnIndex değerleri ile hangi hücrenin istendiği bulunur. e.Value ile hücreye değer atanır.void dataGridView1_CellValueNeeded(object sender,
System.Windows.Forms.DataGridViewCellValueEventArgs e)
{
if (e.RowIndex == this.dataGridView1.RowCount - 2 && e.ColumnIndex == 0)
{
return;
}
e.Value = DSg.Tables[0].Rows[e.RowIndex][e.ColumnIndex];
}
Diğer Metodlar
Sütun Formatı
Sütun formatı değiştirilebilir.
dataGridView1.Columns[0].DefaultCellStyle.Format = "h:mm tt";
Sütun Olarak CheckboxCheckbox sütun şöyle eklenir.
DataGridViewCheckBoxColumn col = new DataGridViewCheckBoxColumn()
{
Name = "Check"
};
dataGridView1.Columns.Add(col);
Daha sonra bu sütunun işaretli olup olmadığını şöyle kontrol ederiz.DataGridViewRow row = dataGridView1.Rows[1];
if (Convert.ToBoolean(row.Cells[0].Value) == true) {...}
CheckBox'ları işaretlemek için şöyle yaparız.foreach (DataGridViewRow row in dataGridView1.Rows)
{
//Check Column 3 for quantity
if (row.Cells[3].Value.ToString() == "0")
{
//Get checkbox in column 1 and cast it to a checkbox
DataGridViewCheckBoxCell cell = row.Cells[1] as DataGridViewCheckBoxCell;
cell.Value = cell.TrueValue;
}
}
Renk Değiştirme
AlternatingRowsDefaultCellStyle alanında BackColor farklı bir renk seçilirse, her tek satır yeni renk ile boyanır.
SelectedRows
Tüm seçili satırla şöyle silinebilir. Satır nesnesini sildiğimiz için indeks'lerin kaymasından etkilenmeyiz.
foreach (var row in dataGridView1.SelectedRows)
{
dataGridView1.Rows.Remove(row);
}
SelectedCell
Seçili tüm hücreler şöyle dolaşılır. Her hücrenin Value, FormattedValue ve EditedFormattedValue isimli alanları vardır.
// Iterate through the SelectedCells collection and sum up the values.
for (counter = 0;counter < (myGridView.SelectedCells.Count); counter++)
{
if (myGridView.SelectedCells[counter].FormattedValueType ==
Type.GetType("System.String"))
{
string value = null;
// If the cell contains a value that has not been commited,
// use the modified value.
if (myGridView.IsCurrentCellDirty == true)
{
value = myGridView.SelectedCells[counter]
.EditedFormattedValue.ToString();
}
else
{
value = myGridView1.SelectedCells[counter]
.FormattedValue.ToString();
}
if (value != null)
{
// Ignore cells in the Description column.
if (myGridView1.SelectedCells[counter].ColumnIndex !=
myGridView1.Columns["Description"].Index)
{
if (value.Length != 0)
{
SelectedCellTotal += int.Parse(value);
}
}
}
}
}
Eventler
CellBeginEdit
Hücre düzenlenmeye başlanınca tetiklenir. Şöyle yaparız.
Odak (focus) bir başka hücreye geçince tetiklenir.
e parametresinin RowIndex ve ColumnIndex alanları önemli. Şöyle yaparız.
e parametresinin RowIndex ve ColumnIndex alanları önemli. Ayrıca e.Value ile yeni değer atarız. Şöyle yaparız.
CellPainting
Şöyle yaparız.
CellValidating
CellValidating için örnek
İmzası şöyle
örnek
Her eklenen satır için çağrılır. Şöyle yaparız.
CellBeginEdit
Hücre düzenlenmeye başlanınca tetiklenir. Şöyle yaparız.
dataGridView1.CellBeginEdit += grvItems_CellBeginEdit;
CellEndEditOdak (focus) bir başka hücreye geçince tetiklenir.
dataGridView1.CellEndEdit += grvItems_CellEndEdit;
Metod şöyledir.void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == dataGridView1.Columns["Quantity"].Index)
{
dataGridView1.EndEdit();
}
}
CellClicke parametresinin RowIndex ve ColumnIndex alanları önemli. Şöyle yaparız.
void OnCellClick(object sender, DataGridViewCellEventArgs e)
{
if(e.ColumnIndex==1 && e.RowIndex>-1)
{
var column = (DataGridViewComboBoxColumn)myGridView1.Columns[e.ColumnIndex];
}
}
Şöyle yaparız.void grid_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex < 0) {...}
if (e.ColumnIndex == 1) {...}
}
CellFormattinge parametresinin RowIndex ve ColumnIndex alanları önemli. Ayrıca e.Value ile yeni değer atarız. Şöyle yaparız.
void grid_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.RowIndex < 0)
return;
//I supposed the image column is at index 1
if (e.ColumnIndex == 1)
e.Value = Properties.Resources.SomeImage;
}
CellPainting
Şöyle yaparız.
void dataGridView1_CellPainting(object sender,DataGridViewCellPaintingEventArgs e)
{
if ((e.RowIndex % 2) == 0)
e.CellStyle.BackColor = Color.NavajoWhite;
}
e.Graphics alanı ile çizim yapılabilir.void grid_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex < 0)
return;
//I supposed your button column is at index 0
if (e.ColumnIndex == 0)
{
e.Paint(e.CellBounds, DataGridViewPaintParts.All);
var w = Properties.Resources.SomeImage.Width;
var h = Properties.Resources.SomeImage.Height;
var x = e.CellBounds.Left + (e.CellBounds.Width - w) / 2;
var y = e.CellBounds.Top + (e.CellBounds.Height - h) / 2;
e.Graphics.DrawImage(Properties.Resources.SomeImage,
new Rectangle(x, y, w, h));
e.Handled = true;
}
}
CellValidating
CellValidating için örnek
void OnCellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
int currentCell = TestGrid.CurrentCell.ColumnIndex;
var oldValue = TestGrid[e.ColumnIndex, e.RowIndex].Value;
var newValue = TestGrid[e.ColumnIndex, e.RowIndex].EditedFormattedValue;
/* Perform some logic here*/
}
ColumnAddedİmzası şöyle
public event DataGridViewColumnEventHandler ColumnAdded
Handler şöyle yazılır.void DataGridView1_ColumnAdded(Object sender, DataGridViewColumnEventArgs e) {
if(e.Column.ValueType is DateTime) {
e.Column = new MyCalendarColumn();
}
}
EditingControlShow örnek
void OnEditingControlShowing(object sender,
DataGridViewEditingControlShowingEventArgs e)
{
if (this.myGridView1.CurrentCell.ColumnIndex == 1)
{
var comboBox = e.Control as DataGridViewComboBoxEditingControl;
comboBox.Click -= comboBox_Click;
comboBox.Click += comboBox_Click;
}
}
RowsAddedHer eklenen satır için çağrılır. Şöyle yaparız.
void OnRowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
DataGridViewRow row = dataGridView1.Rows[e.RowIndex];
...
}
teşekkürler, çok faydalı oldu. sağolun.
YanıtlaSil