Когда я пытаюсь использовать this accepted answer для динамического добавления столбцов в свой DataTable, условие if
никогда не будет истинным. Я попытался изменить struct
на class
, и я пробовал с и без BindingFlags
на GetProperties
. Что мне не хватает?C# Динамически добавлять столбцы в DataTable для каждого свойства объекта
public partial class mainForm : Form
{
public DataTable DeviceDataTable;
public mainForm()
{
InitializeComponent();
AttachToTable(new TestObject());
}
public void AttachToTable(params object[] data)
{
for (int i = 0; i < data.Length; i++)
{
if (data[i].GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance).Length > DeviceDataTable.Columns.Count)
foreach (PropertyInfo info in data[i].GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
DeviceDataTable.Columns.Add(info.Name, data[i].GetType());
}
}
DeviceDataTable.Rows.Add(data);
}
public struct TestObject
{
public static readonly string Porperty_One = "First property";
public static readonly string Porperty_Two = "Second property";
public static readonly string Porperty_Three = "Third property";
}
}
Ваш образец структуры плохой, потому что он не имеет свойств, даже полей экземпляров, а только статических полей. Поэтому ваш Type.GetProperties не вернет их. –
@TimSchmelter Вы правы! Добавление 'get; set; 'к свойствам' TestObject' и удалению 'static readonly' решила проблему. Я не знал, что 'GetProperties()' не вернул строки 'static readonly'. Если вы уточните свой ответ, я буду отмечать его как принятый anser. – user5825579