我正在使用webmatrix。我的家庭服务器是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并创建了一个表 - 相同的结果。 这个问题似乎不是数据库,因为我已经使用其他具有相同结果的dbs进行了测试。我还在没有probem的服务器上运行查询(使用putty),因此查询应该有效。 我已经广泛搜索了一个答案。我很感激提供任何帮助。提前谢谢。
答案 0 :(得分:1)
<div id="grid">
@grid.GetHtml()
</div>
尝试使用id或者如果它不起作用,删除div。我感觉网格运行循环以显示结果,并且在每次迭代时都会覆盖先前的结果。
答案 1 :(得分:0)
经过大量研究,我发现只有一篇文章提出了这个问题。为了完整性,这里是网址: Incorrect results when looping over recordset using Webmatrix/Mono/MySQL
在以各种方式进行测试后,似乎问题是单声道没有正确执行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>
嗯,就是这样。希望它有用。