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 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 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() 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(); } } }