手机版

数据表多列合并问题轻松搞定

时间:2021-11-22 来源:互联网 编辑:宝哥软件园 浏览:

背景:考试系统手工生成试卷时,由于题库的表格结构不同,同一Gridview(已模板化,结构固定)无法同时显示两种不同结构的数据。GridView结构如下:

这种固定格式展示的是选择题所代表的数据结构,但由于选择题题库表的结构与论述题题库表不同,所以不能直接展示论述题所代表的数据结构。如何在这个固定的GridView中显示不同的数据?其实仔细观察,我们可以发现,它们之间唯一的区别就是“答案”一栏的数据不同。在选择题类型中,这个字段的值只是一个选项,但对于论述题类型,有6个问题,对应的答案也要有6栏。由此分析,我们可以总结出,最终要解决的问题是如何在一列中显示六列的答案。解决方案:用sql语句组合这六个字段的内容,并将它们显示为一个新字段。具体实现请看代码:复制的代码如下: #区域根据动态生成的数据库表名,选择QuestionId、ChapterId、QuestionTypeId、Point、Includes无难度等级约束。///summary ///根据动态生成的数据库表名,从表中选择QuestionId、ChapterId、QuestionTypeId、point、///度、分数、questioincontent、isvalid等内容。排除难度级别约束////summary///param name=' strdatatablename '/param///returns/returns public DataTable bind question(string str tablename,string strChapterName,string strqueueissiontypename){ try { DataTable dt=new DataTable();if(StrqueionTypename!='文章问题' strQuestionTypeName!='案例分析问题'){strsql='从' strtablename '中选择*其中[email protected]和[email protected]';} else { strsql='选择QuestionId,ChapterId,QuestionTypeId,Point,Degree,Fraction,QuestionContent,cast(answer 1 AS nvarchar(4000))cast(answer 2 AS nvarchar(4000))cast(answer 3 AS nvarchar(4000))cast(answer 4 AS nvarchar(4000))cast(answer 5 AS nvarchar(4000))cast(answer 6 AS nvarchar(4000))正确答案,IsValid from ' strTableName} //strsql='从' strTableName '中选择*其中[emailprotected]和[email protected]';SqlParameter[]paras=new SqlParameter[]{ new SqlParameter(' @ chapterid ',strChapterName),new SqlParameter(' @ questiontypeid ',strqueiontypename)};dt=sqlHelper。ExecuteQuery(strsql,段落,命令类型。文本);返回dt;} catch {抛出新异常('从动态生成的数据库表中获取QuestionId、ChapterId、QuestionTypeId和Point失败(不包括难度级别)');}最后{ sqlHelper。close();}} #endregion,其中使用cast函数的strSql语句在将多个字段合并到一个新字段中发挥作用。另外需要注意的是,如果要合并的字段内容是Text类型的,则不支持strSql语句中的符号“”,因此我们需要将它们转换为nvarchar类型。这里完美解决了多列合并的问题。

版权声明:数据表多列合并问题轻松搞定是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。