2017. 1. 4. 23:16

물론 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
Posted by 다만사