2016-11-18 45 views
0

专家,将现有但已修改的实体附加到上下文(数据库中的下拉列表)

下拉列表从数据库中挑选数据并在打开网页并保存数据时保存在同一列,其中保存在另一个,而不是相同的名称发生,

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

 
<!DOCTYPE html> 
 

 
<html xmlns="http://www.w3.org/1999/xhtml"> 
 
<head runat="server"> 
 
    <title></title> 
 
    <script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.js"></script> 
 
</head> 
 
<body> 
 
<form id="form1" runat="server"> 
 
     <div class="form"> 
 
      <p> 
 
       <asp:Label ID="Label1" runat="server" Text="Place Name" AssociatedControlID="txtName"></asp:Label> 
 
       <asp:DropDownList ID="txtName" runat="server" > 
 
       
 
       </asp:DropDownList> 
 
      </p> 
 
      <p> 
 
       <asp:Label ID="Label2" runat="server" Text="Address" AssociatedControlID="txtAddress"></asp:Label> 
 
       <asp:TextBox ID="txtAddress" runat="server"></asp:TextBox> 
 
      </p> 
 
      
 

 
      <p> 
 
       <asp:HiddenField ID="hdnLocation" runat="server" /> 
 
    
 
      </p> 
 
      <p> 
 
       <asp:Button ID="btnSubmit" runat="server" Text="Save" OnClick="btnSubmit_Click" /> 
 
      </p> 
 
      <p id="message"></p> 
 
     </div> 
 
    </form> 
 

 
<script type="text/javascript"> 
 
if (navigator.geolocation) { 
 
      navigator.geolocation.getCurrentPosition(showPosition, showError); 
 
     } 
 
     else { $("#message").html("Geolocation is not supported by this browser."); } 
 
    
 
     function showPosition(position) { 
 
      var latlondata = position.coords.latitude + "," + position.coords.longitude; 
 
      var latlon = "Latitude" + position.coords.latitude + "," + "Longitude" + position.coords.longitude; 
 
      $("#message").html(latlon); 
 
      $("[id*=hdnLocation]").val(position.coords.longitude + " " + position.coords.latitude); 
 
     } 
 
    
 
     function showError(error) { 
 
      if (error.code == 1) { 
 
       $("#message").html("User denied the request for Geolocation."); 
 
      } 
 
      else if (error.code == 2) { 
 
       $("#message").html("Location information is unavailable."); 
 
      } 
 
      else if (error.code == 3) { 
 
       $("#message").html("The request to get user location timed out."); 
 
      } 
 
      else { 
 
       $("#message").html("An unknown error occurred."); 
 
      } 
 
     } 
 
    </script> 
 
</body> 
 

 
</html>

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

 
using System.Data; 
 
using System.Configuration; 
 

 

 
using System.Web.Security; 
 

 
using System.Web.UI.WebControls.WebParts; 
 
using System.Web.UI.HtmlControls; 
 
using System.Web.Configuration; 
 

 
public partial class _Default : System.Web.UI.Page 
 
{ 
 
     
 

 
    protected void Page_Load(object sender, EventArgs e) 
 
    { 
 
     if (!this.IsPostBack) 
 
     { 
 
      string query = "SELECT PlaceID, Name,Address FROM Placeinfo"; 
 
      string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString; 
 
      using (SqlConnection con = new SqlConnection(constr)) 
 
      { 
 
       using (SqlCommand cmd = new SqlCommand(query)) 
 
       { 
 
        cmd.CommandType = CommandType.Text; 
 
        cmd.Connection = con; 
 
        con.Open(); 
 
        using (SqlDataReader sdr = cmd.ExecuteReader()) 
 
        { 
 
         while (sdr.Read()) 
 
         { 
 
          ListItem item = new ListItem(); 
 

 
          item.Text = sdr["Name"].ToString(); 
 
          
 
          txtName.Items.Add(item); 
 
          txtName.ClearSelection(); 
 
         } 
 
        } 
 
        con.Close(); 
 
       } 
 
      } 
 
      
 
     } 
 
    } 
 
    public List<PlaceInfo> GetMyPlaces() 
 
    { 
 
     return new SampleDBEntities().PlaceInfoes.ToList(); 
 
    } 
 

 
    protected void btnSubmit_Click(object sender, EventArgs e) 
 
    { 
 

 
     PlaceInfo placeToEdit = Context.placeinfoes.Find(Convert.ToInt32(txtName.DataValueField)); 
 

 

 

 
     using (var context = new SampleDBEntities()) 
 
     { 
 
      PlaceInfo placeToUpdate = context.PlaceInfoes.Find(Convert.ToInt32(txtName.DataValueField)); 
 
      placeToUpdate.Name = txtName.Text; 
 
      placeToUpdate.Address = txtAddress.Text; 
 
      placeToUpdate.Geolocation = DbGeography.FromText("POINT(" + hdnLocation.Value + ")"); 
 

 
      context.Entry(placeToUpdate).State = System.Data.Entity.EntityState.Modified; 
 
      context.SaveChanges(); 
 
     } 
 

 

 
    } 
 

 

 

 
    
 
}

数据库DATABASE DISPLAY

+0

你的问题是,当你点击保存你没有看到你的下拉列表中的新项目? –

+0

嗨我的问题是修改条目创建为新条目,而不是修改现有条目,因为我选择下拉列表。请看看我可以更清楚地理解的数据库视图。 – Mecido

+0

好的,所以他们会从DropDown列表中选择地点名称,并且能够编辑数据库中存在的值? –

回答

0

为了更新数据库中的一个项目,我们首先需要确保我们知道我们需要引用哪一个。

首先,随着DropDownList的创建,我们需要隐藏我们显示的“PlaceInfo”的ID。这将创建一个“SelectMethod”的需要,以及其他一些调整:

<asp:DropDownList ID="txtName" runat="server" ItemType="PlaceInfo" DataValueField="PlaceId" DataTextField="Name" SelectMethod="GetMyPlaces"></asp:DropDownList> 

的DataTextField属性是一个将在实际的下拉显示,和DataValueField是我们将用它来隐藏属性引用该ID,以便我们稍后可以调用该行。

SelectMethod(我有:GetMyPlaces)是我们用来填充DropDownList的方法。请原谅简洁,你可以这样做多种方式,但实质上要返回PlaceInfos列表:

public List<PlaceInfo> GetMyPlaces() 
{ 
    return new SampleDbEntities().PlaceInfoes.ToList(); 
} 

最后 - 在btnSubmit_Click方法,你想抓住我们要去的行

PlaceInfo placeToEdit = Context.PlaceInfoes.Find(Convert.ToInt32(txtName.Value)) 

指定它的新价值,并告诉实体框架这款机型现在修改:

using (var context = new SampleDBEntities()) 
{ 
     PlaceInfo placeToUpdate = context.PlaceInfoes.Find(Convert.ToInt32(txtName.Value)); 
     placeToUpdate.Name = txtName.Text; 
     placeToUpdate.Address = txtAddress.Text; 
     placeToUpdate.Geolocation = DbGeography.FromText("POINT("+hdnLocation.Value+")"); 

     context.Entry(placeToUpdate).State = EntityState.Modified; 
     context.SaveChanges(); 
} 

保存更改使用从下拉列表中隐藏的价值领域编辑根据你的情况,你应该很好走。

+0

是这样吗? – Mecido

+0

对不起,我一直在路上。如果你仍然在那里,我回到我的电脑。恐怕我不明白你的问题。 –

+0

我会编辑数据库三列(名称,地址,地理位置)。名称已在数据库中使用,我在下拉菜单的帮助下调用并保存地理位置和地址。现有代码不断地在数据库中插入新行,而不是使用地理位置,名称,地址详细信息修改现有代码。 – Mecido

相关问题