正在做一数据分析软件,遇到关于DataGridView的行列转置的问题(附代码):
以下的解决方案不太理想,主要是效率问题.遇到超过300行的表转置过来速度就牛慢.
而令我感到奇怪的是,同样的方法,在程序启动时调用速度却很快.而运行过程中,再点工具栏按钮进行转置却很慢.
而令我感到奇怪的是,同样的方法,在程序启动时调用速度却很快.而运行过程中,再点工具栏按钮进行转置却很慢.
//横向显示表格
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];
}
}
}
...全文
相关推荐
C#实现DataGridView控件行列互换的方法
主要介绍了C#实现DataGridView控件行列互换的方法,涉及C#中DataGridView控件元素遍历与添加操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
Vb.net下的DataGridView的数据合并、多行列头
用VS2005做的一个继承DataGridview的类,能够实现多行列头,和列的数据合并,已经实现,还有些不是很完善的地方。
DataGridView行列操作
DataGridView行列操作
C# DatagridView 多行列头的自定义控件
在程序中的数据显示很大的可能需要到复合表头,但是在VS中没有自动的复合表头控件,写的一个复合表头的自定义控件,3个版本可以体会一下
C#清空DataGridView代码
C#清空DataGridView代码 C#清空DataGridView代码


