DataTable多列合并问题轻松搞定

 更新时间:2013年04月03日 15:42:19   作者:  
由于题库的表结构不相同,导致同样的Gridview在显示时不能同时两种不同结构的数据,这时如何在这个固定的GridView中显示不同的数据呢,感兴趣的朋友可以看下本文的解决方法
问题背景
在做考试系统手动生成试卷部分时由于题库的表结构不相同,导致同样的Gridview(已模板化后的,其结构已固定)在显示时不能同时两种不同结构的数据。如GridView结构如下所示:
 
这种固定的格式显示的是以选择题为代表的数据结构,但是因为选择题题库表结构与论述题题库表结构不相同,所以无法直接显示以论述题为代表的数据结构。这时如何在这个固定的GridView中显示不同的数据呢?其实在仔细观察后我们可以发现他们唯一的区别在于“答案”这列的数据不同,在选择题类型中,该字段的值仅为一个选项而已,但是对于论述题等类型,其问题有六个,对应的答案也应该有六列才对。分析到此,可以总结一下,最终要解决的问题是如何将六列的答案显示在一列。

解决办法:将六个字段中的内容用sql语句实现合并,将其作为一个新的字段显示出来,具体的实现请看代码:
复制代码 代码如下:

#region 根据动态生成的数据库表名,从该表中选出QuestionId,ChapterId,QuestionTypeId,Point,不包括难度等级约束
/// <summary>
/// 根据动态生成的数据库表名,从该表中选出QuestionId,ChapterId,QuestionTypeId,Point,
/// Degree,Fraction,QuestioinContent,IsValid等内容,不包括难度等级约束
/// </summary>
/// <param name="strDataTableName"></param>
/// <returns></returns>
public DataTable BindQuestion(string strTableName,string strChapterName,string strQuestionTypeName)
{
try
{
DataTable dt = new DataTable ();
if (strQuestionTypeName != "论述题" && strQuestionTypeName != "案例分析题")
{
strsql = "select * from " + strTableName + " where ChapterId=@chapterid and QuestionTypeId=@questiontypeid";
}
else
{
strsql = "select QuestionId,ChapterId,QuestionTypeId,Point,Degree,Fraction,QuestionContent,cast(Answer1 as nvarchar(4000)) + cast(Answer2 as nvarchar(4000)) + cast(Answer3 as nvarchar(4000)) + cast(Answer4 as nvarchar(4000)) + cast(Answer5 as nvarchar(4000)) + cast(Answer6 as nvarchar(4000)) AS CorrectAnswer,IsValid from " + strTableName + " where ChapterId=@chapterid and QuestionTypeId=@questiontypeid";
}
//strsql = "select * from " + strTableName + " where ChapterId=@chapterid and QuestionTypeId=@questiontypeid";
SqlParameter[] paras = new SqlParameter[]{
new SqlParameter("@chapterid",strChapterName),
new SqlParameter("@questiontypeid",strQuestionTypeName)
};
dt = sqlHelper.ExecuteQuery(strsql,paras,CommandType.Text);
return dt;
}
catch
{
throw new Exception("从动态生成的数据库表中获取QuestionId,ChapterId,QuestionTypeId,Point失败(不包括难度等级)");
}
finally
{
sqlHelper.Close();
}
}
#endregion

其中使用cast函数的strSql语句所起到的作用就是将多个字段合并成一个新字段。另外需要注意的是strSql语句中的 “ + ” 号,如果需要合并的字段的内容是Text类型的,是不支持该符号的,这时我们需要将其转换成nvarchar类型。到此多列合并问题完美解决。

相关文章

  • ASP.NET Core MVC 中实现中英文切换的示例代码

    ASP.NET Core MVC 中实现中英文切换的示例代码

    这篇文章主要介绍了ASP.NET Core MVC 中实现中英文切换的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • VS2013安装时如何避开IE10的限制

    VS2013安装时如何避开IE10的限制

    这篇文章主要介绍了VS2013安装时如何避开IE10的限制,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • asp.net DropDownList 三级联动下拉菜单实现代码

    asp.net DropDownList 三级联动下拉菜单实现代码

    asp.net DropDownList 三级联动下拉菜单效果代码,需要的朋友可以参考下。
    2009-12-12
  • GridView_RowUpdating取不到新值的解决方法

    GridView_RowUpdating取不到新值的解决方法

    GridView_RowUpdating取不到新值的解决方法,需要的朋友可以参考一下
    2013-05-05
  • Springboot服务Docker化自动部署的实现方法

    Springboot服务Docker化自动部署的实现方法

    这篇文章主要介绍了Springboot服务Docker化自动部署的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • .net decimal保留指定的小数位数(不四舍五入)

    .net decimal保留指定的小数位数(不四舍五入)

    大家都知道decimal保留指定位数小数的时候,.NET自带的方法都是四舍五入的。那么如何让decimal保留指定位数小数的时候不四舍五入呢,下面通过这篇文中的示例代码来一起看看吧。
    2016-12-12
  • ashx文件的使用小结

    ashx文件的使用小结

    这篇文章主要是对ashx文件的使用进行了介绍。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • NET Core TagHelper实现分页标签

    NET Core TagHelper实现分页标签

    这篇文章主要介绍了NET Core TagHelper实现分页标签,讲述实现一个简单分页和总要注意步奏,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • Visual Studio 2013+OpenCV2.4.10环境搭建教程

    Visual Studio 2013+OpenCV2.4.10环境搭建教程

    这篇文章主要为大家详细介绍了Visual Studio 2013+OpenCV2.4.10环境搭建教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • .NET CORE HttpClient的使用方法

    .NET CORE HttpClient的使用方法

    这篇文章主要给大家介绍了关于.NET CORE HttpClient的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者使用.NET CORE具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-07-07

最新评论