115 lines
3.4 KiB
C#
115 lines
3.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using VisualComponentsLib.SupportClass;
|
|
|
|
namespace VisualComponentsLib
|
|
{
|
|
public partial class MyDataGridView : UserControl
|
|
{
|
|
//метод для получения индекса выбранной строки
|
|
public int IndexRow
|
|
{
|
|
get
|
|
{
|
|
if (dataGridView.CurrentCell == null)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
return dataGridView.CurrentCell.RowIndex;
|
|
}
|
|
|
|
set
|
|
{
|
|
if (dataGridView.CurrentCell != null)
|
|
{
|
|
dataGridView.CurrentCell = dataGridView.Rows[value].Cells[0];
|
|
}
|
|
}
|
|
}
|
|
|
|
public MyDataGridView()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
//публичный метод создания заголовков таблицы
|
|
public void AddHeader(List<DataGridViewInfoCol> elements)
|
|
{
|
|
foreach (var elem in elements)
|
|
{
|
|
DataGridViewColumn textColumn = new DataGridViewColumn();
|
|
|
|
textColumn.Name = elem.HeaderName;
|
|
textColumn.HeaderText = elem.Name;
|
|
textColumn.Width = elem.Width;
|
|
textColumn.Visible = elem.IsVisible;
|
|
textColumn.CellTemplate = new DataGridViewTextBoxCell();
|
|
|
|
dataGridView.Columns.Add(textColumn);
|
|
}
|
|
}
|
|
|
|
//публичный параметризованный метод для добавления нового объекта в список
|
|
public void AddObject<T>(T newObject)
|
|
{
|
|
DataGridViewRow row = (DataGridViewRow)dataGridView.Rows[0].Clone();
|
|
|
|
foreach (var prop in newObject.GetType().GetProperties())
|
|
{
|
|
object value = prop.GetValue(newObject);
|
|
|
|
row.Cells[dataGridView.Columns[prop.Name].Index].Value = value;
|
|
}
|
|
|
|
dataGridView.Rows.Add(row);
|
|
}
|
|
|
|
//публичный параметризованный метод для получения нового объекта из списка
|
|
public T GetSelectedObject<T>() where T : new()
|
|
{
|
|
if (dataGridView.SelectedCells.Count == 0)
|
|
{
|
|
return new T();
|
|
}
|
|
|
|
int rowIndex = dataGridView.SelectedCells[0].RowIndex;
|
|
var targetObject = new T();
|
|
|
|
Type objectType = typeof(T);
|
|
|
|
PropertyInfo[] properties = objectType.GetProperties();
|
|
|
|
foreach (PropertyInfo property in properties)
|
|
{
|
|
DataGridViewCell selectedCell = dataGridView.Rows[rowIndex].Cells[property.Name];
|
|
|
|
object cellValue = selectedCell.Value;
|
|
|
|
if (cellValue != null && property.CanWrite)
|
|
{
|
|
object convertedValue = Convert.ChangeType(cellValue, property.PropertyType);
|
|
|
|
property.SetValue(targetObject, convertedValue);
|
|
}
|
|
}
|
|
|
|
return targetObject;
|
|
}
|
|
|
|
//полная очистка
|
|
public void ClearTable()
|
|
{
|
|
dataGridView.Rows.Clear();
|
|
}
|
|
}
|
|
}
|