【问题标题】:the button is not doing its supposed function该按钮没有执行其应有的功能
【发布时间】:2020-03-31 18:32:13
【问题描述】:

我有一个项目来创建一个网站,该网站连接我的数据库以执行不同的功能。当我创建 web 表单并将其与数据库连接时,当我单击按钮时,应该会出现所有产品,但它不会发生。

这是 SQL 过程:

    CREATE PROC reviewOrders
    AS
    BEGIN 
    SELECT * 
    FROM Orders 
    END 

这是c#代码

    protected void reviewOrders(object sender, EventArgs e)
    {
        string connStr = ConfigurationManager.ConnectionStrings["MyDbConn"].ToString();
        SqlConnection conn = new SqlConnection(connStr);
        SqlCommand cmd = new SqlCommand("reviewOrders", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        conn.Open();
        cmd.ExecuteNonQuery();
        conn.Close();

    }

和 HTML 代码:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ReviewOrders.aspx.cs" 
     Inherits="GUCommerce.ReviewOrders" %>

     <!DOCTYPE html>

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                <asp:Button ID="viewOrders" runat="server" OnClick ="reviewOrders" Height="45px" 
    Text="view orders" Width="148px" />
            </div>
            <p style="height: 121px">

            </p>
            <asp:Panel ID="x" Visible ="false" runat="server" Height="338px">
                <asp:Table ID="orders" CellPadding ="4" runat="server" Height="67px" Width="316px">
                </asp:Table>
            </asp:Panel>
        </form>
    </body>
    </html>

谁能告诉我缺少什么? 谢谢提前!

【问题讨论】:

  • 看起来您缺少用结果填充/填充表格的代码。
  • @dvo 我对 C# 和 HTML 完全陌生,所以请您帮帮我吗?
  • 有很多不同的主题(在 StackOverflow 上以及通过简单的谷歌搜索)消耗数据....但是如果你考虑一下,你实际上在用 @987654324 之后的数据做什么@ 因为你需要对这些数据做一些事情。
  • ExecuteNonQuery 在不带回结果时使用。您正在恢复结果。

标签: c# html sql asp.net


【解决方案1】:

我建议使用ASP Gridview 而不是ASP Table。 Gridviews (&lt;asp:GridView&gt;) 用于在表格中呈现数据。它们实际上被渲染为 html 表格。以下是如何使用您的代码构建一个:

<asp:Panel ID="x" Visible="false" runat="server" Height="338px">
    <%--<asp:Table ID="orders" CellPadding="4" runat="server" Height="67px" Width="316px"></asp:Table>--%>
    <asp:GridView ID="gvOrders" CellPadding="4" runat="server" Height="67px" Width="316px"></asp:GridView>
</asp:Panel>

现在,在代码隐藏中进行了一些更改。 DataTable 可用于存储查询结果,然后您可以将 DataTable 绑定到 GridView。为此,您需要一个SqlDataAdapter,如下所示。

protected void reviewOrders(object sender, EventArgs e)
{
    // data table variable outside of sql block
    // you could also move the sql code to another method that returns a datatable
    DataTable dt = null;

    string connStr = ConfigurationManager.ConnectionStrings["MyDbConn"].ToString();
    using (SqlConnection conn = new SqlConnection(connStr))
    {
        SqlCommand cmd = new SqlCommand("reviewOrders", conn);
        cmd.CommandType = CommandType.StoredProcedure;

        using (cmd)
        {
            conn.Open();

            // Use SQL Data Adapter instead of Execute Non Query
            using (SqlDataAdapter _Adapter = new SqlDataAdapter(cmd))
            {
                // Fill DataTable with results of query
                dt = new DataTable();
                _Adapter.Fill(dt);
            }
        }
    }

    //

    gvOrders.DataSource = dt;
    gvOrders.DataBind();
}

注意:我使用using(SqlConnection)using(cmd) 为我处理关闭连接和命令。试一试。

【讨论】:

  • DataBind() GridView 后,查看此引用以填充行数据(通过 BoundFields 或在此处指定 TemplateField 和您想要的控件):docs.microsoft.com/en-us/dotnet/api/…
  • @JohnPete22 感谢您的参考。对于 OP - 这是生成表列的首选方式,因为它为您提供了更多控制权,但它们应该根据 DataTable 自动生成。您可能需要将AutoGenerateColumns="true" 添加到您的 GridView 属性
  • @dvo 如果 OP 使用的是 RWD 网站,则 GridView 将在标记中自动生成表格时破坏布局。在这种情况下,ListView 会更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-03
  • 2020-07-07
  • 2021-05-17
  • 1970-01-01
  • 1970-01-01
  • 2019-04-20
相关资源
最近更新 更多