📄 navigation.ascx.cs
字号:
//Session["QList"]="10101";问题列表,0=未做,1=已做
//Session["MList"]="01100";标记列表,0=未标,1=标记
namespace OnlineExamine
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Collections;
/// <summary>
/// Navigation 的摘要说明。
/// </summary>
public partial class Navigation : System.Web.UI.UserControl
{
int qno;
int qnum,objqnum,expqnum,trueqnum;
string qList;
string mList;
char[] perfix=new char[10] {'A','B','C','D','F','G','H','J','K','L'};
ObjQuestion objQuestion;
ExpQuestion expQuestion;
TrueQuestion trueQuestion;
protected void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!IsPostBack)
{
ReadData();
ShowNavigation();
ShowQuestion();
ShowAnswer();
}
}
public void ReadData()
{
if(Request["QNo"]!=null)
{
qno=Convert.ToInt32(Request["QNo"]);
}
else
{
qno=1;
}
lblQno.Text=qno.ToString();
QuestionControl ctlQuestion=new QuestionControl();
//Read Question Count
objqnum=ctlQuestion.GetObjQuestions().Length;
expqnum=ctlQuestion.GetExpQuestions().Length;
trueqnum=ctlQuestion.GetTrueQuestions().Length;
qnum=objqnum+expqnum+trueqnum;
//Read Answered Question on the first time
ObjQuestion[] questions=ctlQuestion.GetObjQuestions();
for(int i=0;i<questions.Length;i++)
{
char[] questionlist=Session["QList"].ToString().ToCharArray();
if(questions[i].ObjAnswer!=null&&questions[i].ObjAnswer.Item!=null&&!questions[i].ObjAnswer.Item.Equals(string.Empty))
questionlist[i]='1';
else
questionlist[i]='0';
qList="";
foreach(char c in questionlist)
qList+=c.ToString();
Session["QList"]=qList;
}
//Read Session
if(Session["QList"]==null||(string)Session["MList"]==null)
throw new Exception("Please initialize QuestionList and MarkedList");
qList=(string)Session["QList"];
mList=(string)Session["MList"];
}
public void ShowNavigation()
{
Repeater1.DataSource=CreateNavigationDataList();
Repeater1.DataBind();
}
public void ShowQuestion()
{
QuestionControl ctlQuestion=new QuestionControl();
if(qno==1)
btnPrev.Enabled=false;
else if(qno>=qnum)
btnNext.Enabled=false;
if(qno<=objqnum)
{
objQuestion=ctlQuestion.GetObjQuestion(qno);
lblQuestionInfo.Text=objQuestion.Info;
if(objQuestion.Type==0)
{
chklItems.Visible=false;
rblItems.DataSource=CreateQuestionDataList();
rblItems.DataTextField="ItemInfo";
rblItems.DataValueField="ItemId";
rblItems.DataBind();
}
else
{
rblItems.Visible=false;
chklItems.DataSource=CreateQuestionDataList();
chklItems.DataTextField="ItemInfo";
chklItems.DataValueField="ItemId";
chklItems.DataBind();
}
}
else if(qno<=objqnum+expqnum)
{
expQuestion=ctlQuestion.GetExpQuestion(qno-objqnum);
lblQuestionInfo.Text=expQuestion.Info;
hlLink.Visible=true;
hlLink.NavigateUrl=expQuestion.Link;
}
else
{
trueQuestion=ctlQuestion.GetTrueQuestion(qno-objqnum-expqnum);
lblQuestionInfo.Text=trueQuestion.Info;
}
}
public void ShowAnswer()
{
if(mList[qno-1]=='1')
chkMarked.Checked=true;
if(qno<=objqnum)
{
if(objQuestion.ObjAnswer!=null&&objQuestion.ObjAnswer.Item!=null&&!objQuestion.ObjAnswer.Item.Equals(string.Empty))
{
string[] answerItems=objQuestion.ObjAnswer.Item.Split(new Char[]{','},10);
foreach(string answerItem in answerItems)
{
if(objQuestion.Type==0)
{
for(int i=0;i<rblItems.Items.Count;i++)
if(rblItems.Items[i].Value==answerItem)
rblItems.Items[i].Selected=true;
}
else
{
for(int i=0;i<chklItems.Items.Count;i++)
if(chklItems.Items[i].Value==answerItem)
chklItems.Items[i].Selected=true;
}
}
}
}
}
public void InsertAnswer()
{
if(Request["QNo"]!=null)
{
qno=Convert.ToInt32(Request["QNo"]);
}
else
{
qno=1;
}
//Book Marked
char[] questionlist=Session["MList"].ToString().ToCharArray();
if(chkMarked.Checked)
questionlist[qno-1]='1';
else
questionlist[qno-1]='0';
mList="";
foreach(char c in questionlist)
mList+=c.ToString();
Session["MList"]=mList;
QuestionControl ctlQuestion=new QuestionControl();
objqnum=ctlQuestion.GetObjQuestions().Length;
if(qno<=objqnum)
{
//Insert Answer
objQuestion=ctlQuestion.GetObjQuestion(qno);
string answerItem="";
if(objQuestion.Type==0)
{
if(objQuestion.ObjAnswer==null)
objQuestion.ObjAnswer=new ObjAnswer();
answerItem=rblItems.SelectedValue;
objQuestion.ObjAnswer.Item=answerItem;
}
else
{
if(objQuestion.ObjAnswer==null)
objQuestion.ObjAnswer=new ObjAnswer();
foreach(ListItem item in chklItems.Items)
if(item.Selected)
answerItem+=item.Value+",";
if(answerItem.Length>0)
answerItem.Remove(answerItem.Length-1,1);
objQuestion.ObjAnswer.Item=answerItem;
}
//Answered Question
questionlist=Session["QList"].ToString().ToCharArray();
if(!answerItem.Equals(string.Empty))
questionlist[qno-1]='1';
else
questionlist[qno-1]='0';
qList="";
foreach(char c in questionlist)
qList+=c.ToString();
Session["QList"]=qList;
}
}
private string FormatID(int intID)
{
string strID = intID.ToString();
int intCharlong = 2-strID.Length;
return strID.PadLeft(strID.Length + intCharlong,'0');
}
#region Create DataList
private DataView CreateNavigationDataList()
{
DataTable dt=new DataTable();
dt.Columns.Add(new DataColumn("AnswerValue", typeof(string)));
dt.Columns.Add(new DataColumn("AnswerNumber", typeof(string)));
dt.Columns.Add(new DataColumn("AnswerColor", typeof(string)));
qList=(string)Session["QList"];
DataRow dr;
for(int i=1;i<=qList.Length;i++)
{
dr = dt.NewRow();
dr[0]=FormatID(i);
dr[1]=FormatID(i);
if(qList.Substring(i-1,1).Equals("1"))
dr[2]="greenButton";
else
dr[2]="blackButton";
if(mList.Substring(i-1,1).Equals("1"))
dr[2]="yellowButton";
dt.Rows.Add(dr);
}
DataView dv = new DataView(dt);
return dv;
}
private DataView CreateQuestionDataList()
{
DataTable dt = new DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn("ItemId", typeof(Int32)));
dt.Columns.Add(new DataColumn("ItemInfo", typeof(string)));
for(int i=0;i<objQuestion.ObjItems.Length;i++)
{
dr = dt.NewRow();
dr[0]=objQuestion.ObjItems[i].ItemId;
dr[1]=perfix[i].ToString()+". "+objQuestion.ObjItems[i].Info;
dt.Rows.Add(dr);
}
DataView dv = new DataView(dt);
return dv;
}
#endregion
#region Event
private void Repeater1_ItemCommand(object source, System.Web.UI.WebControls.RepeaterCommandEventArgs e)
{
InsertAnswer();
string Url = "Examine.aspx?qno="+e.CommandArgument.ToString();
Response.Redirect(Url);
}
protected void btnSubmit_Click(object sender, System.EventArgs e)
{
InsertAnswer();
ShowNavigation();
}
#endregion
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Repeater1.ItemCommand += new System.Web.UI.WebControls.RepeaterCommandEventHandler(this.Repeater1_ItemCommand);
}
#endregion
protected void btnPrev_Click(object sender, System.EventArgs e)
{
InsertAnswer();
string Url = "Examine.aspx?qno="+(qno==1?1:qno-1);
Response.Redirect(Url);
}
protected void btnNext_Click(object sender, System.EventArgs e)
{
InsertAnswer();
string Url = "Examine.aspx?qno="+(qno==qnum?qnum:qno+1);
Response.Redirect(Url);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -