2017-01-24 17 views
0

Когда я пытаюсь использовать 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"; 
    } 
} 
+0

Ваш образец структуры плохой, потому что он не имеет свойств, даже полей экземпляров, а только статических полей. Поэтому ваш Type.GetProperties не вернет их. –

+0

@TimSchmelter Вы правы! Добавление 'get; set; 'к свойствам' TestObject' и удалению 'static readonly' решила проблему. Я не знал, что 'GetProperties()' не вернул строки 'static readonly'. Если вы уточните свой ответ, я буду отмечать его как принятый anser. – user5825579

ответ

0

Ваш образец структуры плохой, потому что он не имеет свойств, даже экземпляров, а только статических полей. Так что Type.GetProperties не вернет их. Это должно работать так, как планировалось:

public class TestObject 
{ 
    public string PorpertyOne => "First property"; 
    public string PorpertyTwo => "Second property"; 
    public string PorpertyThree => "Third property"; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^