| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2287 人关注过本帖
标题:datatable行和列的问题
只看楼主 加入收藏
gaoshenghua
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2010-10-28
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:12 
datatable行和列的问题
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册

按照顺序,分1234图(从左到又)
我要从数据库调出数据,绑定到gridview里面,将多行改成一行输出,现在的问题是,可以改成行输出,可是数据库里面有多少行,gridview里面就有多少行,效果就是图2
我现在想要实现图四+三的结合,也就是一行?哪位帮我看看
程序代码:
 DataTable flattable=hii.floatta(str20);  
            DataView flatview = new DataView(flattable);
            DataView flatta = new DataView(flattable); 
            DataTable lottable =hii.lottab(flatview);
            DataTable defecttables = hii.qd();
            


            crosstable.Columns.Add("CLAIMDATETIME", typeof(string));
            crosstable.Columns.Add("LOTNO", typeof(string));
            crosstable.Columns.Add("WO", typeof(string));
            crosstable.Columns.Add("PRODUCTNO", typeof(string));
            crosstable.Columns.Add("PRODUCTNAME", typeof(string));
            crosstable.Columns.Add("P_LOT_BRANCHNO", typeof(string));
            crosstable.Columns.Add("USED_MATE01", typeof(string));
            crosstable.Columns.Add("USED_MATE02", typeof(string));
            crosstable.Columns.Add("type_04", typeof(string));
            crosstable.Columns.Add("INSPECTOR", typeof(string));
            crosstable.Columns.Add("INPUTUSER", typeof(string));
            crosstable.Columns.Add("REMARK", typeof(string));
            crosstable.Columns.Add("QTY_PROD", typeof(float));
            crosstable.Columns.Add("OKQTY_PROD", typeof(float));
            crosstable.Columns.Add("A_RATE", typeof(float));
            crosstable.Columns.Add("BAD_QTY", typeof(float));
            crosstable.Columns.Add("B_RATE", typeof(float));
            crosstable.Columns.Add("qian_qtys", typeof(float));
            crosstable.Columns.Add("qian_qty", typeof(float));
            crosstable.Columns.Add("hou_qtys", typeof(float));
            crosstable.Columns.Add("hou_qty", typeof(float));
            crosstable.Columns.Add("P_OLD_LOTNO", typeof(string));
            crosstable.Columns.Add("PROD_STATUS", typeof(string));
            crosstable.Columns.Add("SPNUM_STATUS", typeof(string));
            crosstable.Columns.Add("M2_INSPECTMETHOD", typeof(string));

          foreach (DataRow r in defecttables.Rows)
            {
               crosstable.Columns.Add(r[0].ToString(), typeof(float));           
            }
            DataColumnCollection  cols = crosstable.Columns;        
            foreach (DataRow r in lottable.Rows)
            {
                DataRow newrows = crosstable.NewRow();

                newrows["CLAIMDATETIME"] = r[0];
                newrows["LOTNO"] = r[1];
                newrows["WO"] = r[2];
                newrows["PRODUCTNO"] = r[3];
                newrows["PRODUCTNAME"] = r[4];
                newrows["P_LOT_BRANCHNO"] = r[5];
                newrows["USED_MATE01"] = r[6];
                newrows["USED_MATE02"] = r[7];
                newrows["type_04"] = r[8];
                newrows["INSPECTOR"] = r[9];
                newrows["INPUTUSER"] = r[10];
                newrows["REMARK"] = r[11];
                newrows["QTY_PROD"] = r[12];
                newrows["OKQTY_PROD"] = r[13];
                newrows["A_RATE"] = r[14];
                newrows["BAD_QTY"] = r[15];
                newrows["B_RATE"] = r[16];
                newrows["qian_qtys"] = r[17];
                newrows["qian_qty"] = r[18];
                newrows["hou_qtys"] = r[19];
                newrows["hou_qty"] = r[20];
                newrows["P_OLD_LOTNO"] = r[21];
                newrows["PROD_STATUS"] = r[22];
                newrows["SPNUM_STATUS"] = r[23];
                newrows["M2_INSPECTMETHOD"] = r[24];
                for (int i = 25; i < cols.Count; i++)
                {
                  
                    flatview.RowFilter = String.Format("lotno='{0}' and DEFECTITEM='{1}'", r[1], defecttables.Rows[i-25][0]);
                     
                    if (flatview.Count > 0)
                    {
                       newrows[cols[i]] = flatview[0]["data"];
                    }
                }
               
               crosstable.Rows.Add(newrows);           
      //   DataTable cc= crosstable.DefaultView.ToTable(true,new string []{"lotno"});              
            }
            gv1.Visible = true;
            gv1.DataSource = crosstable.DefaultView;  
            gv1.DataBind();
            t4.Text = "總共有" + crosstable.Rows.Count.ToString() + "";
搜索更多相关主题的帖子: datatable 
2010-11-28 17:32
c1_wangyf
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:7
帖 子:665
专家分:2832
注 册:2010-5-24
收藏
得分:0 
没有非常仔细看你的图,但是根据你的描述,你已经在crosstable里面把你需要输出的输出了一部分,那根据你的要求,你可以完全把需要输出的都crosstable.Columns.Add("XXX", typeof(string));完,下一步就是把数据填进去了,图3你做没有问题,下面就是把图4的数据加进去了,那么图4是在图3的基础上查询的还是和在另外一个表中查询的,查询结果无需改动还是要根据图3某列进行调整顺序啊?!

无论是那一种,我觉得就是一个把(无论选择还是无需任何动作)数据加到图3里面,那么你是用DataRow来做的,那就继续往DataRow里面加数据就行了吧?!

不知道我是否完全理解你的意思,仅是个人意见啊!!

2010-11-28 21:53
gaoshenghua
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2010-10-28
收藏
得分:0 
回复 2楼 c1_wangyf
图四和图三合为一个表,也就是一行,四的数据同样出现在图二后面,因为比较长,所以我分开截图的。
现在问题的我只要一样,而输出的时候给我输出了图二那样,输出多行,原来在数据中多行的数据是添加到了一行中,但是,
输出的行数和原来数据库中的行数是一样,很是费解!
2010-11-28 22:27
gaoshenghua
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2010-10-28
收藏
得分:0 
回复 2楼 c1_wangyf
就是这样的,这样应该很容易理解
图片附件: 游客没有浏览图片的权限,请 登录注册
2010-11-28 22:44
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2546
专家分:9359
注 册:2007-11-3
收藏
得分:0 
看了下楼主的图 第一列没有变 可以考虑行列转至

出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2010-11-29 08:13
c1_wangyf
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:7
帖 子:665
专家分:2832
注 册:2010-5-24
收藏
得分:0 
大致明白你的意思了,也就是行列转置;像你出现的那种结果有可能和foreach循环有关,建议用for循环来完成--for (int i = 0; i < datatable.Tables[0].Rows.Count; i++),这样进行到什么位置心里相对比较清楚(比较好设断点检测)--可以用messagebox来输出看看。

解决建议:

检索到所有的行列(是一个表格的形式),所需要的某一列进行转置--对行进行循环,把行里面需要的输出成需要输出的表格的列,可用columns.add,下面就是把数据加进去了,直接使用你的datarow的方法--也就是把需要的数据按行检索datatable.Tables[0].Rows[i][列号]赋值到datatable需要的.Tables[0].Rows[行号][i]

由于你的数据表太大了,建议先选择几列数据进行操作,调试成功后再弄整个数据库!!
2010-11-29 12:53
gaoshenghua
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2010-10-28
收藏
得分:0 
回复 6楼 c1_wangyf
头都大了!
2010-11-29 19:59
c1_wangyf
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:7
帖 子:665
专家分:2832
注 册:2010-5-24
收藏
得分:20 
怎么会哪,仔细想一想就明白了,其实就是行列转置的操作吗,重要的是把握住行的变化i和列的变化i是一样的,其实你自己的那个例子已经很明白了?!

2010-11-29 20:36
gaoshenghua
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2010-10-28
收藏
得分:0 
回复 8楼 c1_wangyf
现在让我不解的是,在我VS里面执行和生成是有重复行出现的,可是当我将生成后的代码放到IIS里面执行,就没有重复行了?
很奇怪,这是为什么呢?
2010-11-30 10:02
c1_wangyf
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:7
帖 子:665
专家分:2832
注 册:2010-5-24
收藏
得分:0 
看看你的生成代码bin文件夹里面的数据库,先把他删了,再执行生成的文件看看是否还有重复的?!
2010-11-30 11:16
快速回复:datatable行和列的问题
数据加载中...
 
   



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

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