2011-07-06 53 views
3

我已经看过人们所报告的其他问题,但这些问题都不能解决我遇到的问题。我一直在使用MS的这个walkthrough来使用ASP.net应用程序来操作Access数据库。不幸的是,添加行的按钮已经工作了一次,不再在我的本地web服务器或内置的.NET上执行任何操作。我无法弄清楚问题是什么,自昨天以来,我一直在头撞桌子。为什么这个按钮OnClick事件只能工作一次?

这是我的代码;

<%@ 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(); 
     } 
    } 
} 

感谢所有帮助

回答

1

你错过了ASPX事件:

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

,使公众的button1_Click或保护。

或者,您也可以将其设置在代码隐藏:

+0

谢谢,我确实有的OnClick按钮组,但它造成的一个奇怪的错误,因此代码隐藏的方式正是我需要的是什么:) – RyanMacG