VisualComponents/VisualComponentsLib/MyDataGridView.cs
2023-09-27 13:52:25 +04:00

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