問題:在一個頁面中有多項考核成績,如:禮貌、表達技巧、電話控制、傾聽技巧、情緒控制等多項考核,而沒想考核又有多項考核標准,如:評分、內容、對話實例等,會這樣下來,一個頁面會有幾百個內容需要存儲,如果新建張表的話會要上百個字段,這明顯是不合適,面對上面的為題我是這樣解決的:
1 在該頁面中按考核標准建立字段,如果有10個考核標准就建立是個字段。
2 每項考核相對應的考核標准要填寫的文本框用有規律的命名方法,如前綴相同的名字+數字(我是這樣命名的)
3 在後台根據相應的名字循環遍歷取出值,後加分隔符,最後存入相應的字段中。
頁面局部圖如下:
後台處理的主要方法:
插入數據庫中的時候:
//取出所有對話實例列中的值,拼接成字符串賦值給Instance,Score,Content也是同樣的方法
StringBuilder Instance = new StringBuilder();
StringBuilder Score = new StringBuilder();
StringBuilder TutorContent = new StringBuilder();
for (int i = 1; i <= 52; i++)
{
if (Page.FindControl("tbx_Instance" + i).GetType() == typeof(TextBox))
{
Instance.Append((Page.FindControl("tbx_Instance" + i) as TextBox).Text + "#&");
}
if (Page.FindControl("tbx_content" + i).GetType() == typeof(TextBox))
{
TutorContent.Append((Page.FindControl("tbx_content" + i) as TextBox).Text + "#&");
}
if (Page.FindControl("ddl_S" + i).GetType() == typeof(DropDownList))
{
Score.Append((Page.FindControl("ddl_S" + i) as DropDownList).SelectedValue + "#&");
}
數據庫中取出,給相應的文本賦值:
//給對話實例文本框賦值
string intance = dtCS.Rows[0]["Example"].ToString();
string[] sInstance = Regex.Split(intance, "#&", RegexOptions.IgnoreCase);
for (int i = 1; i < sInstance.Length; i++)
{
(Page.FindControl("tbx_Instance" + i) as TextBox).Text = sInstance[i-1];
}
//給輔導內容文本框賦值
string content = dtCS.Rows[0]["TutorContent"].ToString();
string[] sContent = Regex.Split(content, "#&", RegexOptions.IgnoreCase);
for (int i = 1; i < sContent.Length; i++)
{
(Page.FindControl("tbx_content" + i) as TextBox).Text = sContent[i-1];
}
//給評分賦值
string Score = dtCS.Rows[0]["Score"].ToString();
string[] sScore = Regex.Split(Score, "#&", RegexOptions.IgnoreCase);
for (int i = 1; i < sScore.Length; i++)
{
(Page.FindControl("ddl_S" + i) as DropDownList).SelectedValue = sScore[i-1];
}