c# - 为什么这个按钮的 OnClick 事件只工作一次?

标签 c# asp.net button onclick

我查看了人们报告的其他问题,但没有一个能解决我遇到的问题。我一直在用这个 walkthrough从 MS 使用 ASP.net 应用程序操作 Access 数据库。不幸的是,添加行的按钮曾经工作过一次,在我的本地网络服务器或内置的 .NET 服务器上不再执行任何操作。我无法弄清楚问题出在哪里,从昨天开始我就一直在用头撞 table 。

这是我的代码;

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="editTest._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:DataGrid ID="datagrid" runat="server" AutoGenerateColumns="False" 
        oncancelcommand="datagrid_CancelCommand" oneditcommand="datagrid_EditCommand" 
        onupdatecommand="datagrid_UpdateCommand">
        <Columns>
            <asp:EditCommandColumn CancelText="Cancel" EditText="Edit" UpdateText="Update">
            </asp:EditCommandColumn>
            <asp:BoundColumn DataField="firstName" HeaderText="First Name">
            </asp:BoundColumn>
            <asp:BoundColumn DataField="lastName" HeaderText="Surname"></asp:BoundColumn>
            <asp:BoundColumn DataField="sex" HeaderText="Gender"></asp:BoundColumn>
            <asp:BoundColumn DataField="phoneNo" HeaderText="Telephone"></asp:BoundColumn>
        </Columns>
    </asp:DataGrid>
    <div>

        <asp:Button ID="Button1" runat="server" Text="Button" />

    </div>
    </form>
</body>
</html>

C#结束;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.OleDb;

namespace editTest
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack) ReadRecords();
        }

        private void ReadRecords()
        {
            OleDbConnection cnt = null;
            OleDbDataReader rdr = null;

            try
            {
                cnt = new OleDbConnection(
                    "Provider=Microsoft.Jet.OLEDB.4.0; " +
                    "Data Source=" + Server.MapPath("test/accessTest.mdb"));
                cnt.Open();

                OleDbCommand cmd = new OleDbCommand("Select * FROM editTest", cnt);
                rdr = cmd.ExecuteReader();

                datagrid.DataSource = rdr;
                datagrid.DataBind();
            }

            catch (Exception e)
            {
                Response.Write(e.Message);
                Response.End();
            }

            finally
            {
                if (rdr != null) rdr.Close();
                if (cnt != null) cnt.Close();
            }
        }

        private void ExecuteNonQuery(string sql)
        {
            OleDbConnection cnt = null;
            try
            {
                cnt = new OleDbConnection(
                    "Provider=Microsoft.Jet.OLEDB.4.0; " +
                    "Data Source=" + Server.MapPath("test/accessTest.mdb"));
                cnt.Open();

                OleDbCommand cmd =
                    new OleDbCommand(sql, cnt);
                cmd.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                Response.Write(e.Message);
                Response.End();
            }
            finally
            {
                if (cnt != null) cnt.Close();
            }
        }

        protected void datagrid_CancelCommand(object source, DataGridCommandEventArgs e)
        {
            datagrid.EditItemIndex = -1;
            ReadRecords();
        }

        protected void datagrid_EditCommand(object source, DataGridCommandEventArgs e)
        {
            datagrid.EditItemIndex = e.Item.ItemIndex;
            ReadRecords();
        }

        protected void datagrid_UpdateCommand(object source, DataGridCommandEventArgs e)
        {
            int ID = (int)datagrid.DataKeys[(int)e.Item.ItemIndex];

            string firstName = ((TextBox)e.Item.Cells[1].Controls[0]).Text;
            string lastName = ((TextBox)e.Item.Cells[2].Controls[0]).Text;
            string sex = ((TextBox)e.Item.Cells[3].Controls[0]).Text;
            string phoneNo = ((TextBox)e.Item.Cells[4].Controls[0]).Text;

            string sql =
                "UPDATE editTest SET firstName=\"" + firstName +
                "\", lastName=\"" + lastName + "\", sex=\"" + sex +
                "\", phoneNo=\"" + phoneNo + "\"" +
                " WHERE ID=" + ID;
            ExecuteNonQuery(sql);

            datagrid.EditItemIndex = -1;
            ReadRecords();
        }

        private void Button1_Click(object sender, EventArgs e)
        {
            string sql = "INSERT INTO editTest (firstName, lastName, sex, phoneNo)"
                        + " VALUES (\"new\", \"new\", \"new\", \"new\")";
            ExecuteNonQuery(sql);
            ReadRecords();
        }
    }
}

感谢您的帮助

最佳答案

您错过了 aspx 上的事件:

 <asp:Button ID="Button1" runat="server" Text="Button" OnClick='Button1_Click' />

并使 Button1_Click 公开或 protected 。

或者,您可以在代码隐藏中设置它:

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

        Button1.Click += Button1_Click;
    }

关于c# - 为什么这个按钮的 OnClick 事件只工作一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6594229/

相关文章:

c# - 在 html mvc C# 中访问多个 ViewModel

image - 在Visual Studio中,如何解决按钮图像质量?

java - Jsoup formElement.submit().post() 未提交指定的值

c# - asp.net webform以编程方式添加透明图像

python - 如何缩放 kivy 切换按钮的图像并保持其纵横比?

c# - 如何根据自己的索引从 .NET Core Web API 登录到 Elasticsearch

c# - 通用类型的集合

c# - 外汇 MT4 平台 - 使用什么类型的协议(protocol)/技术来实时更新图表?

c# - JavaScript 函数在 C# 中返回 bool 值

asp.net - 中继器中只有一个单选按钮选择