【问题标题】:Populating card view from database in ASP.Net在 ASP.Net 中从数据库中填充卡片视图
【发布时间】:2021-03-18 14:04:10
【问题描述】:

净。我想要一个像 recyclerview 这样的东西,你在 aspx 文件中有 1 张卡,它根据数据库中的条目数不断重复。因此,如果我的数据库表假设有 3 个特定名称的条目,那么页面中应该有 3 张卡片。

这是我到目前为止所做的: 在我的 .aspx 文件中:

<div class="item-card9">
<a href="info_page.aspx" class="text-dark">
  <h4 class="font-weight-semibold mt-1">
     <asp:Label ID="Label1" runat="server" >
        <%# uni_name %>
     </asp:Label>
  </h4>
</a>
</div>

对于我的 aspx.cs:-

    public string uni_name;
    SqlCommand cmd = new SqlCommand();

    //SQL connection here

    protected void Page_Load(object sender, EventArgs e)
    {
        con.Open();
        cmd.CommandText = //select statement here
        cmd.Connection = con;
        SqlDataReader rd = cmd.ExecuteReader();
        while (rd.Read())
        {
            uni_name = rd["name"].ToString();
        }
        this.DataBind();

        con.Close();
    }

到目前为止,我只能从我的数据库中获取 1 个条目,但我希望它一直重复到数据库结束。

【问题讨论】:

    标签: c# asp.net webforms


    【解决方案1】:

    你需要某种数组来显示:

    CS

    public List<string> Names { get; set; }
    
    protected void Page_Load(object sender, EventArgs e)
    {
        con.Open();
        cmd.CommandText = //select statement here
        cmd.Connection = con;
        SqlDataReader rd = cmd.ExecuteReader();
        Names = new List<string>();
        while (rd.Read())
        {
            Names.Add(rd["name"].ToString());
        }
        this.DataBind();
    
        con.Close();
    }
    

    ASP

     <%foreach (var name in this.Names)
      {%>
           <p><%=name%></p>
       <%}%>
    

    更新。 如果你有一个复杂的对象,比如

    class MyObj
    {
        public string ID;
        public string Name;
    }
    

    你仍然可以在这里使用它来代替字符串。

    public List<MyObj> Items{ get; set; }
    
    protected void Page_Load(object sender, EventArgs e)
    {
        con.Open();
        cmd.CommandText = //select statement here
        cmd.Connection = con;
        SqlDataReader rd = cmd.ExecuteReader();
        Items = new List<MyObj>();
        while (rd.Read())
        {
            var item = new MyObj
            {
                 Name = rd["name"].ToString(),
                 Id = rd["id"].ToString()
            };
            Names.Add(item);
        }
        this.DataBind();
    
        con.Close();
    }
    

    然后像这样使用它

     <%foreach (var item in this.Items)
      {%>
           <p><%=item.Id%> <%=item.Name%></p>
       <%}%>
    

    【讨论】:

    • 是的,这行得通。但是现在如果我在卡片中有更多字段(this.Names 中的变量名称)将不起作用。那我该怎么办?
    • 您可以使用自定义类而不是字符串,例如 List MyCustomProperty {get;设置;}
    • 所以我有一个包含两列 id 和 name 的表,在 asp 页面中我需要能够同时提取 id 和 name 而现在我只能提取 name 并且它说 id 确实在这种情况下不存在。如果可能的话,您可以编辑您的代码以获得更好的参考。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多