0

データベースに顧客のリストを戻すフォームがあります。新しい顧客を追加するための [顧客の追加] ボタンと、ユーザーが既存の顧客を編集できるハイパーリンクもあります。編集リンクをクリックすると、その顧客の正しいデータを戻すことができますが、変更を加えて [更新] ボタンをクリックしても、既存のデータは編集されません。もう1つの問題は、新しい顧客を追加するためにリダイレクトするときに「更新」ボタンも表示されることです(ユーザーは新しい顧客のデータを入力して「更新」をクリックします)。異なるアクション (新規追加または編集)/クエリに対して異なるコードを参照することは可能ですか? これが私がこれまでに持っているものです。助けてくれてありがとう。

<asp:Content ID="Content1" ContentPlaceHolderID="chpContent" runat="server">
<div>
    <h2>Customer Listing</h2>
    <br />
</div>
<p style="text-align:center">
    <asp:Button ID="btnCustomer" class="button" runat="server" Text="Add New Customer" onclick="btnCustomer_Click" />
</p>

<asp:ListView ID="lv" runat="server" 
    onselectedindexchanged="lv_SelectedIndexChanged">
<LayoutTemplate>
  <table width="110%" class="TableListing">
  <tbody>
    <thead>
    <th width="150">Customer Name</th>
      <th width="150">Email</th>
      <th width="150">City</th>
      <th width="40">State</th>
      <th width="110">Phone</th>
      <th width="80">Modify</th>
    </thead>
    <tr id="itemPlaceholder" runat="server"></tr>
     </tbody>
    </table>  

    <asp:DataPager ID="ItemDataPager" runat="server" PageSize="20">
        <Fields>
            <asp:NumericPagerField ButtonCount="5" />
        </Fields>
    </asp:DataPager>

</LayoutTemplate>

<ItemTemplate>
    <tr>
     <td><%# Eval ("LastName") %>, <%# Eval ("FirstName") %></td>
     <td><%# Eval ("Email") %></td>
     <td><%# Eval ("City") %></td>
     <td><%# Eval ("State") %></td>
     <td><%# Eval ("Phone") %></td>
     <td>
        <asp:HyperLink ID="lnkEdit" runat="server" NavigateUrl='<%# "CustomerEdit.aspx?ID=" + Eval("CustomerID") %>' Text="Edit" />
    </td>
    </tr>
</ItemTemplate>

ここに私の CustomerEdit.aspx ページがあります:

public partial class CustomerEdit : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        this.Master.HighlightNavItem("Customers");

        int CustomerID = Int32.Parse(Request.QueryString["ID"]);

        //Declare the connection object
        SqlConnection Conn = new SqlConnection();
        Conn.ConnectionString = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;

        //Connect to the db
        Conn.Open();

        //Define query
        string sql = "SELECT * FROM Customer where CustomerID=@CustomerID";

        //Declare the Command
        SqlCommand cmd = new SqlCommand(sql, Conn);

        //Add the parameters needed for the SQL query
        cmd.Parameters.AddWithValue("@CustomerID", CustomerID);

        //Declare the DataReader
        SqlDataReader dr = null;

        //Fill the DataReader
        dr = cmd.ExecuteReader();

        //Get the data
        if (dr.Read() == false)
            {
                //No Records
                dr.Close();
                Conn.Close();
                return;
            }

    txtFirstName.Text = dr["FirstName"].ToString();
    txtLastName.Text = dr["LastName"].ToString();
    txtEmail1.Text = dr["Email"].ToString();
    txtEmail2.Text = dr["Email"].ToString();
    txtPassword1.Text = dr["Password"].ToString();
    txtPassword2.Text = dr["Password"].ToString();
    txtAddress1.Text = dr["Address1"].ToString();
    txtAddress2.Text = dr["Address2"].ToString();
    txtCity.Text = dr["City"].ToString();
    txtState.Text = dr["State"].ToString();
    txtZip.Text = dr["Zip"].ToString();
    txtPhone.Text = dr["Phone"].ToString();
    txtFax.Text = dr["Fax"].ToString();


    dr.Close();
    Conn.Close();

    }


    protected void btnCancel_Click1(object sender, EventArgs e)
    {
        Response.Redirect("Customers.aspx");
    }


    protected void btnUpdate_Click(object sender, EventArgs e)
    {

        int CustomerID = Int32.Parse(Request.QueryString["ID"]);

        //Declare the connection object
        SqlConnection Conn = new SqlConnection();
        Conn.ConnectionString = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;

        //Connect to the db
        Conn.Open();


        //Define query
        string sql = "UPDATE Customer SET Fax=@Fax Where CustomerID=@CustomerID";

        //Declare the Command
        SqlCommand cmd = new SqlCommand(sql, Conn);

        //Add the parameters needed for the SQL query
        cmd.Parameters.AddWithValue("@FirstName", txtFirstName.Text);
        cmd.Parameters.AddWithValue("@LastName", txtLastName.Text);
        cmd.Parameters.AddWithValue("@Email", txtEmail1.Text);
        cmd.Parameters.AddWithValue("@Password", txtPassword1.Text);
        cmd.Parameters.AddWithValue("@Address1", txtAddress1.Text);
        cmd.Parameters.AddWithValue("@Address2", txtAddress2.Text);
        cmd.Parameters.AddWithValue("@City", txtCity.Text);
        cmd.Parameters.AddWithValue("@State", txtState.Text);
        cmd.Parameters.AddWithValue("@Zip", txtZip.Text);
        cmd.Parameters.AddWithValue("@Phone", txtPhone.Text);
        cmd.Parameters.AddWithValue("@Fax", txtFax.Text);

        //Execute the query
        int NumRows = 0;
        NumRows = cmd.ExecuteNonQuery();

        Conn.Close();

        lblUpdate.Text = "Updated " + NumRows.ToString() + " record";

    }

}

}

そして、ユーザーがリダイレクトされる Customers.aspx.cs ページ。

    public partial class Customers : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {      
          this.Master.HighlightNavItem("Customers");


        //Declare the connection object
        SqlConnection Conn = new SqlConnection();
        Conn.ConnectionString = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;

        //Connect to the db
        Conn.Open();

        //Define query
        string sql = "SELECT CustomerID, LastName, FirstName, Email, Password, Address1, Address2, City, State, Zip, Phone, Fax FROM Customer";

        //Declare a SQL Adapter
        SqlDataAdapter da = new SqlDataAdapter(sql, Conn);

        //Declare a DataTable
        DataTable dt = new DataTable();

        //Populate the DataTable
        da.Fill(dt);

        //Bind the Listview
        lv.DataSource = dt;
        lv.DataBind();

        dt.Dispose();
        da.Dispose();
        Conn.Close();

    }

            protected void btnCustomer_Click(object sender, EventArgs e)
         {
              Response.Redirect("CustomerEdit.aspx");                

          }

            protected void lv_SelectedIndexChanged(object sender, EventArgs e)
            {
                Response.Redirect("CustomerEdit.aspx");
            }

}

}
4

1 に答える 1

2

PageLoad でデータを上書きしたため、更新が機能していません。を使用して、次のIsPostBackように回避します。

protected void Page_Load(object sender, EventArgs e)
{
    this.Master.HighlightNavItem("Customers");

    if(!IsPostBack)
    {
        int CustomerID = Int32.Parse(Request.QueryString["ID"]);

        //Declare the connection object
        SqlConnection Conn = new SqlConnection();
        Conn.ConnectionString = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;

        //Connect to the db
        Conn.Open();

        //Define query
        string sql = "SELECT * FROM Customer where CustomerID=@CustomerID";

        //Declare the Command
        SqlCommand cmd = new SqlCommand(sql, Conn);

        //Add the parameters needed for the SQL query
        cmd.Parameters.AddWithValue("@CustomerID", CustomerID);

        //Declare the DataReader
        SqlDataReader dr = null;

        //Fill the DataReader
        dr = cmd.ExecuteReader();

        //Get the data
        if (dr.Read() == false)
            {
                //No Records
                dr.Close();
                Conn.Close();
                return;
            }

        txtFirstName.Text = dr["FirstName"].ToString();
        txtLastName.Text = dr["LastName"].ToString();
        txtEmail1.Text = dr["Email"].ToString();
        txtEmail2.Text = dr["Email"].ToString();
        txtPassword1.Text = dr["Password"].ToString();
        txtPassword2.Text = dr["Password"].ToString();
        txtAddress1.Text = dr["Address1"].ToString();
        txtAddress2.Text = dr["Address2"].ToString();
        txtCity.Text = dr["City"].ToString();
        txtState.Text = dr["State"].ToString();
        txtZip.Text = dr["Zip"].ToString();
        txtPhone.Text = dr["Phone"].ToString();
        txtFax.Text = dr["Fax"].ToString();


        dr.Close();
        Conn.Close();
    }

}
于 2012-11-25T23:35:14.920 に答える