我创建了一个存储过程(SP)的列表,并集成在以下方式工作得很好:DataTable中要加载
编辑:
private DataTable GetSPResult()
{
int m = Convert.ToInt32(DropDownList1.SelectedValue);
int k = Convert.ToInt32(DropDownList2.SelectedValue);
DataTable ResultsTable = new DataTable();
var context = new DemoEntities();
var con = context.Database.Connection;
var connectionState = con.State;
try
{
using (context)
{
con.Open();
using (var cmd = con.CreateCommand())
{
cmd.CommandText = "MonthlyConsumption"; //Here is the SP
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@Para1", SqlDbType.Int));
cmd.Parameters["@Para1"].Value = m;
cmd.Parameters.Add(new SqlParameter("@Para2", SqlDbType.Int));
cmd.Parameters["@Para2"].Value = k;
using (var reader = cmd.ExecuteReader())
{
ResultsTable.Load(reader);
}
}
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (con != null)
{
con.Close();
}
}
return ResultsTable;
}
最后做了如下:在按一下按钮,我能看到在报告中
protected void Button1_Click(object sender, EventArgs e)
{
DataTable dt = GetSPResult();
ReportViewer1.Visible = true;
ReportViewer1.LocalReport.ReportPath = Server.MapPath("Report1.rdlc");
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", dt));
}
输出数据:
但是,当我尝试将列表转换为数据表与ORM,它抛出也不例外,但是报告中没有数据如下:
输出:
这是我到目前为止使用ORM的实体框架所做的代码,它也起作用:顺便说一句,我为了调试目的而放置了断点,并且它获取了值,但没有将数据报告
public DataTable GetSPResult()
{
int m = Convert.ToInt32(DropDownList1.SelectedValue);
int k = Convert.ToInt32(DropDownList2.SelectedValue);
DataTable ResultsTable = new DataTable();
var context = new DemoEntities();
using (context)
{
var query = context.MonthlyConsumption(m, k).ToList();
foreach (var item in query)
{
ResultsTable.Columns.Add("Store");
ResultsTable.Columns.Add("Product");
ResultsTable.Columns.Add("Jan");
ResultsTable.Columns.Add("Feb");
ResultsTable.Columns.Add("Mar");
ResultsTable.Columns.Add("Apr");
ResultsTable.Columns.Add("May");
ResultsTable.Columns.Add("Jun");
ResultsTable.Columns.Add("Jul");
ResultsTable.Columns.Add("Aug");
ResultsTable.Columns.Add("Sep");
ResultsTable.Columns.Add("Oct");
ResultsTable.Columns.Add("Nov");
ResultsTable.Columns.Add("Dec");
ResultsTable.Rows.Add(item.StoreName);
ResultsTable.Rows.Add(item.ItemName);
ResultsTable.Rows.Add(item.M1.Value);
ResultsTable.Rows.Add(item.M2.Value);
ResultsTable.Rows.Add(item.M3.Value);
ResultsTable.Rows.Add(item.M4.Value);
ResultsTable.Rows.Add(item.M5.Value);
ResultsTable.Rows.Add(item.M6.Value);
ResultsTable.Rows.Add(item.M7.Value);
ResultsTable.Rows.Add(item.M8.Value);
ResultsTable.Rows.Add(item.M9.Value);
ResultsTable.Rows.Add(item.M10.Value);
ResultsTable.Rows.Add(item.M11.Value);
ResultsTable.Rows.Add(item.M12.Value);
}
}
return ResultsTable;
}
注和更新:我能列表转换为IDataReader的加载,或还有什么能让它做什么简单的办法?我见过一些教程,作者使用foreach
循环迭代列表,然后将其绑定到DataTable。但我只是试图简单地将列表加载到DataTable。
这对您有帮助吗? http://stackoverflow.com/questions/23697467/returning-datatable-using-entity-framework – user3185569
如果你真的需要使用数据阅读器,然后自己实现一个。但是,如果你只需要将你的数据绑定到报表上,然后尝试使用BindingSource组件(我假设他们在这里使用win表单)。 BindingSource可以与列表绑定。然后,您可以将您的报告绑定到BindingSouce – user1681317
该解决方案几乎与mine @ user3185569完全相同。谢谢。我一定会在帖子中看到其他选择。 @ user1681317没关系。我没有得到它我的意思是我自己创建'DataReader'。我已经在项目中使用了EF(Web Form),并将传统的Sql和Linq混合在一起,开始使用DataTable。所以我在考虑是否会有任何冲突或其他选择来充分使用EF。 –