Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 显示多行_C#_Asp.net_Ms Access_Asp.net Mvc 2 - Fatal编程技术网

C# 显示多行

C# 显示多行,c#,asp.net,ms-access,asp.net-mvc-2,C#,Asp.net,Ms Access,Asp.net Mvc 2,我有数据(3个变量)要从ms access数据库(产品表)中获取并显示在aspx页面上。我只显示了第一行数据。似乎问题出在foreach循环中的aspx页面代码中。我就是不能清醒过来 以下是ProductController类: public ActionResult Index() { string str = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\vindom\\Desktop\\D

我有数据(3个变量)要从ms access数据库(产品表)中获取并显示在aspx页面上。我只显示了第一行数据。似乎问题出在foreach循环中的aspx页面代码中。我就是不能清醒过来

以下是ProductController类:

    public ActionResult Index()
    {
        string str = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\vindom\\Desktop\\DB2.accdb";
        //  connection string from database Properties
        OleDbConnection con = new OleDbConnection(str);
        OleDbCommand cmd;
        OleDbDataReader reader;
        con.Open();
        {
            cmd = new OleDbCommand("SELECT * FROM product", con);
            reader = cmd.ExecuteReader();
            while(reader.Read())
                {
                ViewData["Prod_Type"] =  reader.GetValue(0);
                ViewData["Prod_N"] = reader.GetValue(1);
                ViewData["Prod_d"] = reader.GetValue(2);
                }
            con.Close();


        return View();
    }
    }
以下是aspx代码:

  <table>
  <tr>
  <th>Product Type</th>
  <th>Product Number</th>
  <th>Product Details</th>
  <th></th>
  </tr>
  <%@foreach (var item  in View)
  {%>
 <tr>
 <td><%= Html.Encode(ViewData["Prod_Type"]) %></td>
 <td><%= Html.Encode(ViewData["Prod_N"]) %></td>
 <td><%= Html.Encode(ViewData["Prod_d"]) %></td>
 </tr>
 <%}%>
 </table>

产品类型
产品编号
产品详情

…和Product.cs

namespace Tok.Models
{
    public class Product 
    {
        public string Product_Type { get; set; }
        public string Product_NUM { get; set; }
        public string Product_desc { get; set; }

        public  ICollection<Process> Processes;
    }

    public class Process
    {
        public string ProcessId { get; set; }
        public string Process_desc { get; set; }
        public string Next_processs { get; set; }

        public virtual Product Product { get; set; }
    }
}
namespace Tok.Models
{
公共类产品
{
公共字符串乘积_类型{get;set;}
公共字符串乘积_NUM{get;set;}
公共字符串乘积_desc{get;set;}
公共信息收集过程;
}
公共类过程
{
公共字符串ProcessId{get;set;}
公共字符串进程_desc{get;set;}
公共字符串Next_processs{get;set;}
公共虚拟产品产品{get;set;}
}
}
试试下面的方法。 这将遍历您的记录集,但视图中的内容将不起作用。您需要将行存储在某种形式的集合中,ViewData[“Prod_XXX”]用于数据的单个实例,而不是多行

您可以构建一个行列表,如下所示:

List<Prod> prodRows = new List<Prod>();
while (reader.Read())
{
     prodRows.Add(new Prod 
     { 
         Prod_Type = reader.GetValue(0),
         Prod_N = reader.GetValue(1),
         Prod_d = reader.GetValue(2)
      });
 }
@model List<Prod>
@foreach(var row in Model)
{
  //Your display HTML
}
那么在你看来,你可以有这样的东西:

List<Prod> prodRows = new List<Prod>();
while (reader.Read())
{
     prodRows.Add(new Prod 
     { 
         Prod_Type = reader.GetValue(0),
         Prod_N = reader.GetValue(1),
         Prod_d = reader.GetValue(2)
      });
 }
@model List<Prod>
@foreach(var row in Model)
{
  //Your display HTML
}
@型号列表
@foreach(模型中的var行)
{
//您的显示HTML
}

这不是一个确切的答案,但我希望它能有所帮助。

您的问题是,从外观上看,您正在执行以下代码:

ViewData["Prod_Type"] =  reader.GetValue(0);
ViewData["Prod_N"] = reader.GetValue(1);
ViewData["Prod_d"] = reader.GetValue(2);
。。。三次,但每次都覆盖上一组值

您似乎也没有向视图传递模型。由于您希望遍历数据列表,因此需要定义一个类来表示模型记录(可能是
Product
或类似的内容),并将已生成的
Product
记录的集合传递给视图

类似这样(假设您有一个
产品
类):

列表模型=新列表();
while(reader.Read())
{
Product newEntry=新产品(){
Prod_Type=reader.GetValue(0),//我忽略了强制转换值的需要
Prod_N=reader.GetValue(1),
Prod\u d=reader.GetValue(2)
};
model.Add(newEntry);
}
//内务管理
返回视图(模型);

我认为reader.MoveNext()将导致跳过一行,因为
reader.Read()
将读取下一行。很好地发现,Ann-我上次使用ADO是在大约10年前使用VB6的时候,而你过去习惯于(!reader.EOF){//do stuff reader.MoveNext()}。此时,你跳过行是因为
.MoveNext()
。请删除
.MoveNext()
,因为在这个答案中它是100%不必要的。除此之外,这是正确的答案。这样做,你至少会多投一票。谢谢@Joshua,我用你的建议更新了我的答案。是的,我有一个产品类。。对不起,我应该提到。。。这里:我在aspx页面行中遇到错误。。。。它说服务器块的格式不好为什么要使用语法符号?与MVC 3相比,我对MVC 2不太熟悉,但我认为你不会需要它。嗯……如果我不使用它们,它会在网页上打印出每个语句。。。我是第一次和mvc打交道,所以我想说我对这两种语言都不太熟悉……)mvc 2是使用Razor语法,还是使用旧语法(不知道它的名字),我编辑了你的标题。请参阅“”,其中的共识是“不,他们不应该”。