我有一些从Context返回的数据。数据已由spCmsCategoriesReadHierarchy
提取。
我需要从Context获取所有数据并填充我的DataSet。我的最终目标是使用DataSet对象填充TreeView控件。
有什么想法吗?感谢您的时间和耐心。
using (TestHierarchyEntities context = new TestHierarchyEntities())
{
int n = 0;
Int16 sl = 1;
ObjectParameter nn = new ObjectParameter("nn", typeof(int));
// Create a Data Set where adding the result of context
DataSet dataSet = new DataSet("myDataSet");
foreach (CmsCategory categories in context.spCmsCategoriesReadHierarchy(n,sl,nn))
{
}
}
答案 0 :(得分:5)
当然,您可以手动将数据从对象复制到数据集中的数据行。
DataSet dataSet = new DataSet("myDataSet");
dataSet.Tables.Add(new DataTable());
//Setup the table columns.
foreach (CmsCategory categories in context.spCmsCategoriesReadHierarchy(n,sl,nn))
{
DataRow row = dataSet.Tables[0].NewRow();
row["A"] = categories.A;
row["B"] = categories.B;
dataSet.Tables[0].Rows.Add(row);
}
如果您不想将属性明确地复制到数据行,您也可以使用反射进行复制。
答案 1 :(得分:0)
此方法将对象列表转换为数据表。它是作为this question.
的答案给出的/// <summary>
/// Create data table from list.
/// https://stackoverflow.com/questions/18746064/using-reflection-to-create-a-datatable-from-a-class
/// </summary>
public static DataTable CreateDataTable<T>(IEnumerable<T> list)
{
Type type = typeof(T);
var properties = type.GetProperties();
DataTable dataTable = new DataTable();
foreach (PropertyInfo info in properties)
{
dataTable.Columns.Add(new DataColumn(info.Name, Nullable.GetUnderlyingType(info.PropertyType) ?? info.PropertyType));
}
foreach (T entity in list)
{
object[] values = new object[properties.Length];
for (int i = 0; i < properties.Length; i++)
{
values[i] = properties[i].GetValue(entity);
}
dataTable.Rows.Add(values);
}
return dataTable;
}
答案 2 :(得分:0)
此方法将调用数据库中的存储过程,并用结果填充数据集:
var dataSet = new DataSet();
using ( var sqlCmd = context.Database.Connection.CreateCommand() )
{
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.CommandText = "spCmsCategoriesReadHierarchy";
// sqlCmd.Parameters.Add( new SqlParameter( "@Parameter", value ) );
// sqlCmd.Parameters.Add( new SqlParameter( "@Error", null ) { Direction = ParameterDirection.Output, Size = -1 } );
// Define the data adapter and fill the dataset
using ( DbDataAdapter da = new SqlDataAdapter() )
{
da.SelectCommand = sqlCmd;
da.Fill( dataSet );
}
// resultDetail.Error = sqlCmd.Parameters["@Error"].Value.ToString();
}
注释显示了如何双向传递参数。
p.s .:我们正在使用Entity Framework6。我不知道这是否可以在EF4上使用。