//──────────────────────────────────────── #endregion #region 判定 //──────────────────────────────────────── public override bool Equals(System.Object obj) { // 引数がヌルの場合は、偽です。 if (obj == null) { return(false); } // // 型が同じ時。 // Int_HumaninputImpl intCellData = obj as Int_HumaninputImpl; if (null != intCellData) { // 空欄同士なら真です。 if (this.IsSpaces() && intCellData.IsSpaces()) { return(true); } if (this.IsValidated && intCellData.IsValidated) { // お互いが数値なら、数値で判定 return(this.nValue_Int == intCellData.nValue_Int); } else { // どちらか片方でも非数値なら、文字列で判定 return(this.Text == intCellData.Text); } } if (obj is int) { int nIntValue = (int)obj; // このオブジェクトが空欄なら偽。 if (this.IsSpaces()) { return(false); } // このオブジェクトが非int値なら偽。 if (!this.IsValidated) { return(false); } // 数値で比較 return(this.nValue_Int == nIntValue); } return(false); }
//──────────────────────────────────────── //static public string ParseString(object data) //{ // if (data is Int_HumaninputImpl) // { // return ((Int_HumaninputImpl)data).Text; // } // // // // 以下、エラー対応。 // // // // DBNull でここをよく通る。 // // // // // //if (false) // //{ // // Log_TextIndented t = new Log_TextIndentedImpl(); // // if (data is DBNull) // // { // // t.Append("int型の値が必要なところでしたが、値が存在しませんでした。(DBNull)"); // // t.Append(Environment.NewLine); // // } // // else // // { // // t.Append("指定の引数の値["); // // t.Append(((O_Value)data).SHumanInput); // // t.Append("]は、int型ではありませんでした。"); // // t.Append(Environment.NewLine); // // } // // //.WriteLine("OValue_IntImpl.GetString: エラーメッセージ=" + dt.ToString()); // // throw new System.ArgumentException(t.ToString()); // //} // // // // // // // // // return ""; //} //──────────────────────────────────────── /// <summary> /// /// </summary> /// <param name="data"></param> /// <param name="outInt"></param> /// <returns>正常終了なら真、異常終了なら偽。</returns> static public bool TryParse( object data, out int nValue_Out, EnumOperationIfErrorvalue enumCellDataErrorSupport, object altValue, Log_Reports log_Reports ) { Log_Method log_Method = new Log_MethodImpl(0); log_Method.BeginMethod(Info_Table.Name_Library, "OValue_IntImpl", "TryParse", log_Reports); bool bResult; Int_HumaninputImpl err_IntCellData; if (data is Int_HumaninputImpl) { Int_HumaninputImpl intCellData = (Int_HumaninputImpl)data; if (intCellData.IsSpaces()) { // // 空白の場合 // if (EnumOperationIfErrorvalue.Spaces_To_Alt_Value == enumCellDataErrorSupport) { if (altValue is int) { nValue_Out = (int)altValue; bResult = true; } else { // エラー nValue_Out = 0;//ゴミ値 bResult = false; err_IntCellData = intCellData; goto gt_Error_AnotherType2; } } else { // エラー nValue_Out = 0;//ゴミ値 bResult = false; err_IntCellData = intCellData; goto gt_Error_EmptyString; } } else if (!intCellData.isValidated) { // エラー(変換に失敗した場合) nValue_Out = 0;//ゴミ値 bResult = false; err_IntCellData = intCellData; goto gt_Error_Invalid; } else { // 正常処理 nValue_Out = intCellData.nValue_Int; bResult = true; } } else if (null == data) { // エラー nValue_Out = 0;//ゴミ値 bResult = false; goto gt_Error_Null; } else if (!(data is Value_Humaninput)) { // エラー nValue_Out = 0;//ゴミ値 bResult = false; goto gt_Error_AnotherType; } else { // エラー nValue_Out = 0;//ゴミ値 bResult = false; goto gt_Error_Class; } // 正常 goto gt_EndMethod; // // #region 異常系 //──────────────────────────────────────── gt_Error_AnotherType2: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー201!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append(" altValue引数には、int型の値を指定してください。"); s.Append(Environment.NewLine); s.Append(" intセル値=["); s.Append(err_IntCellData.Text); s.Append("]"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); s.Append(" 問題箇所ヒント:"); s.Append(Environment.NewLine); s.Append(" "); err_IntCellData.ToText_Locationbreadcrumbs(s); s.Append(Environment.NewLine); s.Append(Environment.NewLine); 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("▲エラー201!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append(" セルに、int型の値を入れてください。空欄にしないでください。"); s.Append(Environment.NewLine); s.Append(" intセル値=["); s.Append(err_IntCellData.Text); s.Append("]"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); s.Append(" 問題箇所ヒント:"); s.Append(Environment.NewLine); s.Append(" "); err_IntCellData.ToText_Locationbreadcrumbs(s); s.Append(Environment.NewLine); s.Append(Environment.NewLine); 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("▲エラー111!!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append(" int型に変換できませんでした。["); s.Append(err_IntCellData.Text); s.Append("]"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); s.Append(" 問題箇所ヒント:"); s.Append(Environment.NewLine); s.Append(" "); err_IntCellData.ToText_Locationbreadcrumbs(s); s.Append(Environment.NewLine); s.Append(Environment.NewLine); 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("▲エラー110!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append(" 指定の引数dataに、IntCellData型の値を指定してください。空っぽでした。"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_AnotherType: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー111!", log_Method); Log_TextIndentedImpl s = new Log_TextIndentedImpl(); s.Append(" 指定の引数dataに、CellData型の値を指定してください。"); s.Append(Environment.NewLine); s.Append(" 別の型[" + data.GetType().Name + "でした。"); s.Append(Environment.NewLine); s.Append(Environment.NewLine); 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("▲エラー112!", log_Method); Log_TextIndentedImpl s = new Log_TextIndentedImpl(); s.Append(" 指定の引数の値["); s.Append(((Value_Humaninput)data).Text); s.Append("]は、IntCellData型ではありませんでした。"); 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); }
//──────────────────────────────────────── public void Judge( out bool isJudge, string name_KeyField, string value_Expected, bool isRequired_ExpectedValue, DataRow row, Configuration_Node 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 { object obj = row[name_KeyField]; if (obj is DBNull) { isJudge = false; goto gt_Error_DBNull; } Value_Humaninput valueH = (Value_Humaninput)obj; // (5)キーが空欄で、検索ヒット必須でなければ、無視します。【int型フィールドの場合】 if (Int_HumaninputImpl.IsSpaces(valueH)) { isJudge = false; goto gt_EndMethod; } // (6)この行の、キー_フィールドの値を取得。 int keyValue; bool bParsedSuccessful = Int_HumaninputImpl.TryParse( valueH, out keyValue, EnumOperationIfErrorvalue.Error, null, log_Reports ); if (log_Reports.Successful) { if (!bParsedSuccessful) { isJudge = false; if (log_Reports.CanCreateReport) { Log_RecordReports d_Report = log_Reports.BeginCreateReport(EnumReport.Error); d_Report.SetTitle("▲エラー698!", log_Method); d_Report.Message = "int型パース失敗。"; log_Reports.EndCreateReport(); } goto gt_EndMethod; } } // (7)キー値をint型に変換します。 int expectedValue; if (log_Reports.Successful) { bool bParseSuccessful2 = int.TryParse(value_Expected, out expectedValue); if (!bParseSuccessful2) { isJudge = false; if (isRequired_ExpectedValue) { goto gt_Error_Parse; } goto gt_EndMethod; } } else { expectedValue = 0; } if (log_Reports.Successful) { // (8)該当行をレコードセットに追加。 if (keyValue == expectedValue) { // // 該当行なら。 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_DBNull: if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー244!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.Append("検索キーに指定した["); s.Append(name_KeyField); s.Append("]というフィールドは無いです。"); s.Newline(); // ヒント parent_Query.ToText_Locationbreadcrumbs(s); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── gt_Error_Parse: // 空値ではダメという設定の場合。 if (log_Reports.CanCreateReport) { Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error); r.SetTitle("▲エラー287!", log_Method); Log_TextIndented s = new Log_TextIndentedImpl(); s.AppendI(0, "<Select_KeyIntImplクラス>"); s.Newline(); s.AppendI(1, "これはint型値のプログラムです。他の型のプログラムを使ってください。"); s.Newline(); s.AppendI(1, "・ヒント:変数が見つからなかった場合もここに来ます。例えば、変数名「$aaa」を書こうとして、「aaa」と書いていませんか?"); s.Newline(); s.AppendI(1, "・ヒント:数値が大きすぎた場合もここに来ます。"); s.Newline(); s.AppendI(1, "sExpectedValue=["); s.Append(value_Expected); s.Append("]"); s.Newline(); s.Newline(); // // ヒント parent_Query.ToText_Locationbreadcrumbs(s); s.AppendI(0, "</Select_KeyIntImplクラス>"); s.Newline(); r.Message = s.ToString(); log_Reports.EndCreateReport(); } goto gt_EndMethod; //──────────────────────────────────────── #endregion // // gt_EndMethod: log_Method.EndMethod(log_Reports); }