写的一段解析,设置DataGrid多层表头

 联系我们     |      2020-03-14 07:48

using System;

图片 1

/**
* The Comma Separated Value (CSV) File Format:
* 描述:分析 CSV 格式的公文。
* 由这里 的Java代码改写而来(扩充了行处理)
* 日期: 2004-10-22 14:55
*/
namespace Mitumori {
///
/// CSVUtil 用来拍卖CSV格式的文本内容成一二维数组。
///
public class CSVUtil {
private CSVUtil() {
}

图片 2图片 3        /**//// <summary>
图片 4        /// 方法编号:05
图片 5        /// 方法名称:SetMultiLayerHeader
图片 6        /// 内容摘要:创造DataGrid多层表头
图片 7        /// 算法思路:构建多个ArrayList(1卡塔尔(قطر‎来放置表征表头的ArrayList(2State of Qatar,通过这种布局来自动生成多层表头
图片 8        ///           数组2的格式必要为:"内容,[rowspan/colspan],[colspan/colspan的值],[体制哈希表]"(带[]的可选)
图片 9        ///           其中[体制哈希表]的为:key/value的应和关系,如Hashtable_style.Add("Font-size","12pt");
图片 10        /// </summary>
图片 11        public void SetMultiLayerHeader(DataGrid m_grid,
图片 12            System.Web.UI.WebControls.DataGridItemEventArgs e,
图片 13            ArrayList m_headers)
图片 14图片 15        图片 16{
图片 17            e.Item.Visible = false;
图片 18
图片 19            //管理非常境况
图片 20            if (m_grid.Controls.Count <= 0)
图片 21图片 22            图片 23{
图片 24                return;
图片 25            }
图片 26
图片 27            Table m_tb  = (Table)m_grid.Controls[0];
图片 28            int m_iTmp  = 0;
图片 29
图片 30图片 31            管理多行表头的实业#region 管理多行表头的实业
图片 32            foreach (object obj in m_headers)
图片 33图片 34            图片 35{
图片 36                DataGridItem m_dg     = new DataGridItem(0,0,ListItemType.Header);
图片 37                ArrayList m_arrHeader = (ArrayList)obj;
图片 38
图片 39                TableCell[] m_cells = new TableCell[m_arrHeader.Count];
图片 40                for (int i=0; i< m_cells.Length; i++)
图片 41图片 42                图片 43{
图片 44                    m_cells[i]      = new TableCell();
图片 45                    object[] m_arr  = (object[])m_arrHeader[i];
图片 46                    m_cells[i].Text = m_arr.GetValue(0).ToString(); //赋header文字
图片 47
图片 48                    if (m_arr.Length > 1卡塔尔 //即便有行列属性
图片 49图片 50                    图片 51{
图片 52                        if (m_arr.GetValue(1).ToString().ToLower() == "rowspan")//如果有rowspan属性
图片 53图片 54                        图片 55{
图片 56                            m_cells[i].RowSpan = Convert.ToInt32(m_arr.GetValue(2));
图片 57                        }
图片 58                        else if (m_arr.GetValue(1).ToString().ToLower() == "colspan")//如果有colspan属性
图片 59图片 60                        图片 61{
图片 62                            m_cells[i].ColumnSpan = Convert.ToInt32(m_arr.GetValue(2));
图片 63                        }
图片 64
图片 65                        //管理单元格的样式
图片 66                        if (m_arr.Length >= 4)
图片 67图片 68                        图片 69{
图片 70                            if (m_arr.GetValue(3) != null)
图片 71图片 72                            图片 73{
图片 74                                Hashtable m_hsStyles = (Hashtable)m_arr.GetValue(3);
图片 75                            
图片 76                                if (m_hsStyles.Count > 0)
图片 77图片 78                                图片 79{
图片 80                                    System.Collections.IDictionaryEnumerator m_style = m_hsStyles.GetEnumerator();
图片 81                                    for (int j = 0; j < m_hsStyles.Count; j++)
图片 82图片 83                                    图片 84{
图片 85                                        m_style.MoveNext();
图片 86                                        m_cells[i].Style.Add(m_style.Key.ToString(),m_style.Value.ToString());
图片 87                                    }
图片 88                                }
图片 89                            }
图片 90                        }//if (m_arr.Length > 4) 结束
图片 91                    }//if (m_arr.Length > 1卡塔尔(قطر‎ //若是有行列属性 结束
图片 92                }// for (int i=0; i< m_cells.Length; i++) 结束
图片 93
图片 94                //将cell加入DataGridItem
图片 95                foreach (TableCell c in m_cells)
图片 96图片 97                图片 98{
图片 99                    m_dg.Cells.Add(c);
图片 100                }
图片 101
图片 102                //将DataGridItem加入DataGrid
图片 103                if (m_grid.AllowPaging == true || m_grid.AllowCustomPaging == true卡塔尔//要是有分页
图片 104图片 105                图片 106{
图片 107                    m_tb.Rows.AddAt(m_iTmp + 1,m_dg);
图片 108                }
图片 109                else //若无分页(管理导出excel时)
图片 110图片 111                图片 112{
图片 113                    m_tb.Rows.AddAt(m_iTmp,m_dg);
图片 114                }
图片 115
图片 116                m_iTmp++;
图片 117            }//foreach (object obj in m_headers) 结束
图片 118            #endregion 管理多行表头的实体
图片 119        }

///
/// 分割 CVS 文件内容为多个二维数组。
///
/// CVS 文件内容字符串
/// 二维数组。String[line count][column count]
public static String[][] SplitCSV(String src) {
// 假使输入为空,重临 0 长度字符串数组
if (src==null || src.Length == 0) return new String[0][]{};
String st="";
System.Collections.ArrayList lines = new System.Collections.ArrayList(卡塔尔; // 行群集。其成分为行
System.Collections.ArrayList cells = new System.Collections.ArrayList(卡塔尔国; // 单元格集结。其成分为三个单元格
bool beginWithQuote = false;
int maxColumns = 0;
// 遍历字符串的字符
for (int i=0;i char ch = src[i];

行使方法:

#region CR 或者 LF
//A record separator may consist of a line feed (ASCII/LF=0x0A),
//or a carriage return and line feed pair (ASCII/CRLF=0x0D 0x0A).
// 这里本身不驾驭C揽胜极光为何不作为separator呢,在Mac OS上形似是用CHaval的吧。
// 这里我“容错”一下,CRLF、LFCR、CR、LF都作为separator
if (ch == 'r') {
#region CR
if (beginWithQuote) {
st += ch;
}
else {
if(i+1 < src.Length && src[i+1] == 'n'卡塔尔国 { // 假如连接的是LF,那么直接把LF吃掉
i++;
}

图片 120ArrayList m_headers = new ArrayList();
图片 121            ArrayList m_arrHeader1 = new ArrayList();
图片 122图片 123            m_arrHeader1.Add(new object[]图片 124{"事业部","rowspan","2"});
图片 125图片 126            m_arrHeader1.Add(new object[]图片 127{"办事处","rowspan","2"});
图片 128图片 129            m_arrHeader1.Add(new object[]图片 130{"每月公约培养练习到位名额数","colspan","12"}卡塔尔;
图片 131图片 132            m_arrHeader1.Add(new object[]图片 133{"合计","rowspan","2"});
图片 134图片 135            m_arrHeader1.Add(new object[]图片 136{"积压<br>名额数","rowspan","2"});
图片 137
图片 138            ArrayList m_arrHeader2 = new ArrayList();
图片 139            for (int i=0; i<12; i++)
图片 140图片 141            图片 142{
图片 143图片 144                m_arrHeader2.Add(new object[]图片 145{(i+1).ToString() + "月"});
图片 146            }
图片 147
图片 148            m_headers.Add(m_arrHeader1);
图片 149            m_headers.Add(m_arrHeader2);
图片 150
图片 151            this.m_BLL.SetMultiLayerHeader(this.dgrSalesList,e,m_headers);

//line = new String[cells.Count];
//System.Array.Copy (cells.ToArray(typeof(String)), line, line.Length);
//lines.Add(lineState of Qatar; // 把上一行放到行集合中去

cells.Add(st);
st = "";
beginWithQuote = false;

maxColumns = (cells.Count > maxColumns ? cells.Count : maxColumns);
lines.Add(cells);
st = "";
cells = new System.Collections.ArrayList();
}
#endregion CR
}
else if (ch == 'n') {
#region LF
if (beginWithQuote) {
st += ch;
}
else {
if(i+1 < src.Length && src[i+1] == 'r'State of Qatar { // 假设连接的是LF,那么间接把LF吃掉
i++;
}