CS 그리드 추가
DB CAFE
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
public class GridRowDomain : INotifyPropertyChanged
{
private static DataDict _dataDict = new DataDict();
private static ObservableCollection<string> _domainClassList;
public ObservableCollection<string> DomainClassList { get { return _domainClassList; } set { _domainClassList = value; NotifyPropChanged("DomainClassList"); } }
private static ObservableCollection<DomainDataType> _dataTypeList;
public ObservableCollection<DomainDataType> DataTypeList { get { return _dataTypeList; } set { _dataTypeList = value; NotifyPropChanged("DataTypeList"); } }
private ObservableCollection<DataDict._StdTerm> _parsedResultList;
public ObservableCollection<DataDict._StdTerm> ParsedResultList
{
get { return _parsedResultList; }
set
{
_parsedResultList = value;
NotifyPropChanged("ParsedResultList");
}
}
//내부 보유 요청번호
private int _reqNo; public int ReqNo { get { return _reqNo; } set { _reqNo = value; } }
private bool _checked = false; public bool Checked {get { return _checked; } set { _checked = value; NotifyPropChanged("Checked"); } }
private string _statCd; public string Status { get { return _statCd; } set { _statCd = value; NotifyPropChanged("Status"); } }
private string _parseResult; private string ParseResult { get { return _parseResult; } set { _parseResult = value; ; NotifyPropChanged("CheckResult"); } }
private string _lengthOption;
private bool IsNullOrEmpty(string str) { return (str == null || str == ""); }
public string CheckResult
{
get
{
string strResult = "";
//ParseResult = 정상,
if(! (this.ParseResult.Equals("정상")) )
{
strResult = this.ParseResult;
}
else if(IsNullOrEmpty(this.DomainClass))
{
strResult = "미입력(유형)";
}
else if(IsNullOrEmpty(this.DataType))
{
strResult = "미입력(데이터타입)";
}
else if(this._lengthOption =="Y" && IsNullOrEmpty(this.DataLength))
{
strResult = "미입력(데이터길이)";
}
else if(IsNullOrEmpty(this.Definition))
{
strResult = "미입력(정의)";
}
else if (this.Status.Contains("중복"))
{
strResult = "중복";
}
else
{
strResult = this.ParseResult;
}
return strResult;
}
}
private string _infoTypeName; public string InfoTypeName { get { return _infoTypeName; } set { this._infoTypeName = value; NotifyPropChanged("InfoTypeName"); } }
private string _domainName;
public string DomainName
{
get { return _domainName; }
set
{
_domainName = value;
//용어가 삭제 또는 공백인 경우
if(_domainName == null || _domainName=="")
{
//_parsedTermList.Clear();
this.ReqId = "";
this.Status = "신청전";
this.ParseResult = "";
this.ParsedVocas = "";
this.ParsedResultList.Clear();
this.InfoTypeName = "";
}
else
{
_domainName = _domainName.ToUpper();
List<DataDict._StdTerm> parsedList = _dataDict.GetParsedTermList(_domainName, false);
this.ParsedResultList.Clear();
this.ParsedResultList = new ObservableCollection<DataDict._StdTerm>(parsedList);
//terms.ForEach(t => _parsedTermList.Add(t.ParsedTerm));
if (parsedList.Count > 0)
{
this.ParseResult = parsedList[0].CheckResult;
//선택이 필요한 경우 단어분해를 공백으로
this.ParsedVocas = parsedList.Count == 1 ? parsedList[0].ParsedTerm : ""; // _parsedTermList[0];
}
try
{
this.DomainClass = this.DomainClassList.First(item => item.Equals(DomainName.Substring(DomainName.Length - item.Length)));
}
catch(Exception ex)
{
Debug.WriteLine(ex.Message);
}
this.InfoTypeName = this.DomainName + "_" + this.DataTypeAbbr + this.DataLength;
//편집으로 생성된 경우 중복 검사
//Debug.WriteLine(this.Status);
if (this.Status == "신청전" || this.Status == "")
{
GridRowDomain findDomain = SearchDomain(this._domainName);
if (findDomain != null)
{
this.ParsedVocas = findDomain.ParsedVocas;
//this.ParsedResultList.Clear();
this.InfoTypeName = findDomain.InfoTypeName;
this.DomainClass = findDomain.DomainClass;
this.DataType = findDomain.DataType;
this.DataLength = findDomain.DataLength;
this.EngName = findDomain.EngName;
this.Definition = findDomain.Definition;
if (findDomain.ReqNo == 1)
{
this.Status = "중복(표준)";
MessageBox.Show("표준에 존재합니다.");
}
else
{
this.Status = "중복(신청)";
MessageBox.Show("신청내역에 존재합니다.");
}
//return; //인포타입 다른 것을 등록할 수 있음... 경고만 표시
}
}
}
this.NotifyPropChanged("DomainName");
}
}
public string _domainClass; public string DomainClass { get { return _domainClass; } set { _domainClass = value; NotifyPropChanged("DomainClass"); } }
private string _parsedVocas;
public string ParsedVocas
{
get { return _parsedVocas; }
set
{
_parsedVocas = value;
NotifyPropChanged("ParsedVocas");
if (_parsedVocas == null || _parsedVocas.Length < 1)
{
this.EngName = "";
//this.Definition = "";
}
else
{
try
{
DataDict._StdTerm parsedResult = ParsedResultList.First(t => t.ParsedTerm.Equals(_parsedVocas));
if (parsedResult != null)
{
this.ParseResult = parsedResult.CheckResult;
this.EngName = parsedResult.EngTermName;
if (this.ParseResult.Equals("[선택필요]")) this.ParseResult = "정상";
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, "ParsedVocas", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
}
}
private string _engName; public string EngName { get { return _engName; } set { _engName = value; NotifyPropChanged("EngName"); } }
private string _dataType;
public string DataType
{
get { return _dataType; }
set
{
_dataType = value;
DomainDataType dType = this.DataTypeList.First(item => item.DataType.Equals(_dataType));
_dataTypeAbbr = dType.AbbrName;
_lengthOption = dType.LengthOption;
if (this._lengthOption == "N")
{
this.DataLength = "";
}
InfoTypeName = DomainName + "_" + DataTypeAbbr + DataLength;
NotifyPropChanged("DataType");
NotifyPropChanged("DataTypeLength");
}
}
private string _dataTypeAbbr; public string DataTypeAbbr { get { return _dataTypeAbbr; } }
private string _dataLength;
public string DataLength
{
get { return _dataLength; }
set
{
if(this._lengthOption=="Y")
{
_dataLength = value;
}
else
{
_dataLength = "";
}
InfoTypeName = DomainName + "_" + DataTypeAbbr + DataLength;
NotifyPropChanged("DataLength");
NotifyPropChanged("DataTypeLength");
}
}
public string DataTypeLength
{
get
{
string typeLen = this._dataType;
//if (this._dataLength != null && this._dataLength != "") typeLen += "(" + this._dataLength + ")";
if (this._lengthOption=="Y") typeLen += "(" + this._dataLength + ")";
return typeLen;
}
}
public string DataTypeLengthP
{
get
{
return DataTypeLength.Replace("VARCHAR(", "VARCHAR2(");
}
}
private string _definition; public string Definition { get { return _definition; } set { _definition = value; NotifyPropChanged("Definition"); } }
public string ReqId { get; set; }
public DateTime ReqDt { get; set; }
public string StatDt { get; set; }
private string _statRmk; public string StatRmk { get { return _statRmk; } set { _statRmk = value; NotifyPropChanged("StatRmk"); } }
public GridRowDomain()
{
//_parsedTermList_old = new ObservableCollection<string>();
ParsedResultList = new ObservableCollection<DataDict._StdTerm>();
_statCd = "신청전";
_parseResult = "";
this.ReqDt = DateTime.Now;
this.InitComboDataTypeList();
this.InitComboDomainClassList();
}
public GridRowDomain(int reqNo, string infotypeName, string domainName
, string domainClass, string engName, string parsedVocas
, string dataType, string dataLength, string definition
, string reqId, DateTime reqDt, string statCd, string statRmk, string statDt
, string checkReault = "정상") : this()
{
this.ReqNo = reqNo;
this.Status = statCd; // 상태값을 우선 변경해야 명칭 입력/변경에 대한 처리시 참조됨
this.ParseResult = checkReault;
this._domainName = domainName;
this._domainClass = domainClass;
this._engName = engName;
this._parsedVocas = parsedVocas;
this.ParsedResultList.Add(new DataDict._StdTerm(domainName, parsedVocas));
this._infoTypeName = infotypeName;
this._dataType = dataType;
this._dataLength = dataLength;
if(dataLength != null && dataLength.Length > 0)
{
this._lengthOption = "Y";
}
this._definition = definition;
this.ReqId = reqId;
this.ReqDt = reqDt;
this.StatDt = statDt;
this.StatRmk = statRmk;
}
private void InitComboDataTypeList()
{
if(this.DataTypeList == null)
{
this.DataTypeList = new ObservableCollection<DomainDataType>();
string strSQL = "select cm_cd, cd_nm" +
" , att1 AbbrName" +
" , att2 LengthOption " +
" from tb_dm_cm_cd where grp_cd = 'DOMAIN_DATATYPE' and use_yn = 'Y' order by ord_no ";
OleDbCommand dbCmd = new OleDbCommand(strSQL, _dataDict.GetConnection());
OleDbDataReader dbReader = dbCmd.ExecuteReader();
if (dbReader.HasRows)
{
while (dbReader.Read())
{
DomainDataType item = new DomainDataType();
item.DataType = dbReader.GetString(0);
item.AbbrName = dbReader.GetString(2);
item.LengthOption = dbReader.GetString(3);
this.DataTypeList.Add(item);
}
}
dbReader.Close();
dbCmd.Dispose();
}
}
private void InitComboDomainClassList()
{
if (this.DomainClassList == null)
{
this.DomainClassList = new ObservableCollection<string>();
string strSQL = "select cm_cd, cd_nm, att1 from tb_dm_cm_cd where grp_cd = 'DOMAIN_CLASS' and use_yn = 'Y' order by ord_no ";
OleDbCommand dbCmd = new OleDbCommand(strSQL, _dataDict.GetConnection());
OleDbDataReader dbReader = dbCmd.ExecuteReader();
if (dbReader.HasRows)
{
while (dbReader.Read())
{
this.DomainClassList.Add(dbReader.GetString(0));
}
}
dbReader.Close();
dbCmd.Dispose();
}
}
public GridRowDomain SearchDomain(string domainName)
{
GridRowDomain domain = null;
string strSQL =
"select 1 Location, a.i_name, a.d_name, a.d_class, a.d_ename, a.d_parsed, a.d_dtype, a.d_dlen, a.d_ldtype_len, a.d_desc " +
" , a.modfr, a.moddt " +
" from dm_std_domain a " +
" where a.d_name = :domain1 " +
"union all " +
"select 2 Location, a.i_name, a.d_name, a.d_class, a.d_ename, a.d_parsed, a.d_dtype, a.d_dlen, a.d_ldtype_len, a.d_desc " +
" , a.req_id, a.req_dt " +
" from tb_dm_req_domain a " +
" where a.d_name = :domain2 and stat_cd in ('신청','검토')" +
" order by 1"
;
OleDbCommand dbCmd = new OleDbCommand(strSQL, _dataDict.GetConnection());
dbCmd.Parameters.Add(":domain1", OleDbType.VarChar).Value = domainName;
dbCmd.Parameters.Add(":domain2", OleDbType.VarChar).Value = domainName;
//dbCmd.Parameters[":termName"].Value = termName;
OleDbDataReader dbReader = dbCmd.ExecuteReader();
if (dbReader.HasRows)
{
if (dbReader.Read())
{
//string term, string engTerm, string parsedTerm, string domainName, string infotypeName, string dataTypeLen
domain = new GridRowDomain(
(int)dbReader.GetDecimal(0), /* 테이블 구분 번호 1.표준, 2.신청 */
dbReader.GetString(1), /* i_name */
dbReader.GetString(2), /* d_name */
dbReader.GetString(3), /* d_class */
dbReader.GetString(4), /* d_ename */
dbReader.GetString(5), /* d_parsed */
dbReader.GetString(6), /* d_dtype */
(dbReader.IsDBNull(7) ? "": dbReader.GetString(7)), /* d_dlen */
/* dbReader.GetString(8), // d_ldtype_len */
dbReader.GetString(9), /* definition(d_desc) */
dbReader.GetString(10), /* reqid */
dbReader.GetDateTime(11), /* modify datetime */
"", "", "", "중복신청" /* statcd, statRmk, statDt, checkResult */
);
}
}
dbReader.Close();
dbCmd.Dispose();
return domain;
}
#region INotifyPropertyChanged Members 구현
/// <summary>
/// INotifyPropertyChanged 인터페이스의 PropertyChanged 이벤트 구현
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropChanged(string prop)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(prop));
if(prop.Equals("ParseResult") || prop.Equals("DomainClass") || prop.Equals("DataType") || prop.Equals("DataLength") || prop.Equals("Definition"))
{
PropertyChanged(this, new PropertyChangedEventArgs("CheckResult"));
}
}
}
#endregion
}