标题:请教高手关于出现某列不属于表的现象
只看楼主
binghe6610
Rank: 2
等 级:论坛游民
帖 子:273
专家分:61
注 册:2009-2-23
结帖率:86.67%
已结贴  问题点数:20 回复次数:10 
请教高手关于出现某列不属于表的现象
我的存储过程中动态创建的SQL语句查询出一个表,这个表中有一个列名为空,但是有数据都是0
填充到datatable表中后,想加一个合计行,每行循环加时出现‘“”列不属于表’
就是列名为空的列不属于表。

经过考虑,我在填充后设置空名的列名,添加了一个列名,结果是这个列后面的列又不属于表了。
不解1
请高手赐教
搜索更多相关主题的帖子: 现象 
2010-10-30 11:54
binghe6610
Rank: 2
等 级:论坛游民
帖 子:273
专家分:61
注 册:2009-2-23
得分:0 
自己顶一下
2010-10-30 12:00
binghe6610
Rank: 2
等 级:论坛游民
帖 子:273
专家分:61
注 册:2009-2-23
得分:0 
顶一下
2010-10-30 14:53
不说也罢
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:39
帖 子:1481
专家分:4989
注 册:2007-10-7
得分:7 
表中有一个列名为空??

===================================================
讨厌C#的行尾的小尾巴;和一对大括号{ }
===================================================
2010-10-30 16:12
不说也罢
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:39
帖 子:1481
专家分:4989
注 册:2007-10-7
得分:0 
楼主不妨把代码贴出来,标明错误在哪一行

===================================================
讨厌C#的行尾的小尾巴;和一对大括号{ }
===================================================
2010-10-30 16:22
binghe6610
Rank: 2
等 级:论坛游民
帖 子:273
专家分:61
注 册:2009-2-23
得分:0 
好了,自己解决了。只要想办法总是能解决的。
我把列名通过循环重新命名了,搞定。
列名为空是因为在存储过程中使用了动态语句组合,也就动态的行转列。
输出表中有动态创建的列,有固定创建的列,问题就出现在动态列中。
列名为空是因为我的表结构原因,行业比较特殊,表结构都是自己摸索出来的,基本上还是满足行业需求的。
列名重新命名也不麻烦。
谢谢各位回复
2010-10-30 16:53
不说也罢
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:39
帖 子:1481
专家分:4989
注 册:2007-10-7
得分:0 
楼主能自我解决问题是最好的了,不过贴子既然发过,把解决的方法、思路和经验拿出来,供大家参考才是最好,供论坛网友共同进步呀。

我写了一个合计DataGridView1列的例子,楼主不妨指点一二。窗体中只需要添加一个DataGridView1即可

程序代码:

Public Class Form1
    Dim dt As System.Data.DataTable = New System.Data.DataTable
    Function CreateDataSource() As ICollection
        Dim dr As System.Data.DataRow
        dt.Columns.Add(New System.Data.DataColumn("学生班级", GetType(System.String)))
        dt.Columns.Add(New System.Data.DataColumn("学生姓名", GetType(System.String)))
        dt.Columns.Add(New System.Data.DataColumn("语文", GetType(System.Decimal)))
        dt.Columns.Add(New System.Data.DataColumn("数学", GetType(System.Decimal)))
        dt.Columns.Add(New System.Data.DataColumn("英语", GetType(System.Decimal)))
        dt.Columns.Add(New System.Data.DataColumn("计算机", GetType(System.Decimal)))
        Dim i As Integer = 0
        While i < 5
            Dim rd As System.Random = New System.Random(Environment.TickCount * i)

            dr = dt.NewRow
            dr(0) = "BCCN论坛" + i.ToString
            dr(1) = "不说也罢" + i.ToString
            dr(2) = System.Math.Round(rd.NextDouble * 100, 2)
            dr(3) = System.Math.Round(rd.NextDouble * 100, 2)
            dr(4) = System.Math.Round(rd.NextDouble * 100, 2)
            dr(5) = System.Math.Round(rd.NextDouble * 100, 2)
            dt.Rows.Add(dr)
            System.Math.Min(System.Threading.Interlocked.Increment(i), i - 1)
        End While
        Dim dv As System.Data.DataView = New System.Data.DataView(dt)
        Total()
        Return dv
        dt.Dispose()

    End Function

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        DataGridView1.DataSource = CreateDataSource()
        DataGridView1.AllowUserToAddRows = False
    End Sub

    Private Sub Total()
        Dim dtRow As DataRow = dt.NewRow
        Dim inttotal(4) As ArrayList
        For i = 2 To 5
            dtRow(i) = CDbl(("SUM(" & dt.Columns(i).ColumnName & ")", "1=1"))
        Next
        dt.Rows.Add(dtRow)
    End Sub

End Class




===================================================
讨厌C#的行尾的小尾巴;和一对大括号{ }
===================================================
2010-10-30 17:15
sywzs
Rank: 10Rank: 10Rank: 10
来 自:辽宁
等 级:贵宾
威 望:15
帖 子:508
专家分:1725
注 册:2009-5-13
得分:7 
不能只求别认为自己解决问题,既然问题自己解决了,那么,就应该把解决的思路、方法、过程写出来供其他网友参考、学习,大家一起共同交流、共同提高、共同进步。
2010-10-31 06:34
binghe6610
Rank: 2
等 级:论坛游民
帖 子:273
专家分:61
注 册:2009-2-23
得分:0 
其实我是个业余编程爱好者,没有太多的经验,只能是遇到什么问题解决什么问题。
这个问题的解决也是出于偶然,谈谈我解决的思路吧,供大家参考
首先是我创建了一个存储过程,
目的是在同一个表中某列的值是不确定的,但是要求把这个不确定值的列里所有行的值转为列来显示,同时根据列合计数据
当然除了这个列以外还有别的列是固定的。
所以经过研究创建了一个动态生成SQL语句的存储过程,这是个报表查询,考虑到将来的数据可能会很多,就使用了存储过程以提高查询效率。

在查询分析器中测试这个存储过程,发现有一个列的列名是空的,经过分析数据库表的结构,这样也是合理的,这个列名为空的列没有用处,也不影响其他数据的计算
于是就在中使用了这个存储过程
是报表就需要在最后有一个合计行,本人常用的方法是用循环计算合计,然后ADD一行到datatbale中(很多人要求最后的合计行固定显示,不随垂直滚动条移动,本人认为没有必要,)增加了导出EXCEL,让用户有更多的选择。
2010-10-31 10:12
binghe6610
Rank: 2
等 级:论坛游民
帖 子:273
专家分:61
注 册:2009-2-23
得分:0 
这次用循环合计时就出现了错误:“”列不属于表
还是第一次遇到这样的问题。
“”列之前有一个固定列,看来固定列是可以正常合计计算的,“”列还是动态行转列的第一列,所以问题应该就在动态行转列这里。
难道是列名为“”的原因?我在填充到datatbale表中后,把datatbale表的这个“”列重新命名为“没用”
测试,这个“没用”列后面的列(有列名)又不属于表了。
我想是不是应该把动态生成的列名全部重新命名一次呢?但是问题是既然是动态生成的,就不确定到底有几列动态生成的列,而且动态列后面还有固定的列。
干脆我就把所有的列名全部重新命名,为了不影响在datagridview中显示的效果,我把所有列名全部在原来名字后面加空格
新列名=原列名&""  这样其实还是显示的原列名

测试通过
2010-10-31 10:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-324454-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.183832 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved