簡體   English   中英

如何運行 SQL 代碼並在同一 aspx 頁面上循環/顯示結果?

[英]How to run the SQL code and loop/display the results on the same aspx page?

我正在嘗試為我的 asp .net 項目創建一個主頁,該主頁應該顯示數據庫中所有可用的產品。 下面的代碼是我的 aspx 代碼,我已經用 --> 和 <-- 標記了我試圖循環並顯示來自數據庫的所有結果的代碼。

<%@ Page Title="" Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true" CodeBehind="home.aspx.cs" Inherits="Try.WebForm1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">

</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<section class="py-5">      
            <div class="container px-4 px-lg-5 mt-5">
                <div class="row gx-4 gx-lg-5 row-cols-2 row-cols-md-3 row-cols-xl-4 justify-content-center">
                  
                    <div class="col mb-5">
                        <div class="card h-100">
                       -->  <!-- Product image-->
                            <img class="card-img-top" width="205.99px" height="205.99px" src="data:image/jpg;base64,<%= @Convert.ToBase64String(*product image*) %>" alt="..." />
                            <!-- Product details-->
                            <div class="card-body p-4">
                                <div class="text-center">
                                    
                                    <!-- Product name-->
                                    <h5 class="fw-bolder">*product name*</h5>
                                    <!-- Product price-->
                                    *product price*<br/>
                                    *product description*
                                </div>
                            </div> <--
                            
                            <!-- Product actions-->
                            <div class="card-footer p-4 pt-0 border-top-0 bg-transparent">
                            <div class="text-center"><a class="btn btn-outline-dark mt-auto" href="productDetails.aspx">Details</a></div><br />
                            <div class="text-center"><a class="btn btn-outline-dark mt-auto" href="home.aspx">Add to cart</a></div> 

                            </div>
                        </div>
                    </div>

                </div>
            </div>
        </section>
</asp:Content>

下面的代碼是我目前留在 aspx.cs 頁面上的代碼,用於運行 SQL 並檢索結果。 我希望將它放在帶有 <% %> 的 aspx 頁面中的某個位置,但有錯誤。

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Try
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string strCon = ConfigurationManager.ConnectionStrings["WebConfigConString"].ConnectionString;
            SqlConnection con = new SqlConnection(strCon);
            con.Open();

            string strHome = "SELECT * FROM PRODUCT";
            SqlCommand cmdHome = new SqlCommand(strHome, con);

            SqlDataReader dtrHome = cmdHome.ExecuteReader();

            while (dtrHome.Read())
            {
                //display the result from database on the aspx page
            }

        }
    }
}

那么,“顯示”重復數據的最常見方式是什么?

是使用顯示重復數據的內置控件之一。 然后您可以“輸入”控制數據源,asp.net 為您完成工作!

所以,假設我加入了 GridView(通常是一個不錯的選擇)。

所以,現在我們的標記是這樣的:

        <asp:GridView ID="GridView1" runat="server" Width="70%">

        </asp:GridView>

我們的頁面加載代碼現在是這樣的:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            LoadData();

    }

    void LoadData()
    {

        using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.TEST4))
        {
            string strSQL = 
                @"SELECT ID, Fighter, Engine, Thrust, Description FROM Fighters";
            using (SqlCommand cmdSQL = new SqlCommand(strSQL, conn))
            {
                conn.Open();
                DataTable rstData = new DataTable();
                rstData.Load(cmdSQL.ExecuteReader());

                GridView1.DataSource = rstData;
                GridView1.DataBind();
            }
        }
    }

我們的結果現在是這樣的:

在此處輸入圖像描述

所以,實際上我們可以布局“一件事”,然后讓它重復。

現在,我的 Fighters 表有一個鏈接到圖片的列。

所以,我可以使用向導創建 GV,然后刪除頁面上的 sql 數據源,並用這個標記說:

        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        DataKeyNames="ID" CssClass="table"  >
        <Columns>
            <asp:BoundField DataField="Fighter" HeaderText="Fighter"  />
            <asp:BoundField DataField="Engine" HeaderText="Engine"  />
            <asp:BoundField DataField="Thrust" HeaderText="Thrust"  />
            <asp:BoundField DataField="Description" HeaderText="Description" />

            <asp:TemplateField HeaderText="View">
                <ItemTemplate>
                    <asp:ImageButton ID="cmdView" runat="server" Width="150px"
                        ImageUrl = '<%# Eval("ImagePath") %>'
                        OnClick="cmdView_Click" />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

現在我明白了:

在此處輸入圖像描述

但是,也許我不想要一個網格,而是一個像卡片一樣的視圖?

好的,那么我們可以使用“中繼器”。

再一次,我們的想法是我們布局一件東西,然后給它提供數據,它會為我們“重復”。

所以,現在讓我們使用中繼器。

在中繼器內部,我們創建了“一個”我們想要顯示的東西。

所以,說這個標記:

<asp:Repeater ID="Repeater1" runat="server" >
    <ItemTemplate>                   
        <div style="border-style:solid;color:black;width:320px;height:450px;float:left;margin-right:10px;margin-bottom:10px">
            <div style="text-align:center;padding:2px 10px 2px 10px">
                <h3><%# Eval("Fighter") %></h3>
                <asp:Image ID="Image2" runat="server" 
                    ImageUrl = '<%# Eval("ImagePath") %>' Width="170" />
                <h4>Engine</h4>
                <asp:Label ID="EngineLabel2" runat="server" Text='<%# Eval("Engine") %>' />
                <h4>Description</h4>
                <asp:Label ID="DescLabel" runat="server" Text='<%# Eval("Description") %>' />
            </div>
        </div>
    </ItemTemplate>
</asp:Repeater>

要加載的代碼 - 相同(只需將該 rstData(我們的表)發送到轉發器。

我們現在得到這個:

在此處輸入圖像描述

而且因為每個“重復”的東西都是一個簡單的 div(向左浮動),

然后,如果我重新調整瀏覽器的大小,我會看到這個(對於大寬屏瀏覽器和監視器)。

在此處輸入圖像描述

正如你所看到的,你得到了很多很好的重復數據,而且你付出的努力很少。

既然你想展示產品? 然后使用 GridView,或者通常更好的 ListView。 您甚至可以讓向導為您生成該網格或列表視圖。 然后你可以把它清理一下,或者保持原樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM