2016-11-18 3 views
0

専門家、は、コンテキストに既存のが、変更のエンティティをアタッチ(データベースからドロップダウンリスト)

ドロップダウン・リストは、データベースからデータを取り出すと、Webページを開いたときに、同じ列に対して、データの保存やデータを保存していますここで、貯蓄ではなく、同じ名前の別で起こっている、

<%@ 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

OK、ドロップダウンリストから場所名を選択し、データベースに存在する値を編集できるようにしますか? –

答えて

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(I have as: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(); 
} 

変更を保存し、ドロップダウンから隠しValueフィールドを使用して編集しますあなたの文脈にあなたは行くべきです。

+0

これはこのようなものですか? – Mecido

+0

申し訳ありませんが、私は道を歩いています。あなたがまだそこにいるなら、私は自分のPCに戻ってきます。私はあなたの質問を理解できないのではないかと心配しています。 –

+0

データベース3列(名前、住所、地理位置)を編集します。名前は既に私がドロップダウンの助けを借りて呼び出されたデータベースで利用されており、ジオロケーションと住所で保存されています。既存のコードでは、Geolocation、name、address detailsを使用して既存のコードを変更する代わりに、データベースに新しい行を挿入し続けます。 – Mecido

関連する問題