c# - 在 C# 中解析动态 SQL 并绑定(bind)到 ASP.Net MVC 中的 WebGrid

标签 c# asp.net-mvc-3 webgrid

在 C# 中解析动态 SQL 并在 ASP.Net MVC 中绑定(bind)到 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 控件绑定(bind)。我无法做到这一点。

我的 C# 代码如下:

dynamic list = db.ExecuteStoreQuery<dynamic>("exec [dbo].[proc_GetData]").ToList();
return list;

我想将此列表与 ASP.NET MVC Webgrid 绑定(bind),我的 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);

这个不行。请帮助我如何完成这项任务。 谢谢。

最佳答案

您必须在 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类型的List

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>();
    }

3) 然后循环遍历IDictionary类型的List,将其添加到Dynamic类型的List类型中,以便与webgrid绑定(bind):

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;
    }

4) View 中的 WebGrid 绑定(bind)代码 (.cshtml):

                        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");

关于c# - 在 C# 中解析动态 SQL 并绑定(bind)到 ASP.Net MVC 中的 WebGrid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23297979/

相关文章:

javascript - 脚本调试器未附加在 Razor View 中

css - 我如何使用隐藏电话 Bootstrap 类隐藏特定的 asp.net WebGridColumn/s

asp.net-mvc - asp.net mvc 3 webgrid 排序仍然存在 ?sortdir=ASC

c# - 为什么 .NET 中有这么多命名集合没有实现 IEnumerable<T>?

c# - 从字典中的列表中获取第一个元素 C#

c# - 无法复制文件,即使在 C# 中授予了 FileIOPermission

c# - 如何初始化从外部服务器下载文件?

c# - WebBrowser 控件忽略来自 POST 请求的 302 重定向?

asp.net - 在 ASP.NET MVC 3 中更改 Membership.ValidateUser() 和其他内容

asp.net-mvc-3 - MVC WebGrid-如何以编程方式获取当前页面,排序列等