我是一名业余爱好程序员,直到最近才使用ASP经典。我正在使用Razor语法并尝试从ASP Classic中复制一些代码。
我一直在使用的w3schools的asp经典代码在
之下<%
set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open "c:/webdata/northwind.mdb"
set rs = Server.CreateObject("ADODB.recordset")
sql="SELECT Companyname, Contactname FROM Customers"
rs.Open sql, conn
%>
<table border="1" width="100%">
<tr>
<%for each x in rs.Fields
response.write("<th>" & x.name & "</th>")
next%>
</tr>
<%do until rs.EOF%>
<tr>
<%for each x in rs.Fields%>
<td><%Response.Write(x.value)%></td>
<%next
rs.MoveNext%>
</tr>
<%loop
rs.close
conn.close
%>
</table>
我知道大多数人都会说使用网络网格。是的,我已经这样做了,它真的很慢,所以我试图通过比较它来解决它。 我在剃刀中的代码如下
var SelectCommand1 = "DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); " +
"SET @cols = STUFF((SELECT ',' + QUOTENAME(tblTests.Name ) " +
"FROM tblTestsInEvents c INNER JOIN tblTests ON c.Test_ID = tblTests.Test_ID " +
"WHERE c.Event_ID = @0 order by c.TestsInEvents_ID FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') " +
"set @query = 'SELECT Car_Number, First_Name, Last_Name, ' + @cols + ' " +
"from ( select First_Name, Last_Name, tblTestsLog.Driver_ID, Name, CorrectedTime, tblDriversInEvents.Car_Number "+
"FROM tblTests INNER JOIN "+
"tblTestsLog ON tblTests.Test_ID = tblTestsLog.Test_ID INNER JOIN "+
"UserProfile ON tblTestsLog.Driver_ID = UserProfile.UserId INNER JOIN "+
"tblDriversInEvents ON UserProfile.UserId = tblDriversInEvents.Driver_ID AND tblTestsLog.Event_ID = tblDriversInEvents.Event_ID) "+
"x pivot ( sum(CorrectedTime) for Name in (' + @cols + ') ) p ' "+
"execute(@query)";
var SelectedData1 = db.Query(SelectCommand1, EventID);
内联代码是这样的:
@{//grid.GetHtml()
<text><table></text>
foreach (var x in SelectedData1)
{
@:<tr>
foreach (var y in x.Fields)
{
<text><td>@y.value</td></text>
}
@:</tr>
}
}
</table>
x.Fields目前失败了,我找不到相应的东西。 任何建议和提示都会很棒。 感谢
答案 0 :(得分:0)
首先,我假设你正在做ASPNET MVC。在这种情况下,我强烈建议在控制器中将数据库代码移到更高的位置,填充要在视图中呈现的特定模型。
例如,您可能有一个DriversInEvents模型(一个简单的C#类)。您可以创建一个这样的集合,并使用您编写的sql中从db中获取的内容填充它们。
然后,您可以将集合传递给视图,如
return View(driversInEvents);
在视图中,您可以使用MVCContrib grid之类的内容。哪个是免费的codeplex和伟大的网格开始。您不必使用这样的表创建网格,网格会为您处理它,以便您可以专注于自定义它的外观。
PS:欢迎使用ASPNET MVC。
答案 1 :(得分:0)
在做了一些搜索之后,我发现这是最好的解决方案。感谢@IUnknown提供了指向我的指示。
<table><tr>
@{
//This populates the column headings
List<string> ColHeads = new List<string>();
var col = SelectedData1.ElementAt(0);
foreach(var x in col.Columns)
{
ColHeads.Add(x);
<td>@x</td>
}}
</tr>
@{//This populates each row
foreach (var tblrow in SelectedData1)
{@:<tr>
foreach (var rowcolumn in ColHeads)
{
<td>@tblrow[rowcolumn]</td>
}
@:</tr>
}}
</table>
基本上,当我加载标题行时,我创建了一个包含所有列标题的列表。然后我使用该列表从查询中获取数据并填充表