물론 Merge문을 사용할 수 있겠다.
서버단
<%@ Page Language="C#" EnableViewState="false"
Debug="true" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Web" %>
<%@ Import Namespace="System.Web.Script.Serialization" %>
<%
var result = new object();
using (var conn = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|travelDB.mdf;Integrated Security=True"))
{
conn.Open();
using (var cmd = conn.CreateCommand())
{
//회원 정보 수정
var user = Session["member"] as int?;
if (user == null)
{
Response.Write("{}");
Response.End();
}
if (Request.HttpMethod == "GET")
{
//회원목록 취득
var list = new List<object>();
cmd.CommandText = @"select r.id,
r.subject, r.amount_per_unit, r.maxunit, r.location, r.expire_date, isnull(e.unit, 0) as unit
from rosters r left outer join entries e on r.id = e.roster_id and e.member_id = @user
order by expire_date asc";
cmd.Parameters.Add(new SqlParameter("@user", user));
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
list.Add(new { id = (int)reader["id"],
subject = reader["subject"] as string,
unit = (int)reader["unit"],
amount_per_unit = ((int)reader["amount_per_unit"]).ToString("#,##0"),
maxunit = reader["maxunit"] as int?,
location = reader["location"] as string,
expire_date = ((DateTime)reader["expire_date"]).ToString("d")
});
}
}
result = list.ToArray();
} else if (Request.HttpMethod == "POST")
{
cmd.CommandText = @"update entries set
unit = @unit
where roster_id = @id and member_id = @user";
cmd.Parameters.Add(new SqlParameter("@unit", Request.Params["unit"]));
cmd.Parameters.Add(new SqlParameter("@id", Request.Params["id"]));
cmd.Parameters.Add(new SqlParameter("@user", user));
var affected = cmd.ExecuteNonQuery();
if (affected == 0)
{
cmd.CommandText = @"insert into entries
values (@id, @user, @unit, sysdatetime())";
cmd.ExecuteNonQuery();
}
}
}
conn.Close();
}
%>
<%
var ser = new JavaScriptSerializer();
%>
<%= ser.Serialize(result) %>
클라이언트 js
$(document).ready(function () {
$("#update_rosters").on("click", function () {
//alert(1);
var eventId = function (id, val) {
return id + ":" + val;
};
$.ajax({
url: "rosters.aspx",
dataType: "json"
})
.done(function (data) {
var rows = [];
for (var i = 0; i < data.length; i++) {
var row = '<td>' + data[i].subject + '</td><td>';
var option = '<option value="' + eventId(data[i].id, 0) + '"' + ((data[i].unit == 0)? ' selected' : '') + '>미참가</option>';
for (j = 1; j <= data[i].maxunit; j++) {
option += '<option value="' + eventId(data[i].id, j) + '"' + ((data[i].unit == j) ? ' selected' : '') + '>' + j + '명</option>';
}
row += data[i].expire_date + '</td><td>';
row += '<select>' + option + '</select></td><td>';
row += data[i].maxunit + '명' + '</td><td>';
row += data[i].amount_per_unit + '원' + '</td><td>';
row += data[i].location + '</td>';
rows[i] = row;
}
if (rows.length > 0) {
$("#rosters").html('<table>'
+ "<tr><th>제목</th><th>종료기한</th><th>참가</th><th>최대모집인원</th><th>1인당여행비</th><th>비고</th></tr>"
+ "<tr>" + rows.join("</tr><tr>") + "</tr>"
+ '</table>');
} else {
//데이터가 없다면 삭제
$("#rosters").html('');
}
});
});
$("#rosters").on("change", function (e) {
//alert(e.target.value);
var r = e.target.value.split(':');
//alert(r[0] + ':' + r[1]);
$.ajax({
url: 'rosters.aspx',
method: 'post',
data: 'id=' + r[0] + '&unit=' + r[1]
});
});
});
'asp.net' 카테고리의 다른 글
asp.net mvc5 기초 (0) | 2017.01.05 |
---|---|
계획표 목록 보기 (0) | 2017.01.04 |
경량 프로젝트 html (0) | 2017.01.04 |
경량 프로젝트 js (0) | 2017.01.04 |
경량 프로젝트(회원관리 aspx) (0) | 2017.01.04 |