using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using CYQ.Data.SQL;
using CYQ.Data.Tool;
using System.IO;
namespace CYQ.Data.Table
{
///
/// 头列表集合
///
public partial class MDataColumn
{
List structList;
internal MDataTable _Table;
internal MDataColumn(MDataTable table)
{
structList = new List();
_Table = table;
}
public MDataColumn()
{
structList = new List();
}
///
/// 列名是否变更
///
internal bool IsColumnNameChanged = false;
///
/// 存储列名的索引
///
private MDictionary columnIndex = new MDictionary(StringComparer.OrdinalIgnoreCase);
///
/// 添加列时,检测名称是否重复(默认为true)。
///
public bool CheckDuplicate = true;
///
/// 隐式转换列头
///
///
///
public static implicit operator MDataColumn(DataColumnCollection columns)
{
if (columns == null)
{
return null;
}
MDataColumn mColumns = new MDataColumn();
if (columns.Count > 0)
{
for (int i = 0; i < columns.Count; i++)
{
MCellStruct cellStruct = new MCellStruct(columns[i].ColumnName, DataType.GetSqlType(columns[i].DataType), columns[i].ReadOnly, columns[i].AllowDBNull, columns[i].MaxLength);
mColumns.Add(cellStruct);
}
}
return mColumns;
}
public MCellStruct this[string key]
{
get
{
int index = GetIndex(key);
if (index > -1)
{
return this[index];
}
return null;
}
}
///
/// 架构所引用的表
///
public MDataTable Table
{
get
{
return _Table;
}
}
private string _Description = string.Empty;
///
/// 表名描述
///
public string Description
{
get
{
if (string.IsNullOrEmpty(_Description) && _Table != null)
{
return _Table.Description;
}
return _Description;
}
set
{
_Description = value;
}
}
public MDataColumn Clone()
{
MDataColumn mcs = new MDataColumn();
mcs.dalType = dalType;
mcs.CheckDuplicate = false;
mcs.isViewOwner = isViewOwner;
foreach (string item in relationTables)
{
mcs.AddRelateionTableName(item);
}
for (int i = 0; i < this.Count; i++)
{
mcs.Add(this[i].Clone());
}
return mcs;
}
public bool Contains(string columnName)
{
return GetIndex(columnName) > -1;
}
///
/// 获取列所在的索引位置(若不存在返回-1)
///
public int GetIndex(string columnName)
{
if (columnIndex.Count == 0 || IsColumnNameChanged || columnIndex.Count != Count)
{
columnIndex.Clear();
for (int i = 0; i < Count; i++)
{
columnIndex.Add(this[i].ColumnName.Replace("_", ""), i);
}
IsColumnNameChanged = false;
}
if (!string.IsNullOrEmpty(columnName))
{
if (columnName.IndexOf('_') > -1)
{
columnName = columnName.Replace("_", "");//兼容映射处理
}
if (columnIndex.ContainsKey(columnName))
{
return columnIndex[columnName];
}
else
{
//开启默认前缀检测
string[] items = AppConfig.UI.AutoPrefixs.Split(',');
if (items != null && items.Length > 0)
{
foreach (string item in items)
{
columnName = columnName.StartsWith(item) ? columnName.Substring(3) : item + columnName;
if (columnIndex.ContainsKey(columnName))
{
return columnIndex[columnName];
}
}
}
}
//for (int i = 0; i < Count; i++)
//{
// if (string.Compare(this[i].ColumnName.Replace("_", ""), columnName, StringComparison.OrdinalIgnoreCase) == 0)//第三个参数用StringComparison.OrdinalIgnoreCase比用true快。
// {
// return i;
// }
//}
}
return -1;
}
///
/// 将 列 的序号或位置更改为指定的序号或位置。
///
/// 列名
/// 序号
public void SetOrdinal(string columnName, int ordinal)
{
int index = GetIndex(columnName);
if (index > -1 && index != ordinal)
{
MCellStruct mstruct = this[index];
if (_Table != null && _Table.Rows.Count > 0)
{
List