2

我正在使用网络矩阵。我的家庭服务器是 Ubuntu/mono/nginx/fastcgi。我的代码很简单。我有一个 MySql 数据库,其中包含一个包含 4 条测试记录的表。

@{
        var db = Database.Open("wra");
        var sql = "SELECT * FROM Clients";
        var clientinfo = db.Query(sql);
        WebGrid grid = new WebGrid(clientinfo);
}

<div>
    @grid.GetHtml()
</div>

就是这样 - 不会变得更简单。但是,网格仅返回最后一条记录并显示 4 次(= 记录数)。我已经用其他数据库和表对此进行了测试,结果相同。没有错误,所以没有堆栈跟踪。问题似乎不是 webgrid,因为它只显示结果。可以肯定的是,我删除了 webgrid 并创建了一个表格 - 结果相同。问题似乎不是数据库,因为我已经用其他数据库测试了相同的结果。我还在服务器上运行了查询(使用腻子),没有探测,所以查询应该可以工作。我已经广泛搜索了答案。我将不胜感激提供的任何帮助。提前致谢。

4

2 回答 2

1
<div id="grid">
    @grid.GetHtml()
</div>

尝试使用 id 或者如果它不起作用,请删除 div。我有一种感觉 grid 运行一个循环来显示结果,并且在每次迭代时,以前的结果都会被覆盖。

于 2013-09-08T12:55:52.657 回答
0

经过大量研究,我发现只有一篇其他帖子提出了这个问题。为了完整起见,这里是 url: Incorrect results when looping over recordset using Webmatrix/Mono/MySQL

在以各种方式进行测试后,似乎问题在于 mono 没有正确执行 sql 查询。鉴于似乎没有其他人将此记录为问题,我只能假设这是我安装中的错误。

无论如何,作为一种解决方法,这是我使用 webgrid 的解决方案,以防其他人可能感兴趣。

@using System.Collections;
@using System;
@using System.Data;
@using System.Data.SqlClient;
@using System.Dynamic;
@using System.Text;
@using System.Configuration; 
@using MySql.Data.MySqlClient;

@{
   //establish a connection to mysql db using the connection in web.config        
    MySqlConnection dbConn = new  MySqlConnection(ConfigurationManager.ConnectionStrings["myStringName"].ConnectionString);


    //====From here, source data is member table in database=====
    //create a mysql command var to store the sql query and reference to the connection string
    MySqlCommand command1 = new MySqlCommand("SELECT Id, Fname, Lname, Company, Email FROM ClientTable", dbConn);

    //create a mysql adapter to call the command to be executed
    MySqlDataAdapter dap1 = new MySqlDataAdapter(command1);

    //create a dataset to capture the results of the sql query
    DataSet dataset1 = new DataSet();
    //use the adapter to fill data with the results of the query.  
    //ClientTable will be the name of the table in dataset.
    dap1.Fill(dataset1, "ClientTable");

    //iterate dataset to store its info into a list with columnnames
    var clientProfile = new List<dynamic>();
    foreach (DataRow dr in dataset1.Tables["ClientTable"].Rows)
    {
        var obj = (IDictionary<string, object>)new ExpandoObject();
        foreach (DataColumn col in dataset1.Tables["ClientTable"].Columns)
        {
            obj.Add(col.ColumnName, dr[col.ColumnName]);
        }
        clientProfile.Add(obj);
    }

    WebGrid grid = new WebGrid(clientProfile, rowsPerPage:10);
}


   <div id="xyz">
   @grid.GetHtml(tableStyle : "gridtable",
        alternatingRowStyle: "altRow")
   </div>    

嗯,就是这样。希望它有用。

于 2013-09-19T07:46:55.600 回答