首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

正在做一数据分析软件,遇到关于DataGridView的行列转置的有关问题(附代码)

2012-05-22 
正在做一数据分析软件,遇到关于DataGridView的行列转置的问题(附代码):以下的解决方案不太理想,主要是效率

正在做一数据分析软件,遇到关于DataGridView的行列转置的问题(附代码):
以下的解决方案不太理想,主要是效率问题.遇到超过300行的表转置过来速度就牛慢.
而令我感到奇怪的是,同样的方法,在程序启动时调用速度却很快.而运行过程中,再点工具栏按钮进行转置却很慢.

C# code
                //横向显示表格       private void RotateDGV(DataTable dt , DataGridView DgvData)      {                DgvData.Rows.Clear();                DgvData.Columns.Clear();                                //添加列到DgvData                  DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn();                column.HeaderText = column.Name = dt.Columns[0].ColumnName;                column.FillWeight = 10;                DgvData.Columns.Add(column);                DataGridViewTextBoxColumn[] columns = new DataGridViewTextBoxColumn[dt.Rows.Count];                for (int dtrow = 0; dtrow < dt.Rows.Count; dtrow++)                {                    column = new DataGridViewTextBoxColumn();                    object o = dt.Rows[dtrow][0];                    if (o.GetType().Name == "DateTime")                    {                        column.HeaderText = column.Name = ((DateTime)o).ToString("yyyy-MM");                    }                    else                        column.HeaderText = o.ToString();                    columns[dtrow] = column;                    column.FillWeight = 10;                }                DgvData.Columns.AddRange(columns); ///在运行中强行中断, 光标总是停留在这一行.                //添加数据                  DgvData.Rows.Add(dt.Columns.Count - 1);                for (int dtcol = 1; dtcol < dt.Columns.Count; dtcol++)                {                    DgvData[0, dtcol - 1].Value = dt.Columns[dtcol].ColumnName;                    string colType = DgvData[0, dtcol - 1].Value.GetType().Name;                    DgvData[0, dtcol - 1].Style.Alignment = colType                        == "String" ? DataGridViewContentAlignment.MiddleLeft : DataGridViewContentAlignment.MiddleCenter;                    for (int dtrow = 0; dtrow < dt.Rows.Count; dtrow++)                    {                        DgvData[dtrow + 1, dtcol - 1].Value = dt.Rows[dtrow][dtcol];                    }                }        }


[解决办法]
路过,帮顶
[解决办法]
路过,帮顶
[解决办法]
帮顶一下
[解决办法]
结果是对的么?
[解决办法]
UP
[解决办法]
我觉得你可以用 SQL 行转列
[解决办法]
超过300行转换成列好像有点过分了吧,我还没有见过这么多列的表,一定要转置么?
你可以试试,先把上边注释掉,不转换第一行的时间,进行下边的转换,我估计应该也会很卡
另外你说启动时不卡,我也不明白,只能说你点按钮进行转换的时候应该另起一个线程,不要在主线程里面做,还有最好加一个等待的界面,因为这个转换肯定是很耗时的
[解决办法]
帮顶
[解决办法]
可能循环太多了

热点排行