DataTable列刷新的问题

ice2flash 2012-08-16 06:22:50
C#新手,做一个数据库程序,需要动态增减在dataGridView显示的列。设计使用CheckBox来选择是否显示这一列。遇到一个问题,比如最开始,第一列显示是姓名,第二列是出生日期。SQL语言是"Select 姓名,出生日期"。此后,通过CheckBox选择增加显示性别,SQL变成"Select 姓名,性别,出生日期"。但是在显示的时候,“性别”这一列没有出现在“姓名”列后面,而是在“出生日期”列之后,变成第三列。
在同时显示此三列的情况下,如果想不再显示“出生日期”列,SQL语言变成“Select 姓名,性别”,显示结果是,“出生日期”列仍然存在,只不过已经没有内容了。
通过监测,我发现在DataSet.Clear后,使用SQLAdapter对DataTable进行操作的时候,如果进行增列操作,DataTable将把增加的这一列直接放到最后,如果进行去除列操作的话,在Datatable中这一列仍然存在。
不知道我的表述是否清楚,各位高手看看如何解决。
...全文
272 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
stiff_neck 2012-08-17
  • 打赏
  • 举报
回复
如果把显示和导出分开做可能还简单点,显示的时候把所有需要的字段都取到,checkbox的判断只需要设置datagridview,导出的话,再根据checkbox,重新new一个datatable
lbc2247117 2012-08-17
  • 打赏
  • 举报
回复
new 一个datatable,在绑定
ice2flash 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]
用户难道看到的不是datagridview而是datatable?
[/Quote]
如果在DataGridView中隐藏,用户确实看不到。但是如果导出到文件,这一列却仍然存在。
stiff_neck 2012-08-17
  • 打赏
  • 举报
回复
在条件语句里加上对datagridview的列设置,check显示,否则隐藏,如果这不是楼主想要的效果,那只能说楼主的想法我理解不能了
stiff_neck 2012-08-17
  • 打赏
  • 举报
回复
用户难道看到的不是datagridview而是datatable?
ice2flash 2012-08-17
  • 打赏
  • 举报
回复
我把源代码写出来,大家看看
string XBString,SRString,NLString,XLString,GZString,ZCString,XKString,XDString,DHString,YXString,DWString;
if (checkBox1.Checked == true)
XBString = ",性别";
else
XBString = string.Empty;
if (checkBox2.Checked == true)
SRString = ",出生日期";
else
SRString = string.Empty;
if (checkBox4.Checked == true)
XLString = ",学历";
else
XLString = string.Empty;
if (checkBox6.Checked == true)
GZString = ",工作日期";
else
GZString = string.Empty;
if (checkBox5.Checked == true)
ZCString = ",职称";
else
ZCString = string.Empty;
if (checkBox7.Checked == true)
XKString = ",任教学科";
else
XKString = string.Empty;
if (checkBox8.Checked == true)
XDString = ",任教学段";
else
XDString = string.Empty;
if (checkBox9.Checked == true)
DHString = ",电话";
else
DHString = string.Empty;
if (checkBox10.Checked == true)
YXString = ",邮箱";
else
YXString = string.Empty;
if (checkBox11.Checked == true)
DWString = ",工作单位";
else
DWString = string.Empty;

ShowAdapter = new SqlDataAdapter("select 姓名,教育证号"+ XBString+SRString+XLString+GZString+ZCString+XKString+XDString+DHString+YXString+DWString+" from Teacher_Info"+iString , MyConnection);

ShowDs.Clear();
ShowAdapter.Fill(ShowDs, "ShowTeacher");
ShowTable = ShowDs.Tables["ShowTeacher"];
dataGridView1.DataSource = ShowTable;
ice2flash 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
使你获取datatable的问题,"如果进行增列操作",直接根据sql语句重新获取datatabel就行了
[/Quote]
重新获取DataTable也不行,原来DataTable中的列结构没有被清除
ice2flash 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
为什么要刷新datatable,搞不懂楼主,如果你的sql语句里去掉了某一字段,再重新绑定datatable时,把datagridview里面的该列隐藏掉不就行了么
[/Quote]
楼上你试试就知道了,隐藏该列只是不在DataGridView中显示,但在DataTable中此列仍然存在
Forrest23 2012-08-17
  • 打赏
  • 举报
回复
使你获取datatable的问题,"如果进行增列操作",直接根据sql语句重新获取datatabel就行了
stiff_neck 2012-08-17
  • 打赏
  • 举报
回复
为什么要刷新datatable,搞不懂楼主,如果你的sql语句里去掉了某一字段,再重新绑定datatable时,把datagridview里面的该列隐藏掉不就行了么
ice2flash 2012-08-17
  • 打赏
  • 举报
回复
我自己找到解决方法了。使用DataTable.Columns.Clear()方法可以清除DataTable的列信息。
不过需要把DataTable定义为Private,不能在事件中定义DataTable。在事件中定义的DataTable使用DataTable.Columns.Clear()方法也无法清除DataTable的列信息。
ice2flash 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
呵呵,是这样的。
你在第二次绑定之前
加上:dataGridView1.DataSource = null;

是好用了。
[/Quote]
你所说的二次绑定之前是不是这样
先dataGridView1.DataSource = null;
然后dataGridView1.DataSource = DataTable;
如果是这样,我发现还是不能刷新DataTable。
cry222222 2012-08-17
  • 打赏
  • 举报
回复
楼上正解!
shizhu820228 2012-08-17
  • 打赏
  • 举报
回复
呵呵,是这样的。
你在第二次绑定之前
加上:dataGridView1.DataSource = null;

是好用了。
ice2flash 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
引用 4 楼 的回复:
难道无法刷新DataTable的表结构吗?

仅仅隐藏列没必要刷新DataTable再从数据库里查询了,直接操作datagridview。
[/Quote]
我不是打算隐藏列,在SQL语句中,根本就不再有这一项目,但是在DataTable中,仍然有这一列存在。我是想如何刷新Datatable
junjieok 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
难道无法刷新DataTable的表结构吗?
[/Quote]
仅仅隐藏列没必要刷新DataTable再从数据库里查询了,直接操作datagridview。
ice2flash 2012-08-17
  • 打赏
  • 举报
回复
难道无法刷新DataTable的表结构吗?
jeason_jun 2012-08-16
  • 打赏
  • 举报
回复
固定数据源表 设置dataGridView1.Columns["列名"].Visible
ice2flash 2012-08-16
  • 打赏
  • 举报
回复
应该不会这样吧
stiff_neck 2012-08-16
  • 打赏
  • 举报
回复
直接操作datagridview就好了,把性别列放在姓名列后面,根据条件设置隐藏还是显示

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧