在C#中解析动态SQL并在ASP.NETMVC中绑定到WebGrid
在C#中解析动态SQL并在ASP.NETMVC中绑定到WebGrid 我有使用pivot生成结果的动态SQL查询,结果集可能如下所示:在C#中解析动态SQL并在ASP.NETMVC中绑定到WebGrid,c#,asp.net-mvc-3,webgrid,C#,Asp.net Mvc 3,Webgrid,在C#中解析动态SQL并在ASP.NETMVC中绑定到WebGrid 我有使用pivot生成结果的动态SQL查询,结果集可能如下所示: Name Div1 Div2 Div3 Div4 Div5 Active 1 0 0 0 0 Busy 0 0 0 0 1 NA 0 1 0 0 0 Suspended 0 0 0 1 0 可以有n个分区。我想用ASP.NET MVC WebGrid控件
Name Div1 Div2 Div3 Div4 Div5
Active 1 0 0 0 0
Busy 0 0 0 0 1
NA 0 1 0 0 0
Suspended 0 0 0 1 0
可以有n个分区。我想用ASP.NET MVC WebGrid控件绑定此数据。我无法做到这一点
我的C#代码如下所示:
dynamic list = db.ExecuteStoreQuery<dynamic>("exec [dbo].[proc_GetData]").ToList();
return list;
dynamic list=db.ExecuteStoreQuery(“exec[dbo].[proc_GetData]”).ToList();
退货清单;
我想用ASP.NET MVC Webgrid绑定此列表,我的Webgrid代码如下:
WebGrid grid = new WebGrid(Model.DataList);
List<WebGridColumn> list = new List<WebGridColumn>();
list.Add(new WebGridColumn
{
Header = "Name",
ColumnName = "Name"
});
foreach (var item in Model.DivList)
{
list.Add(new WebGridColumn
{
Header = item,
ColumnName = item
});
}
@grid.GetHtml(tableStyle: "webgrid",
alternatingRowStyle: "webgrid-alternating-row",
headerStyle: "webgrid-header",
footerStyle: "webgrid-footer",
selectedRowStyle: "webgrid-selected-row",
rowStyle: "webgrid-row-style",
columns: col);
WebGrid grid=新的WebGrid(Model.DataList);
列表=新列表();
添加(新的WebGridColumn)
{
Header=“Name”,
ColumnName=“Name”
});
foreach(Model.DivList中的var项)
{
添加(新的WebGridColumn)
{
标题=项目,
ColumnName=项目
});
}
@GetHtml(表样式:“webgrid”,
交替行样式:“webgrid交替行”,
标题样式:“webgrid标题”,
页脚样式:“webgrid页脚”,
selectedRowStyle:“webgrid选定行”,
行样式:“webgrid行样式”,
列:col);
这个坏了。请帮助我如何完成这项任务。
谢谢。您必须在ExecuteStoreQuery中指定类型(类和固定属性)。你有另一个选择,你可以使用。我用四个简单的步骤来解释:
1) 将结果集检索到DataTable中
private DataTable GetResultReport()
{
DataTable retVal = new DataTable();
EntityConnection entityConn = (EntityConnection)db.Connection;
SqlConnection sqlConn = (SqlConnection)entityConn.StoreConnection;
using (SqlCommand cmdReport = sqlConn.CreateCommand())
{
cmdReport.CommandType = CommandType.StoredProcedure;
cmdReport.CommandText = "proc_GetData";
SqlDataAdapter daReport = new SqlDataAdapter(cmdReport);
using (cmdReport)
{
daReport.Fill(retVal);
}
}
return retVal;
}
2) 将DataTable转换为IDictionary类型的列表
private List<IDictionary> ConvertToDictionary(DataTable dtObject)
{
var columns = dtObject.Columns.Cast<DataColumn>();
var dictionaryList = dtObject.AsEnumerable()
.Select(dataRow => columns
.Select(column =>
new { Column = column.ColumnName, Value = dataRow[column] })
.ToDictionary(data => data.Column, data => data.Value)).ToList().ToArray();
return dictionaryList.ToList<IDictionary>();
}
谢谢我将尝试这个解决方案。
public List<dynamic> GetData()
{
var resultset = ConvertToDictionary(GetResultReport());
var result = new List<dynamic>();
foreach (var emprow in resultset)
{
var row = (IDictionary<string, object>)new ExpandoObject();
Dictionary<string, object> eachRow = (Dictionary<string, object>)emprow;
foreach (KeyValuePair<string, object> keyValuePair in eachRow)
{
row.Add(keyValuePair);
}
result.Add(row);
}
return result;
}
WebGrid grid = new WebGrid(Model.OfficerOverViewList, rowsPerPage: 5);
@grid.GetHtml(tableStyle: "webgrid",
alternatingRowStyle: "webgrid-alternating-row",
headerStyle: "webgrid-header",
footerStyle: "webgrid-footer",
selectedRowStyle: "webgrid-selected-row",
rowStyle: "webgrid-row-style");