//──────────────────────────────────────── #endregion #region 判定 //──────────────────────────────────────── public override bool Equals(System.Object obj) { // 引数がヌルの場合は、偽です。 if (obj == null) { return(false); } // 型が違えば偽です。 BoolCellImpl obj2 = obj as BoolCellImpl; if (null != obj2) { // 空欄同士なら真です。 if (this.IsSpaces() && obj2.IsSpaces()) { return(true); } if (this.IsValidated && obj2.IsValidated) { // お互いがブール値なら return(this.isValue_Bool == obj2.isValue_Bool); } else { // どちらか片方でも非ブール値なら return(this.Text == obj2.Text); } } if (obj is bool) { bool bValue = (bool)obj; // このオブジェクトが空欄なら偽。 if (this.IsSpaces()) { return(false); } // このオブジェクトが非bool値なら偽。 if (!this.IsValidated) { return(false); } // bool値で比較 return(this.isValue_Bool == bValue); } return(false); }
//──────────────────────────────────────── public Cell NewField(string nodeConfigtree, Log_Reports log_Reports) { Log_Method log_Method = new Log_MethodImpl(0); log_Method.BeginMethod(Info_Table.Name_Library, this, "NewField", log_Reports); Cell result; switch (this.Type_Field) { case EnumTypeFielddef.String: { result = new StringCellImpl(nodeConfigtree); } break; case EnumTypeFielddef.Int: { result = new IntCellImpl(nodeConfigtree); } break; case EnumTypeFielddef.Bool: { result = new BoolCellImpl(nodeConfigtree); } break; default: { // 未該当 result = null; goto gt_Error_Unspported; } } goto gt_EndMethod; // #region 異常系 //──────────────────────────────────────── gt_Error_Unspported: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー464!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("フィールド定義を元にして、フィールド値を用意しようとしましたが、未定義のフィールド型でした。"); s.Newline(); s.Append("this.Type.ToString()=["); s.Append(this.ToString_Type()); s.Append("]"); s.Newline(); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // gt_EndMethod: log_Method.EndMethod(log_Reports); return(result); }
//──────────────────────────────────────── static public bool TryParse( object data, out bool isValue_Out, EnumOperationIfErrorvalue enumCellDataErrorSupport, object altValue, Log_Reports log_Reports ) { Log_Method log_Method = new Log_MethodImpl(0); log_Method.BeginMethod(Info_Table.Name_Library, "XenonValue_BoolImpl", "TryParse", log_Reports); bool bResult; BoolCellImpl err_BoolCellData; if (data is Boolean) { isValue_Out = (bool)data; bResult = true; } else if (data is BoolCellImpl) { BoolCellImpl boolCellData = (BoolCellImpl)data; if (boolCellData.IsSpaces()) { // 空白の場合 if (EnumOperationIfErrorvalue.Spaces_To_Alt_Value == enumCellDataErrorSupport) { if (altValue is bool) { isValue_Out = (bool)altValue; bResult = true; } else { // エラー isValue_Out = false;//ゴミ値 bResult = false; err_BoolCellData = boolCellData; goto gt_Error_AnotherType; } } else { // エラー isValue_Out = false;//ゴミ値 bResult = false; err_BoolCellData = boolCellData; goto gt_Error_EmptyString; } } else if (!boolCellData.isValidated) { // エラー(変換に失敗した場合) isValue_Out = false;//ゴミ値 bResult = false; err_BoolCellData = boolCellData; goto gt_Error_Invalid; } else { isValue_Out = boolCellData.GetBool(); bResult = true; } } else if (null == data) { // エラー isValue_Out = false;//ゴミ値 bResult = false; goto gt_Error_Null; } else if (!(data is Cell)) { // エラー isValue_Out = false;//ゴミ値 bResult = false; goto gt_Error_AnotherTypeData; } else { // エラー isValue_Out = false;//ゴミ値 bResult = false; goto gt_Error_Class; } // 正常 goto gt_EndMethod; // // #region 異常系 //──────────────────────────────────────── gt_Error_AnotherType: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー543!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append(" altValue引数には、bool型の値を指定してください。"); s.Append(Environment.NewLine); s.Append(" boolセル値=["); s.Append(err_BoolCellData.Text); s.Append("]"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); s.Append(" 問題箇所ヒント:"); err_BoolCellData.ToText_Locationbreadcrumbs(s); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_EmptyString: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー531!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append(" セルに、bool型の値を入れてください。空欄にしないでください。"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); s.Append(" boolセル値=["); s.Append(err_BoolCellData.Text); s.Append("]"); // // ヒント err_BoolCellData.ToText_Locationbreadcrumbs(s); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_Invalid: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー112!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append(" bool型に変換できませんでした。["); s.Append(err_BoolCellData.Text); s.Append("]"); // // ヒント err_BoolCellData.ToText_Locationbreadcrumbs(s); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_Null: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー231!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append(" 指定の引数dataに、BoolCellData型の値を指定してください。空っぽでした。"); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_AnotherTypeData: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー332!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append(" bool型のデータを入れるところで、"); s.Append(Environment.NewLine); s.Append(" 別の型[" + data.GetType().Name + "]でした。"); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_Class: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー233!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("指定の引数の値["); s.Append(((Cell)data).Text); s.Append("]は、BoolCellData型ではありませんでした。"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); s.Append(" 型=["); s.Append(data.GetType().Name); s.Append("]"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // // gt_EndMethod: log_Method.EndMethod(log_Reports); return(bResult); }
//──────────────────────────────────────── /// <summary> /// O_TableImpl#AddRecordListで使います。 /// </summary> /// <param name="columnIndex"></param> /// <param name="value"></param> /// <param name="oTable"></param> /// <param name="log_Reports"></param> /// <returns></returns> public static Cell ConfigurationTo_Field( int index_Column, string value, RecordFielddef recordFielddef, Log_Reports log_Reports ) { Log_Method log_Method = new Log_MethodImpl(); log_Method.BeginMethod(Info_Table.Name_Library, "Utility_Row", "ConfigurationTo_Field", log_Reports); // // // セルのソースヒント名 string nodeConfigtree; try { nodeConfigtree = recordFielddef.ValueAt(index_Column).Name_Humaninput; } catch (ArgumentOutOfRangeException) { // エラー goto gt_Error_Index; } Cell result; // 型毎に処理を分けます。 switch (recordFielddef.ValueAt(index_Column).Type_Field) { case EnumTypeFielddef.Int: { // 空白データも自動処理 IntCellImpl cellData = new IntCellImpl(nodeConfigtree); cellData.Text = value; result = cellData; } break; case EnumTypeFielddef.Bool: { // 空白データも自動処理 BoolCellImpl cellData = new BoolCellImpl(nodeConfigtree); cellData.Text = value; result = cellData; } break; default: { StringCellImpl cellData = new StringCellImpl(nodeConfigtree); cellData.Text = value; result = cellData; } break; } goto gt_EndMethod; // // #region 異常系 //──────────────────────────────────────── gt_Error_Index: result = null; if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー461!", log_Method); Log_TextIndented t = new Log_TextIndentedImpl(); t.Append("列インデックス[" + index_Column + "](0スタート)が指定されましたが、"); t.Newline(); t.Append("列は[" + recordFielddef.Count + "]個しかありません。(列定義リストは、絞りこまれている場合もあります)"); t.Newline(); // ヒント r.Message = t.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // // gt_EndMethod: log_Method.EndMethod(log_Reports); return(result); }
//──────────────────────────────────────── public void Judge( out bool isJudge, string name_KeyField, string value_Expected, bool isRequired_ExpectedValue, DataRow row, Conf_String parent_Query, Log_Reports log_Reports ) { Log_Method log_Method = new Log_MethodImpl(); log_Method.BeginMethod(Info_Table.Name_Library, this, "Judge", log_Reports); // // // // try { Cell valueH = (Cell)row[name_KeyField]; // (5)キーが空欄で、検索ヒット必須でなければ、無視します。【bool型フィールドの場合】 if (BoolCellImpl.IsSpaces(valueH)) { isJudge = false; goto gt_EndMethod; } // // (6)この行の、キー_フィールドの値を取得。 // bool isKeyValue; bool isParsedSuccessful = BoolCellImpl.TryParse( valueH, out isKeyValue, EnumOperationIfErrorvalue.Error, null, log_Reports ); if (log_Reports.Successful) { if (!isParsedSuccessful) { // エラー。 isJudge = false; if (log_Reports.CanCreateReport) { Log_RecordReports d_Report = log_Reports.BeginCreateReport(EnumReport.Error); d_Report.SetTitle("▲エラー699!", log_Method); d_Report.Message = "bool型パース失敗。"; log_Reports.EndCreateReport(); } goto gt_EndMethod; } } bool isExpectedValue; if (log_Reports.Successful) { // (8)キー値をbool型に変換します。 bool isParseSuccessful2 = bool.TryParse(value_Expected, out isExpectedValue); if (!isParseSuccessful2) { isJudge = false; if (isRequired_ExpectedValue) { // 空値ではダメという設定の場合。 goto gt_Error_Parse; } goto gt_EndMethod; } } else { isExpectedValue = false; } // (8)該当行をレコードセットに追加。 if (log_Reports.Successful) { if (isKeyValue == isExpectedValue) { isJudge = true; } else { isJudge = false; } } else { isJudge = false; } } catch (RowNotInTableException) { // (9)指定行がなかった場合は、スルー。 isJudge = false; // // 指定の行は、テーブルの中にありませんでした。 // 再描画と、行の削除が被ったのかもしれません。 // いわゆる「処理中」です。 // //.WriteLine(this.GetType().Name+"#GetValueStringList: ["+refTable.Name+"]テーブルには、["+ttbwIndex+"]行が存在しませんでした。もしかすると、削除されたのかもしれません。エラー:"+e.Message); } goto gt_EndMethod; // // #region 異常系 //──────────────────────────────────────── gt_Error_Parse: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー286!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.AppendI(0, "<Select_KeyBoolImplクラス>"); s.Append(Environment.NewLine); s.AppendI(1, "これはbool型値のプログラムです。他の型のプログラムを使ってください。"); s.Append(Environment.NewLine); s.AppendI(1, "sExpectedValue=["); s.Append(value_Expected); s.Append("]"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); // ヒント parent_Query.ToText_Locationbreadcrumbs(s); s.AppendI(0, "</Select_KeyBoolImplクラス>"); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // // gt_EndMethod: log_Method.EndMethod(log_Reports); }
//──────────────────────────────────────── #endregion #region アクション //──────────────────────────────────────── /// <summary> /// DataRow → Dictionary /// </summary> /// <param name="row"></param> /// <param name="log_Reports"></param> public void Add(DataRow row, Log_Reports log_Reports) { Log_Method log_Method = new Log_MethodImpl(0); log_Method.BeginMethod(Info_Table.Name_Library, this, "Add", log_Reports); Dictionary <string, Cell> record = new Dictionary <string, Cell>(); int nFieldCount = row.ItemArray.Length; for (int nFieldIndex = 0; nFieldIndex < nFieldCount; nFieldIndex++) { // フィールド名 string sFieldName = xTable.RecordFielddef.ValueAt(nFieldIndex).Name_Trimupper; // 値 Cell oValue; if (row[nFieldIndex] is DBNull) { //// デバッグ //if (true) //{ //Log_TextIndented txt = new Log_TextIndentedImpl(); // txt.Append(InfxenonTable.LibraryName + ":" + this.GetType().Name + "#Add:【ヌル】"); // txt.Append(" field=[" + sFieldName + "]"); // ystem.Console.WriteLine(txt.ToString()); //} String sConfigStack = xTable.Expr_Filepath_ConfigStack.Lv4Execute_OnImplement( EnumHitcount.Unconstraint, log_Reports); if (!log_Reports.Successful) { // 既エラー。 goto gt_EndMethod; } EnumTypeFielddef typeField = xTable.RecordFielddef.ValueAt(nFieldIndex).Type_Field; switch (typeField) { case EnumTypeFielddef.String: oValue = new StringCellImpl(sConfigStack); break; case EnumTypeFielddef.Int: oValue = new IntCellImpl(sConfigStack); break; case EnumTypeFielddef.Bool: oValue = new BoolCellImpl(sConfigStack); break; default: // エラー。 goto gt_Error_UndefinedType; } } else { oValue = (Cell)row[nFieldIndex]; //// デバッグ //if (true) //{ //Log_TextIndented txt = new Log_TextIndentedImpl(); // txt.Append(InfxenonTable.LibraryName + ":" + this.GetType().Name + "#Add:【○】"); // txt.Append(" 値=[" + oValue.HumanInputString + "]"); // ystem.Console.WriteLine(txt.ToString()); //} } record.Add(sFieldName, oValue); } this.List_Field.Add(record); // 正常 goto gt_EndMethod; // // #region 異常系 //──────────────────────────────────────── gt_Error_UndefinedType: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー293!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append(" 未定義の型です。プログラムのミスの可能性があります。"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // // gt_EndMethod: log_Method.EndMethod(log_Reports); return; }
//──────────────────────────────────────── public static Cell NewInstance( object value, bool isRequired, string conf_Node, Log_Reports log_Reports ) { Log_Method log_Method = new Log_MethodImpl(0); log_Method.BeginMethod(Info_Table.Name_Library, "Utility_HumaninputValue", "NewInstance", log_Reports); Cell result; if (value is StringCellImpl) { result = new StringCellImpl(conf_Node); } else if (value is IntCellImpl) { result = new IntCellImpl(conf_Node); } else if (value is BoolCellImpl) { result = new BoolCellImpl(conf_Node); } else { result = null; if (isRequired) { //エラー goto gt_Error_AnotherType; } } goto gt_EndMethod; // #region 異常系 //──────────────────────────────────────── gt_Error_AnotherType: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー292!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("▲エラー201!(" + Info_Table.Name_Library + ")"); s.Newline(); s.Append("string,int,boolセルデータクラス以外のオブジェクトが指定されました。"); s.Newline(); s.Append("指定された値のクラス=["); s.Append(value.GetType().Name); s.Append("]"); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // gt_EndMethod: log_Method.EndMethod(log_Reports); return(result); }