2015-10-03 5 views
0

Я создал динамический класс, используя базу данных с именем mMember и содержащий некоторые проэктивы. Я хочу использовать это свойство для назначения данных в datagrid в wpf.создать список динамически создаваемых классов в C#

 private void Button_Click(object sender, RoutedEventArgs e) 
    { 

     ICodeCompiler loCompiler = new CSharpCodeProvider().CreateCompiler(); 
     CompilerParameters loParameters = new CompilerParameters(); 
     // Start by adding any referenced assemblies 
     loParameters.ReferencedAssemblies.Add("System.dll"); 
     // Must create a fully functional assembly as a string 
     lcCode = @"public class mMember 
     { 
      public static int cid { get; set; } 

      public static string cFname { get; set; } 

      public static string cLname { get; set; } 

      public static decimal? iAge { get; set; } 

      public static string dpDept_Id { get; set; } 

      public static bool? bEnabled { get; set; } 
     }"; 

     // Load the resulting assembly into memory 
     loParameters.GenerateInMemory = false; 
     // Now compile the whole thing 
     CompilerResults loCompiled = 
      loCompiler.CompileAssemblyFromSource(loParameters, lcCode); 
     if (loCompiled.Errors.HasErrors) 
     { 
      string lcErrorMsg = ""; 
      lcErrorMsg = loCompiled.Errors.Count.ToString() + 
         " Errors:"; 
      for (int x = 0; x < loCompiled.Errors.Count; x++) 
       lcErrorMsg = lcErrorMsg + "\r\nLine: " + 
          loCompiled.Errors[x].Line.ToString() + 
           " - " + loCompiled.Errors[x].ErrorText; 
      MessageBox.Show(lcErrorMsg + "\r\n\r\n" + lcCode, 
          "Compiler Demo"); 
      return; 
     } 
     Assembly loAssembly = loCompiled.CompiledAssembly; 
     Type calcType = loAssembly.GetType("mMember"); 

     // Retrieve an obj ref - generic type only 
     object loObject = 
       loAssembly.CreateInstance("mMember"); 
     PropertyInfo numberPropertyInfo = calcType.GetProperty("cLname"); 

     numberPropertyInfo.SetValue(loObject, "Kadam", null); 

     string value = (string)numberPropertyInfo.GetValue(loObject, null); 

     var loResult1 = loObject.GetType().GetProperty("cLname").GetValue(this, null); 
     MessageBox.Show(loResult1.ToString()); 

      if (loObject == null) 
     { 
      MessageBox.Show("Couldn't load class."); 
      return; 
     } 
    } 

Теперь я хочу, чтобы создать список свойств данных, указанных в выше динамически созданного классаmMember и связать этот список DataGrid в МОФ. Я хочу создать Список в указанном формате, например Заказ - это мое имя класса, которое также содержит свойства, такие как mMember класс, но класс в формате Ready. Наконец, я связываю заказы на datagrid.

 List<Order> orders = new List<Order>(); 

     for (int i = 0; i < dt.Rows.Count; i++) 
     { 
      orders.Add(new Order() { MB_ID =Convert .ToInt64 (dt.Rows[i]["MB_ID"]), Name = dt.Rows[i]["MEMBER_NAME"].ToString(), ItemCount = dt.Rows[i]["MB_ID"].ToString(), CompanyId = dt.Rows[i]["COMPANY_ID"].ToString() }); 
     } 
    // Set the data context 
     this.DataContext = orders; 

теперь я хочу создать подобный список для mMember класса. поэтому я создал экземпляр для таких же, но оно не работает

IList list1 = (IList)Activator.CreateInstance(typeof(List<>).MakeGenericType(new Type[] { loObject.GetType() })); 

как добавить листу данных в это и привязать к сетке

+1

Почему ... почему вы пытаетесь это сделать в первую очередь? Что бы вы ни пытались сделать, я уверен, что есть более простой способ. –

+0

не могли бы вы объяснить это. Но для динамически созданного класса и их свойств. Заранее спасибо. –

+0

Зачем вам нужен динамический класс? –

ответ

0

У меня был один и тот же вопрос и был в состоянии решить эту проблему с помощью ваш код в сочетании с одним here. Ваш код создания самого объекта списка является правильным и работает. После этого вам нужно заполнить список динамически создаваемыми объектами. Вам просто нужно создавать объекты, например. через «object = Activator.CreateInstance (type)», заполните их и добавьте их «list1.Add (object)».

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