/// <summary> /// 通过主题ID获取相应的投票信息 /// </summary> /// <param name="tid">主题id</param> /// <returns>投票选项集合</returns> public static PollOptionInfoCollection GetPollOptionInfoCollection(int tid) { PollOptionInfoCollection pollinfocoll = new PollOptionInfoCollection(); IDataReader idatareader = DatabaseProvider.GetInstance().GetPollOptionList(tid); PollOptionInfo polloptioninfo; while (idatareader.Read()) { polloptioninfo = new PollOptionInfo(); polloptioninfo.Polloptionid = Utils.StrToInt(idatareader["polloptionid"], 0); polloptioninfo.Displayorder = Utils.StrToInt(idatareader["displayorder"], 0); polloptioninfo.Pollid = Utils.StrToInt(idatareader["pollid"], 0); polloptioninfo.Polloption = idatareader["polloption"].ToString().Trim(); polloptioninfo.Tid = Utils.StrToInt(idatareader["tid"], 0); polloptioninfo.Voternames = idatareader["voternames"].ToString().Trim(); polloptioninfo.Votes = Utils.StrToInt(idatareader["votes"], 0); pollinfocoll.Add(polloptioninfo); } idatareader.Close(); return(pollinfocoll); }
/// <summary> /// 更新一个投票 /// </summary> /// <param name="tid">关联的主题id</param> /// <param name="multiple">投票类型, 0为单选, 1为多选</param> /// <param name="itemcount">投票项总数</param> /// <param name="polloptionidlist">投票项id列表</param> /// <param name="itemnamelist">投票项目列表</param> /// <param name="itemdisplayorderlist">投票项目排列顺序列表</param> /// <param name="enddatetime">截止日期</param> /// <param name="maxchoices">最多可选项数</param> /// <param name="visible">提交投票后结果才可见, 0为可见, 1为投票后可见</param> /// <returns>成功则返回true, 否则返回false</returns> public static bool UpdatePoll(int tid, int multiple, int itemcount, string polloptionidlist, string itemnamelist, string itemdisplayorderlist, string enddatetime, int maxchoices, int visible) { // string[] itemname = Utils.SplitString(itemnamelist, "\r\n"); string[] itemdisplayorder = Utils.SplitString(itemdisplayorderlist, "\r\n"); string[] polloptionid = Utils.SplitString(polloptionidlist, "\r\n"); if ((itemname.Length != itemcount) || (itemdisplayorder.Length != itemcount)) { return(false); } PollInfo pollinfo = GetPollInfo(tid); pollinfo.Expiration = Utils.GetStandardDateTime(enddatetime); pollinfo.Maxchoices = maxchoices; pollinfo.Multiple = multiple; pollinfo.Tid = tid; pollinfo.Visible = visible; bool result = false; if (pollinfo.Pollid > 0) { result = DatabaseProvider.GetInstance().UpdatePoll(pollinfo); } if (result) { PollOptionInfoCollection polloptioninfocoll = GetPollOptionInfoCollection(pollinfo.Tid); int i = 0; //先作已存在的投票选项更新及新添加选项的添加操作 bool optionexist; foreach (string optionid in polloptionid) { optionexist = false; foreach (PollOptionInfo polloptioninfo in polloptioninfocoll) { if (optionid == polloptioninfo.Polloptionid.ToString()) { polloptioninfo.Pollid = pollinfo.Pollid; polloptioninfo.Polloption = Utils.GetSubString(itemname[i], 80, ""); polloptioninfo.Displayorder = Utils.StrIsNullOrEmpty(itemdisplayorder[i]) ? i + 1 : Utils.StrToInt(itemdisplayorder[i], 0); DatabaseProvider.GetInstance().UpdatePollOption(polloptioninfo); optionexist = true; break; } } if (!optionexist) //如果当前选项不存在,表示该选项为新添选项 { PollOptionInfo polloptioninfo = new PollOptionInfo(); polloptioninfo.Displayorder = Utils.StrIsNullOrEmpty(itemdisplayorder[i]) ? i + 1 : Utils.StrToInt(itemdisplayorder[i], 0); polloptioninfo.Pollid = pollinfo.Pollid; polloptioninfo.Polloption = Utils.GetSubString(itemname[i], 80, ""); polloptioninfo.Tid = tid; polloptioninfo.Voternames = ""; polloptioninfo.Votes = 0; DatabaseProvider.GetInstance().CreatePollOption(polloptioninfo); } i++; } foreach (PollOptionInfo polloptioninfo in polloptioninfocoll) { //下面代码用于删除已去除的投票项 if (("\r\n" + polloptionidlist + "\r\n").IndexOf("\r\n" + polloptioninfo.Polloptionid + "\r\n") < 0) { DatabaseProvider.GetInstance().DeletePollOption(polloptioninfo); } } return(true); } else { return(false); } }
/// <summary> /// 获得与指定主题id关联的投票数据 /// </summary> /// <param name="tid">主题id</param> /// <returns>投票数据</returns> public static DataTable GetPollOptionList(int tid) { DataTable dt = new DataTable(); dt.Columns.Add("name", System.Type.GetType("System.String")); //投票项名称 dt.Columns.Add("value", System.Type.GetType("System.String")); //票数 dt.Columns.Add("barid", System.Type.GetType("System.Int32")); dt.Columns.Add("barwidth", System.Type.GetType("System.Double")); //显示宽度 dt.Columns.Add("percent", System.Type.GetType("System.String")); //投票百分比 dt.Columns.Add("multiple", System.Type.GetType("System.String")); //是否多选 dt.Columns.Add("polloptionid", System.Type.GetType("System.Int32")); //投票项ID dt.Columns.Add("displayorder", System.Type.GetType("System.Int32")); //排序位置 dt.Columns.Add("votername", System.Type.GetType("System.String")); //投票人名称 dt.Columns.Add("percentwidth", System.Type.GetType("System.String")); //投票进度条宽度 PollOptionInfoCollection polloptioninfocoll = GetPollOptionInfoCollection(tid); object[] rowVals; int multiple = GetPollInfo(tid).Multiple; int votesum = 0; int maxVote = 0; foreach (PollOptionInfo polloptioninfo in polloptioninfocoll) { votesum += polloptioninfo.Votes; maxVote = polloptioninfo.Votes > maxVote ? polloptioninfo.Votes : maxVote; } if (votesum == 0) { votesum = 1; } int i = 0; string votername = ""; //组定数据项 foreach (PollOptionInfo polloptioninfo in polloptioninfocoll) { rowVals = new object[10]; rowVals[0] = polloptioninfo.Polloption; rowVals[1] = polloptioninfo.Votes; rowVals[2] = i % 10; rowVals[3] = (((double)(Utils.StrToFloat(polloptioninfo.Votes, 0) * 100 / votesum) / 100) * 200 + 3).ToString("0.00"); rowVals[4] = ((double)(Utils.StrToFloat(polloptioninfo.Votes, 0) * 100 / votesum) / 100).ToString("0.00%"); rowVals[5] = multiple; rowVals[6] = polloptioninfo.Polloptionid; rowVals[7] = polloptioninfo.Displayorder; if (!Utils.StrIsNullOrEmpty(polloptioninfo.Voternames)) { //将投票人字段的数据重新组合成链接字符串 foreach (string username in Utils.SplitString(polloptioninfo.Voternames, "\r\n")) { votername += "<a href=\"userinfo.aspx?username="******"\">" + username.Trim() + "</a> "; } rowVals[8] = votername; votername = ""; } else { rowVals[8] = ""; } rowVals[9] = (420 * ((double)(Utils.StrToFloat(polloptioninfo.Votes, 0) / maxVote))).ToString(); dt.Rows.Add(rowVals); i++; } return(dt); }
/// <summary> /// 根据投票信息更新数据库中的记录 /// </summary> /// <param name="tid">主题id</param> /// <param name="selitemidlist">选择的投票项id列表</param> /// <param name="username">用户名</param> /// <returns>如果执行成功则返回0, 非法提交返回负值</returns> public static int UpdatePoll(int tid, string selitemidlist, string username) { if (username == "") { return(-1); } string[] selitemid = Utils.SplitString(selitemidlist, ","); int nowid = 0; foreach (string optionid in selitemid) { nowid = Utils.StrToInt(optionid, -1); // 如果id结果集合中出现非数字类型字符则认为是非法 if (nowid == -1) { return(-1); } } PollInfo pollinfo = GetPollInfo(tid); if (pollinfo.Pollid < 1) { return(-3); } if (Utils.StrIsNullOrEmpty(pollinfo.Voternames)) { pollinfo.Voternames = username; } else { pollinfo.Voternames = pollinfo.Voternames + "\r\n" + username; } DatabaseProvider.GetInstance().UpdatePoll(pollinfo); PollOptionInfoCollection polloptioninfocoll = GetPollOptionInfoCollection(pollinfo.Tid); foreach (string optionid in selitemid) { foreach (PollOptionInfo polloptioninfo in polloptioninfocoll) { if (optionid == polloptioninfo.Polloptionid.ToString()) { if (Utils.StrIsNullOrEmpty(polloptioninfo.Voternames)) { polloptioninfo.Voternames = username; } else { polloptioninfo.Voternames = polloptioninfo.Voternames + "\r\n" + username; } polloptioninfo.Votes += 1; DatabaseProvider.GetInstance().UpdatePollOption(polloptioninfo); } } } return(0); }