這個是我目前的總畫面
問了這兩位大大後
https://ithelp.ithome.com.tw/questions/10194041
https://ithelp.ithome.com.tw/questions/10194089
目前已經產生畫面,也可成功拖拉,而我自己則是拖拉後成功地將資料存進資料庫
目前剩下最後一個問題,雖然可拖拉也可將拖拉的資料存進資料庫,但是重新載入
後畫面就消失,所以想請問這部分我該如何處理?目前我有抓到存進去的資料
就剩下如何把它顯示出來
controller
public ActionResult DrSchedule(DrScheduleViewModel model)
{
UserInfoSession user = SessionUserInfo();
DrScheduleService svc = new DrScheduleService();
//班表上人員
model.DrEmp = svc.FindDrsch(user.CID);
//醫師名單
model.DrEmpList= svc.FindDrScheduleByMonth(user.CID, "");
return View(model);
}
FindDrsch方法
public List<DrScheduleDto> FindDrsch(string cid)
{
var query = (from x in _repo.DR_SCHEDULE
where x.CID == cid &&
x.SCH_DATE.Month == DateTime.Today.Month
select new DrScheduleDto
{
GUID = x.GUID,
CID = x.CID,
SCH_DATE = x.SCH_DATE,
SCH_SPELL = x.SCH_SPELL,
DR_EMPNO = x.DR_EMPNO,
CRE_DATE = x.CRE_DATE,
CRE_UID = x.CRE_UID,
MOD_DATE = x.MOD_DATE,
MOD_UID = x.MOD_UID
}).ToList<DrScheduleDto>();
foreach (DrScheduleDto dto in query)
{
dto.EMP_NAME = _repo.EMPLOYEE.Where(x => x.CID == dto.CID && x.EMP_ID == dto.DR_EMPNO).FirstOrDefault<EMPLOYEE>().EMP_NAME;
}
return query;
}
DR_SCHEDULE的資料類型
屬性
public partial class DR_SCHEDULE
{
public string GUID { get; set; }
public string CID { get; set; }
public System.DateTime SCH_DATE { get; set; }
public string SCH_SPELL { get; set; }
public string DR_EMPNO { get; set; }
public Nullable<System.DateTime> CRE_DATE { get; set; }
public string CRE_UID { get; set; }
public Nullable<System.DateTime> MOD_DATE { get; set; }
public string MOD_UID { get; set; }
public string BED_AREA_ID { get; set; }
public string BED_NO { get; set; }
}
html
<div class="container-fluid">
<div class="row">
<!--床位排程資訊-->
<div class="col-md-10 panel-right panel-20 cal">
<div class="box box-primary ">
<div class="box-header">
</div><!-- /.box-header -->
<div id="schTable">
<table id="dataTable" class="table table-bordered table-hover caltable" style="margin: 0px 0px;">
<tbody id="dataTbody">
@foreach (var row in DateForHelper.getMonthArray(@Model.Year, @Model.Month, @Model.DrEmp))
{
<tr>
<th class="sch-left-th"></th>
@foreach (string text in row)
{
var arr = text.Split('&');
if (!String.IsNullOrEmpty(text))
{
<th colspan="3" class="th-weekday"><span class="th-date">@arr[0] @arr[1]</span></th>
}
else
{
<th colspan="3" rowspan="3" class="th-weekday"></th>
}
}
</tr>
<tr>
<th class="sch-left-th">時段</th>
@foreach (string text in row)
{
if (!String.IsNullOrEmpty(text))
{
<th>早</th>
<th>午</th>
<th>晚</th>
}
}
</tr>
<tr>
<th class="sch-left-th">排班醫師</th>
@foreach (string text in row)
{
if (!String.IsNullOrEmpty(text))
{
var arr = text.Split('&');
//if (arr[0]==emplist.day)
<td id="spell-1" data-id="@arr[0]"></td>
<td id="spell-2" data-id="@arr[0]"></td>
<td id="spell-3" data-id="@arr[0]"></td>
}
@*else
{
var arr = text.Split('&');
<td id="spell-1" data-id="@arr[0]"></td>
<td id="spell-2" data-id="@arr[0]"></td>
<td id="spell-3" data-id="@arr[0]"></td>
}*@
}
</tr>
}
</tbody>
</table>
</div>
<!-- /.box-body -->
</div>
<!-- /.box -->
</div>
<!--醫師資訊-->
<div class="col-md-2 panel-right panel-20 doc">
<div class="box box-primary">
<div class="box-header">
</div><!-- /.box-header -->
<div class="box-body">
<div class="lstdiv">
<table id="NameTable" class="table table-bordered table-striped table-hover">
<thead>
<tr>
<th>醫師名單</th>
</tr>
</thead>
<tbody id="NameTbody">
@if (Model.DrEmpList.Count > 0)
{
foreach (var item in Model.DrEmpList)
{
<tr>
<td class="fn-item td-draggable name" id="@item.DR_EMPNO" name="@item.EMP_NAME" draggable="true">@item.EMP_NAME</td>
</tr>
}
}
</tbody>
</table>
</div>
</div>
<!-- /.box-body -->
</div><!-- /.box -->
</div> <!-- /.col -->
</div>
</div>
getMonthArray方法
public static string[][] getMonthArray(int year, int month ,List<DrScheduleDto> dto)
{
string[] weekArray = new string[] { "日", "一", "二", "三", "四", "五", "六" };
DateTime dt = new DateTime(year, month, 1, 0, 0, 0);
int lastDay = dt.AddMonths(1).AddDays(-1).Day; //該月最後一天
int wDay = (int)dt.DayOfWeek; //該月第一天是星期幾
int nRows = (wDay + lastDay + 6) / 7; //計算共需要幾列來顯示
string[][] result = new string[nRows][];
for (int i = 0; i < nRows; ++i)
{
result[i] = new string[7];
for (int j = 0; j < 7; ++j)
{
int d = i * 7 + j - wDay + 1;
if (d > 0 && d <= lastDay)
{
result[i][j] = year + "/" + month + "/" + d +"&"+ weekArray[(d - 1 + wDay) % 7];
}
else
{
result[i][j] = "";
}
}
}
return result;
}
由於你的代碼提供的代碼真的太亂了~
我只能用猜的和大概模擬了一段代碼
針對以下代碼這段開始,
<th class="sch-left-th">排班醫師</th>
我先假設這段是你讀取出醫師每個月值班的代碼,
model.DrEmp = svc.FindDrsch(user.CID);
然後你的row是針對某星期的一個陣列, 所以會有那個星期七天的日期
你就可以把這個7天的日期來跟DrEmp這個list的排班日期做比較,
一樣就顯示就行了,試試看吧~
<tr>
<th class="sch-left-th">排班醫師</th>
@foreach (string text in row)
{
if (!String.IsNullOrEmpty(text))
{
var arr = text.Split('&');
if(arr.length > 0)
{
DateTime getDateTime;
bool IsTryParseDT = DateTime.TryParseExact(arr[0],
"yyyy/M/d", CultureInfo.InvariantCulture,
DateTimeStyles.None,
out getDateTime);
if (!IsTryParseDT)
{
<td colspan="3">日期格式錯誤,請聯絡管理員</td>
}
else
{
//我先假設DrEmp是這個醫師這個月的所有班表時間
//model.DrEmp = svc.FindDrsch(user.CID);
var data = Model.DrEmp.where(x.SCH_DATE.Date == getDateTime);
//獲取今天的日期
<td id="spell-1" data-id="@arr[0]">
var spell1 = data.where(x.SCH_SPELL == "1").toList();
foreach(var item in spell1)
{
<p>@item.DR_EMPNO</p>
}
</td>
<td id="spell-2" data-id="@arr[0]">
var spell2 = data.where(x.SCH_SPELL == "2").toList();
foreach(var item in spell2)
{
<p>@item.DR_EMPNO</p>
}
</td>
<td id="spell-3" data-id="@arr[0]">
var spell3 = data.where(x.SCH_SPELL == "3").toList();
foreach(var item in spell3)
{
<p>@item.DR_EMPNO</p>
}
</td>
}
}
else
{
<td id="spell-1" data-id="@arr[0]"></td>
<td id="spell-2" data-id="@arr[0]"></td>
<td id="spell-3" data-id="@arr[0]"></td>
}
}
}
</tr>
感謝解答
目前是遇到這樣的狀況
在foreach加@則變成
能否請問我可以在getMonthArray方法裡回傳兩個值嗎?
一個是日期,一個是醫生的姓名
又或者是直接用AJAX來處理呢?
public string[][] getMonthArray(int year, int month, List<DrScheduleDto> dto)
{
string[] weekArray = new string[] { "日", "一", "二", "三", "四", "五", "六" };
DateTime dt = new DateTime(year, month, 1, 0, 0, 0);
int lastDay = dt.AddMonths(1).AddDays(-1).Day; //該月最後一天
int wDay = (int)dt.DayOfWeek; //該月第一天是星期幾
int nRows = (wDay + lastDay + 6) / 7; //計算共需要幾列來顯示
string[][] result = new string[nRows][];
Dictionary<string, string> emplist = new Dictionary<string, string>();
for (int i = 0; i < nRows; ++i)
{
result[i] = new string[7];
for (var j = 0; j < 7; ++j)
{
int d = i * 7 + j - wDay + 1;
//照日期排出
if (d > 0 && d <= lastDay)
{
result[i][j] = year + "/" + month + "/" + d + "&" + weekArray[(d - 1 + wDay) % 7];
string code = result[i][j];
string[] splitCode = code.Split('&');
var date = Convert.ToDateTime(splitCode[0]);
var DrEmpList = dto.Where(x => x.SCH_DATE == date).OrderBy(x => x.SCH_DATE).ThenBy(x => x.SCH_SPELL);
foreach (var r in DrEmpList)
{
Console.Write(r);
//emplist.Add("day", date.ToString());
//emplist.Add("spell", r.SCH_SPELL);
//emplist.Add("emp", r.EMP_NAME);
}
}
else
{
result[i][j] = "";
}
}
}
return result;
}
目前我只有暫時把排班的員工按照日期班別一起塞入foreach迴圈裡
在var spell前面加上@試試看,如果不行就試試看
@{
var spell1 = data.where(x.SCH_SPELL == "1").toList();
foreach(var item in spell1)
{
<p>@item.DR_EMPNO</p>
}
}
醫師的名字加入getMonthArray,
你是指這裏需要用到醫師名字嗎@item.DR_EMPNO
如果是的話,可以考虑在DrEmp這個table裡面加一個欄位,
把醫師名字裝進去
[NotMapped]
public string DrEmp { get; set; }
如果你的結構是資料表Mapping對應Dto的話處理的話,
就不需要[NotMapped]