115 lines
3.4 KiB
C#
Raw Normal View History

2023-09-13 11:57:01 +04:00
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
2023-09-27 12:09:32 +04:00
using System.Reflection;
2023-09-13 11:57:01 +04:00
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
2023-09-27 13:52:25 +04:00
using VisualComponentsLib.SupportClass;
2023-09-13 11:57:01 +04:00
namespace VisualComponentsLib
{
2023-09-13 13:48:16 +04:00
public partial class MyDataGridView : UserControl
2023-09-13 11:57:01 +04:00
{
2023-09-27 12:09:32 +04:00
//метод для получения индекса выбранной строки
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];
}
}
}
2023-09-13 13:48:16 +04:00
public MyDataGridView()
2023-09-13 11:57:01 +04:00
{
InitializeComponent();
}
2023-09-13 12:53:53 +04:00
//публичный метод создания заголовков таблицы
2023-09-27 13:52:25 +04:00
public void AddHeader(List<DataGridViewInfoCol> elements)
{
2023-09-27 13:52:25 +04:00
foreach (var elem in elements)
{
DataGridViewColumn textColumn = new DataGridViewColumn();
2023-09-27 13:52:25 +04:00
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)
2023-09-13 12:53:53 +04:00
{
2023-09-27 11:26:30 +04:00
DataGridViewRow row = (DataGridViewRow)dataGridView.Rows[0].Clone();
2023-09-13 12:53:53 +04:00
2023-09-27 00:51:33 +04:00
foreach (var prop in newObject.GetType().GetProperties())
{
2023-09-27 01:26:31 +04:00
object value = prop.GetValue(newObject);
2023-09-27 11:26:30 +04:00
row.Cells[dataGridView.Columns[prop.Name].Index].Value = value;
2023-09-27 00:51:33 +04:00
}
dataGridView.Rows.Add(row);
2023-09-13 12:53:53 +04:00
}
2023-09-27 11:38:01 +04:00
//публичный параметризованный метод для получения нового объекта из списка
2023-09-27 12:09:32 +04:00
public T GetSelectedObject<T>() where T : new()
2023-09-13 12:53:53 +04:00
{
2023-09-27 12:09:32 +04:00
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);
}
}
2023-09-27 11:38:01 +04:00
2023-09-27 12:09:32 +04:00
return targetObject;
2023-09-13 12:53:53 +04:00
}
2023-09-27 01:26:31 +04:00
2023-09-27 11:38:01 +04:00
//полная очистка
public void ClearTable()
2023-09-27 01:26:31 +04:00
{
2023-09-27 11:38:01 +04:00
dataGridView.Rows.Clear();
2023-09-27 01:26:31 +04:00
}
2023-09-13 11:57:01 +04:00
}
}