【发布时间】:2015-12-31 16:10:51
【问题描述】:
我使用名为 mMember 的数据库创建了动态类,其中包含一些属性。我想使用这个属性在 wpf 中将数据分配给 datagrid。
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 wpf 。 我想以给定格式创建列表,例如 Order 是我的类名,它还包含像 mMember 类这样的属性,但类是就绪格式。最后,我将 orders 绑定到数据网格。
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() }));
如何将 list 数据添加到其中并绑定到 datagrid
【问题讨论】:
-
为什么...你为什么要首先尝试这样做?无论你想做什么,我很确定有一个更简单的方法。
-
你能解释一下吗?但是对于动态创建的类及其属性。提前致谢。
-
为什么需要创建动态类?