JOA(È«³Æ
Japanese Orthopaedic Association Scores for Assessment
of Cervical Myelopathy£©£¬ÈÕ±¾¹Ç¿ÆÑ§»á£¨JOA£©¾±×µ²¡ÁÆÐ§ÆÀ¶¨±ê×¼£¬ÓÃÓÚÔÚ¼¹ÖùÍâ¿ÆµÄÊõǰÊõºó£¬¶Ô»¼ÕßÉíÌå×´¿ö½øÐÐÁ¿»¯£¬²¢Öƶ¨Ïà¹ØµÄ»¤Àí·½°¸ÌṩÒÀ¾Ý¡£JOAÆÀ·Ö¼Ç¼ģ¿é£¬ÊÇÈí¼þ¡¶¼¹ÖùÍâ¿Æ²¡ÈË×ÊÁϹÜÀíϵͳ¡·µÄÒ»¸öÁÁµã£¬ÄÜʹÍâ¿ÆÒ½Éú»òÕß»¤Ê¿£¬¶Ô»¼ÕßµÄÐÅÏ¢½øÐÐÈ«ÃæµÄ¼Ç¼ºÍÑо¿²Î¿¼¡£
1¡¢JOAÆÀ·Ö¼Ç¼ģ¿éµÄ·ÖÎö
JOAÆÀ·Ö¼Ç¼£¬ÓеãÀàËÆÓÚ¿¼ÌâµÄ·½Ê½£¬¶Ô¸÷ÏîÄÚÈݽøÐзÖÖµµÄÆÀ¹À£¬Ã¿Ïî¼Ç¼µÄµÃ·Ö²»Í¬£¬»ã×ܳÉÒ»¸ö×ܵĵ÷֣¬ÓÃÓÚÁ¿»¯ÆÀ¹À£¬ËüµÄ·ÖÀà´óÖÂÈçÏÂËùʾ¡£
´ÓÉÏÃæµÄÎĵµ½ØÍ¼¿ÉÒÔ¿´µ½£¬ÆÀ·ÖÏîÄ¿¿ÉÒÔ·ÖΪһ¸ö´óÀࣨÈç×Ô¾õÖ¢×´£©£¬¶à¸ö×ÓÏîÄ¿£¨ÈçÏÂÑüÍ´£©ÕâÑùµÄ×éÖ¯·½Ê½£¬È»ºóÎÒÃÇÐèÒª¼Ç¼ÿÏîµÄµÃ·Ö£¬ÒÔ¼°ËùÓÐÏîÄ¿ÀÛ¼ÓµÄ×Ü·Ö¡£
ͨ¹ý·Ö²ð£¬ÎÒÃÇ¿ÉÒÔ°ÑÒ»¸ö¼Ç·ÖµÄÌâÄ¿×÷Ϊһ¸ö¿Ø¼þ£¬Ã¿¸öÌâÄ¿Ëü×Ô¼ºµÄµÃ·ÖÃ÷ϸ¿ÉÒÔ¶¯Ì¬´ÓÊý¾Ý¿â»ñÈ¡¼´¿É£¬½çÃæ¿Ø¼þÉè¼ÆÈçÏÂËùʾ¡£

ͨ¹ýÉÏÃæµÄ·ÖÎö£¬ÎÒÃÇÖªµÀ£¬Ò»¸öÏîÄ¿´óÀࣨÈç×Ô¾õÖ¢×´£©°üº¬Á˶à¸ö×ÓÏîÄ¿£¨ÈçÏÂÑüÍ´¡¢²½Ì¬µÈ£©ÕâÑùµÄÌâÄ¿£¬Ò²¾ÍÊǶà¸öÉÏÃæ¿Ø¼þµÄʵÀý£¬ÄÇôÎÒÃÇÉè¼ÆµÄÏîÄ¿´óÀà¿Ø¼þ½çÃæÈçÏÂËùʾ¡£

ÒÔÉϵĽçÃæ£¬Æäʵ¾ÍÊÇÔÚÒ»¸ö´óµÄÏîÄ¿´óÀà¿Ø¼þÉÏ×éºÏ¶à¸ö×ÓÏîÄ¿¿Ø¼þµÄЧ¹û¡£
È»ºó£¬Õû¸öJOAÆÀ·ÖµÄ½çÃæ¾ÍÊǶà¸öÉÏÃæÏîÄ¿´óÀàµÄ×éºÏÁË£¬×éºÏ³ÉÁËÒ»¸öJOAÆÀ·Ö¼Ç¼ģ¿éµÄ¿Ø¼þЧ¹û£¬ÈçÏÂËùʾ¡£
×îºó£¬ÎÒÃÇÔÚµÚÒ»¸öÎĵµ½ØÍ¼ÀïÃæ¿´µ½£¬JOAÆÀ·Ö·ÖΪÁ½¸ö·½Ã棬һ¸öÊÇÊõǰµÄ£¬Ò»¸öÊÇÊõºóµÄ£¬ËûÃÇµÄÆÀ·Ö½çÃæÍêȫһÑù£¬ÄÇôÎÒÃÇ¿ÉÒÔ°ÑËüÃÇÓÃÁ½¸öTab½çÃæ½øÐзֿª´¦Àí£¬×îºóµÃµ½µÄÔËÐнçÃæÈçÏÂËùʾ¡£

2¡¢JOAÆÀ·Ö¼Ç¼µÄÂ߼ʵÏÖ
ΪÁËÔÚ½çÃæ³ÊÏÖ¸÷Ïî·ÖÊýÏîÄ¿£¬ÎÒÃÇÐèÒªÔÚÊý¾Ý¿âÉè¼ÆÒ»¸ö±íJOAItem£¬ÓÃÀ´´æ´¢Ã¿¸öÆÀ·ÖÏîÄ¿µÄÄÚÈÝ£¬È»ºóÔÚ½çÃæÖиù¾Ý·ÖÀà½øÐж¯Ì¬Õ¹Ê¾¡£


È»ºó¶¨ÒåÒ»¸öÆÀ·Ö×ÓÏîÄ¿µÄÐÅÏ¢¶ÔÏóControlItem£¬×÷ΪÉÏÃæ¿Ø¼þµÄÐÅÏ¢¶ÔÏ󣬷½±ã¿Ø¼þºÍÊý¾Ý¿â¹ØÁªÆðÀ´£¬¼Ç·Ö»òÕß´æ´¢Ã÷ϸµ½Êý¾Ý¿âÖУ¬´úÂëÈçÏÂËùʾ¡£
///
/// JOAÆÀ·ÖÏîÄ¿Ã÷ϸ
///
[DataContract]
public class ControlItem
{
///
/// ÐòºÅ£¬´Ó1¿ªÊ¼
///
[DataMember]
public virtual int Seq { get; set; }
///
/// ·ÖÀàÃû³Æ
///
[DataMember]
public virtual string Category { get; set; }
///
/// ÏîÄ¿Ã÷ϸÁÐ±í£¨°üÀ¨ÏîÄ¿µÃ·ÖµÈÐÅÏ¢£©
///
[DataMember]
public virtual List ItemList { get; set; }
///
/// ÆÀ·ÖÏîÄ¿µÚÒ»ÏîµÃ·Ö£¨Ä¬Èϵ÷֣©
///
public virtual decimal DefaultScore
{
get
{
if (ItemList == null || ItemList.Count == 0)
{
return 0M;
}
else
{
return ItemList[0].Score;
}
}
}
///
/// ĬÈϹ¹Ô캯Êý
///
public ControlItem()
{
ItemList = new List();
}
///
/// ²ÎÊý¹¹Ô캯Êý
///
/// <param name="seq">ÐòºÅ</param>
/// <param name="category">·ÖÀàÃû³Æ</param>
/// <param name="itemList">ÏîÄ¿Ã÷ϸÁбí</param>
/// <param name="seq">Ðò
public ControlItem(int seq, string category, List<JOAItemInfo> itemList) : this()
public ControlItem(int seq, string category, List itemList) : this()
{
this.Seq = seq;
this.Category = category;
this.ItemList = itemList;
}
}
|
ÔÚÉÏÃæµÄÆÀ·Ö¿Ø¼þÖУ¬ÎÒÃÇÕûºÏÒÔÉϵÄÐÅÏ¢¶ÔÏó×÷Ϊһ¸öÕûÌ壬²¿·Ö´úÂëÈçÏÂËùʾ¡£
public partial class ScoreItemControl : DevExpress.XtraEditors.XtraUserControl
{
///
/// µ¥ÏîµÄÐòºÅ£¬´Ó1¿ªÊ¼
///
public int Seq = 1;
///
/// ¿Ø¼þ°ó¶¨µÄÐÅÏ¢
///
public ControlItem ControlItem { get;set; }
///
/// µ¥ÏîµÄµÃ·Ö
///
public decimal Score { get; set; }
///
/// ´¦Àí·ÖÊý±ä»¯ºóµÄʼþ´¥·¢
///
public event ScoreChangedHandler OnScoreChanged;
............................
|
µ±ÎÒÃÇÔÚÆÀ·Ö¿Ø¼þÖÐÖ¸¶¨ÁËControlItemÐÅÏ¢ºó£¬ÔڿؼþµÄLoadʼþÀïÃæ£¬½«»á¶¯Ì¬°ó¶¨ÆÀ·ÖµÄÏîÄ¿Ã÷ϸ£¬´úÂëÈçÏÂËùʾ¡£
private void ScoreItemControl_Load(object sender, EventArgs e)
{
if (ControlItem != null && !this.DesignMode)
{
this.lblItemIndex.Text = ControlItem.Seq.ToString();
this.layoutItem.Text = ControlItem.Category;
List itemList = new List();
foreach (JOAItemInfo info in ControlItem.ItemList)
{
itemList.Add(new CListItem(info.ItemDetail, info.Score.ToString()));
}
radItemGroup.BindDictItems(itemList);
}
if (radItemGroup.Properties.Items.Count > 0)
{
this.radItemGroup.SelectedIndex = 0;
}
}
|
³ýÁËControlItemÐÅÏ¢¶ÔÏóµÄ°ó¶¨£¬ÎÒÃÇ»¹×¢Òâµ½ÉÏÃæµÄOnScoreChangedʼþ£¬Ëü¾ÍÊÇΪÁËÎÒÃÇÔÚÕû¸ö¿Ø¼þÖÐʵÏÖ·ÖÊý¶¯Ì¬±ä»¯µÄÒ»¸öʼþ£¬ÕâÑùÎÒÃDZ仯ÈκÎÒ»¸öÆÀ·ÖÏîÄ¿ÐÅÏ¢£¬µ¥Ïî·ÖÊýºÍ×Ü·Ö¶¼»áÖØÐ¼ÆËãÒ»´ÎµÄʼþ¡£
///
/// ´¦Àí·ÖÊý±ä»¯ºóµÄʼþ´¥·¢
///
public virtual void ProcessScoreChanged(int seq, decimal score)
{
if (OnScoreChanged != null)
{
OnScoreChanged(seq, score);
}
}
private void radItemGroup_SelectedIndexChanged(object sender, EventArgs e)
{
this.lblItemScore.Text = string.Format("µÃ·Ö£¨{0}£©·Ö", this.radItemGroup.EditValue);
decimal result = 0;
if (decimal.TryParse(this.radItemGroup.EditValue.ToString(), out result))
{
this.Score = result;
ProcessScoreChanged(Seq, result);
}
}
|
ÒÔÉÏ´úÂëÂß¼¾ÍÊÇ×îСÆÀ·Ö¿Ø¼þµÄÒ»¸ö¾ßÌåµÄʵÏÖ£¬Íê³ÉÒÔÉÏÕâЩ£¬»¹ÐèÒªÍê³ÉÒ»¸öÆÀ·ÖÏîÄ¿´óÀàµÄ¾ßÌåÂß¼£¬ËüµÄ²Ù×÷·½Ê½ºÍÉÏÃæ²î²»¶à£¬Ò²ÊÇÒýÈëÒ»¸öÐÅÏ¢¶ÔÏ󼯺Ï×÷Ϊ±³ºóµÃ·Ö¼ÆËãµÄÂß¼¡£

¶¨ÒåµÄÐÅÏ¢¶ÔÏóProjectItem´úÂëÈçÏÂËùʾ¡£
///
/// JOAÆÀ·ÖÏîÄ¿ÐÅÏ¢
///
[DataContract]
public class ProjectItem
{
///
/// ÐòºÅ£¬´Ó1¿ªÊ¼
///
[DataMember]
public virtual int Seq { get; set; }
///
/// ÏîÄ¿Ãû³Æ
///
[DataMember]
public virtual string Project { get; set; }
///
/// ÏîÄ¿Ã÷ϸÁбí
///
[DataMember]
public virtual List ItemList { get; set; }
///
/// ĬÈϹ¹Ô캯Êý
///
public ProjectItem()
{
ItemList = new List();
}
///
/// ÆÀ·ÖÏîÄ¿µÚÒ»ÏîµÃ·Ö×ܺͣ¨Ä¬Èϵ÷֣©
///
public virtual decimal DefaultScore
{
get
{
if (ItemList == null || ItemList.Count == 0)
{
return 0M;
}
else
{
decimal total = 0M;
foreach (ControlItem item in ItemList)
{
total += item.DefaultScore;
}
return total;
}
}
}
///
/// ²ÎÊý»¯¹¹Ô캯Êý
///
/// </summary> /// <param name="seq"></param> /// <param name="project"></param> /// <param name="itemList"></param>
public ProjectItem(int seq, string project, List itemList) : this()
{
this.Seq = seq;
this.Project = project;
this.ItemList = itemList;
}
}
|
È»ºó¸Ã¿Ø¼þµÄÂß¼´úÂë¾ÍÊǽáºÏÕâ¸öÐÅÏ¢¶ÔÏóÒÔ¼°¿Ø¼þµÄһЩʼþ½øÐд¦ÀíÁË£¬¿Ø¼þµÄ²¿·Ö´úÂëÈçÏÂËùʾ¡£
public partial class ScoreProjectControl : DevExpress.XtraEditors.XtraUserControl
{
///
/// ÏîÄ¿´óÀàµÄÐòºÅ£¬´Ó1¿ªÊ¼
///
public int ProjectSeq = 1;
///
/// ÏîÄ¿´óÀàµÄÐÅÏ¢
///
public ProjectItem ProjectItem { get; set; }
///
/// ´¦Àí·ÖÊý±ä»¯ºóµÄʼþ´¥·¢
///
public event ScoreChangedHandler OnScoreChanged;
private Dictionary<int, decimal> scoreList = new Dictionary<int, decimal>();//¼Ç¼µ¥ÏîµÄµÃ·ÖÁбí
...................
|
ÓÉÓÚÿÏîÆÀ·Ö×ÓÏîÄ¿Êǵ¥¶ÀµÄÆÀ·Ö¿Ø¼þ£¬¿Ø¼þµÄ²¼¾Ö²ÉÓÃÁËFlowLayout²¼¾Ö³ÊÏÖ·½Ê½£¬Òò´ËÔڿؼþµÄLoadʼþ´úÂëÈçÏÂËùʾ¡£
private void ScoreProjectControl_Load(object sender, EventArgs e)
{
if (ProjectItem != null && !this.DesignMode)
{
this.lblProject.Text = string.Format("{0}¡¢{1}", ProjectItem.Seq, ProjectItem.Project);
this.flowLayoutPanel1.Controls.Clear();
int index = 1;
foreach (ControlItem item in ProjectItem.ItemList)
{
ScoreItemControl control = new ScoreItemControl();
control.ControlItem = item;
control.Seq = index++;
control.OnScoreChanged += new ScoreChangedHandler(control_OnScoreChanged);
this.flowLayoutPanel1.Controls.Add(control);
}
}
}
|
ͬÑùÕû¸ö¿Ø¼þÒ²ÓÐÒ»¸öOnScoreChanged µÄʼþ£¬ÎÒÃÇ¿´µ½£¬Õâ¸öºÍÉÏÃæ½éÉܵÄʼþ²Ù×÷·½Ê½ÀàËÆ£¬¶¼ÊÇÒ»¼¶¸ºÔðÒ»¼¶µÄ·ÖÊý´¦Àí£¬¾ßÌå´úÂëÈçÏÂËùʾ¡£
void control_OnScoreChanged(int seq, decimal score)
{
if(!scoreList.ContainsKey(seq))
{
scoreList.Add(seq, score);
}
else
{
scoreList[seq] = score;
}
//ÏîÄ¿µÄ×ֱܷ仯
ProcessScoreChanged(ProjectSeq, this.TotalScores);
}
|
ÒÔÉϵĿؼþʵÏÖÂß¼Ò»²½²½µÝÍÆ£¬¾ÍÄܺܺÃʵÏÖÆÀ·ÖÏîÄ¿µÄ¶¯Ì¬³ÊÏÖ£¬ÒÔ¼°¿Ø¼þÆÀ·Ö·ÖÊýµÄ¶¯Ì¬±ä»¯ºÍ×ּܷǼ±£´æ£¬ÓÉÓÚÉæ¼°µÄʵÏÖϸ½Ú»¹±È½Ï¶à£¬Ò»ÆªËæ±Ê½éÉÜÄÚÈÝÌ«¶àÏÔµÃÀÛ׸£¬µ«ÊÇÆäËû¿Ø¼þµÄʵÏÖÂß¼ºÍÉÏÃæµÄ²Ù×÷·½Ê½²î²»¶à£¬ÔÚÕâÀï¾Í²»ÔÚһһ׸ÊöÁË£¬±¾ÎÄÖ÷ÒªÌṩһ¸öÕâÖÖµÄʵÏÖ˼·½øÐÐJOAÆÀ·Ö¼Ç¼ģ¿éµÄʵÏÖ£¬½øÒ»²½ÍØÕ¹£¬¿ÉÒÔ°ÑËüÓ¦Óõ½¿¼ÊÔÌâÄ¿ÉÏ
£¬¿ÉÒÔ×÷Ϊ¶¯Ì¬³éÈ¡ÌâÄ¿£¬È»ºó¼Ç¼²âÊÔÕßµÄÌâĿѡÔñÐÅÏ¢£¬×îºó°Ñ²âÊÔÕߵĴ𰸺ͱê×¼´ð°¸¶Ô±ÈµÃ³öÓû§µÄ×Ü·Ö£¬ÕâÑù¾ÍÍê³ÉÁËÊÔÌâµÄ¶¯Ì¬²âÊÔ°¸ÀýÁË¡£
|