// サブプロシージャ: テスター用WHERE句の作成 private string makeSqlWhereClause(string criteria) { string sql = " where "; foreach (string c in criteria.Split(',')) { sql += "c.process_cd like " + VBS.Left(c, c.Length - 1) + "%' or "; } ; sql = VBS.Left(sql, sql.Length - 3); System.Diagnostics.Debug.Print(sql); return(sql); }
// サブプロシージャ: テスター用SELECTケース句の作成 private string makeSqlCaseClause(string criteria) { string sql = " case "; foreach (string c in criteria.Split(',')) { sql += "when c.process_cd like " + VBS.Left(c, c.Length - 1) + "%' then " + c + " "; } ; sql += "else c.process_cd end as tester_id "; System.Diagnostics.Debug.Print(sql); return(sql); }
// サブプロシージャ:ロット集計グリッドビューを更新し、数量の最も多いロット番号を返す public string updateLotSummary(DataTable dt) { if (dt.Rows.Count <= 0) { dtLot = new DataTable(); dgvLotSummary.DataSource = dtLot; return(string.Empty); } // 一時テーブルに、ロット集計を格納する string sql1 = "select lot, count(lot) as qty from t_module where tray_id in ("; string sql2 = string.Empty; var query1 = dt.AsEnumerable() .Select(row => new { tray_id = row.Field <string>("tray_id") }); foreach (var q in query1) { sql2 += "'" + q.tray_id + "', "; } string sql3 = sql1 + VBS.Left(sql2, sql2.Length - 2) + ") group by lot order by qty desc, lot"; System.Diagnostics.Debug.Print(sql3); DataTable dtTemp = new DataTable(); TfSQL tf = new TfSQL(); tf.sqlDataAdapterFillDatatableFromTrayGuardDb(sql3, ref dtTemp); // ロット集計表示テーブルに、一時テーブルの情報を移す dgvLotSummary.DataSource = null; dgvLotSummary.Refresh(); dtLot = new DataTable(); var query2 = dtTemp.AsEnumerable().Select(r => new { lot = r.Field <string>("lot"), qty = r.Field <Int64>("qty") }); // 列の追加 foreach (var q in query2) { dtLot.Columns.Add(q.lot, typeof(int)); } dtLot.Columns.Add("total", typeof(int)); // 行の追加 dtLot.Rows.Add(); foreach (var q in query2) { dtLot.Rows[0][q.lot] = q.qty; } dtLot.Rows[0]["total"] = query2.Sum(a => a.qty); dgvLotSummary.DataSource = dtLot; return(query2.First().lot); }
// ディープキャンセル対象のカートンを、デスクトップのCSVをインポートして選択する private void btnImportForDeepCancel_Click(object sender, EventArgs e) { string sql1 = "select carton_id, lot, l_cnt, m_qty, batch, register_date, rg_user, cancel_date, cl_user, pallet_id from t_carton where carton_id in ( "; string sql2 = string.Empty; //クラスTfImportを使用し、SQL文を作成する List <TfImport> cartonList = TfImport.loadCartonListFromDesktopCsv( System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + @"\CartonList.csv"); foreach (var carton in cartonList) { sql2 += "'" + carton.CartonNumber + "', "; } string sql3 = sql1 + VBS.Left(sql2, sql2.Length - 2) + ") order by carton_id"; System.Diagnostics.Debug.Print(sql3); // SQL結果を、DTAATABLEへ格納 dtCarton.Clear(); TfSQL tf = new TfSQL(); tf.sqlDataAdapterFillDatatableFromTrayGuardDb(sql3, ref dtCarton); // データグリットビューへDTAATABLEを格納 dgvCarton.DataSource = dtCarton; //行ヘッダーに行番号を表示する for (int i = 0; i < dgvCarton.Rows.Count; i++) { dgvCarton.Rows[i].HeaderCell.Value = (i + 1).ToString(); } //行ヘッダーの幅を自動調節する dgvCarton.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders); // 一番下の行を表示する if (dgvCarton.Rows.Count != 0) { dgvCarton.FirstDisplayedScrollingRowIndex = dgvCarton.Rows.Count - 1; } }
// 一時テーブルの選択された複数レコードを、一括消去させる private void btnDeleteSelection_Click(object sender, EventArgs e) { if (dtModule.Rows.Count <= 0) { return; } // セルの選択範囲が2列以上の場合は、メッセージの表示のみでプロシージャを抜ける if (dgvModule.Columns.GetColumnCount(DataGridViewElementStates.Selected) >= 2) { MessageBox.Show("Please select range with only one column.", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2); return; } // 部分キャンセルモードでない時は、通常処理(モジュールデータテーブルの選択行削除) if (!formPartialCancelMode) { DialogResult result = MessageBox.Show("Do you really want to delete the selected rows?", "Notice", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2); if (result == DialogResult.No) { return; } foreach (DataGridViewCell cell in dgvModule.SelectedCells) { dtModule.Rows[cell.RowIndex].Delete(); } dtModule.AcceptChanges(); updateDataGridViews(dtModule, ref dgvModule); txtModuleId.Focus(); txtModuleId.SelectAll(); } // 部分キャンセルモードの時は、DBモジュールテーブルの行削除 else if (formPartialCancelMode) { if (dgvModule.SelectedCells.Count == dtModule.Rows.Count) { MessageBox.Show("If you wish to delete all modules, please cancel the tray.", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2); return; } DialogResult result = MessageBox.Show("Do you really want to delete the selected rows?", "Notice", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2); if (result == DialogResult.No) { return; } btnDeleteSelection.Enabled = false; string sql1 = "delete from t_module where module_id in ('"; string sql2 = string.Empty; foreach (DataGridViewCell cell in dgvModule.SelectedCells) { sql2 += dtModule.Rows[cell.RowIndex]["module_id"].ToString() + "','"; dtModule.Rows[cell.RowIndex].Delete(); } string sql3 = sql1 + VBS.Left(sql2, sql2.Length - 2) + ")"; TfSQL tf = new TfSQL(); bool res = tf.sqlExecuteNonQuery(sql3, false); if (res) { dtModule.AcceptChanges(); updateDataGridViews(dtModule, ref dgvModule); string updateTime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); string sql4 = "update t_tray set update_date = '" + updateTime + "', up_dept = '" + txtLoginDept.Text + "', " + "up_user = '******', lot = '" + dtLot.Columns[0].ColumnName + "', " + "qty = '" + dtLot.Rows[0]["total"].ToString() + "', multi_lot = '" + (dtLot.Columns.Count >= 3 ? "T" : "F") + "' " + "where tray_id = '" + txtTrayId.Text + "'"; System.Diagnostics.Debug.Print(sql4); tf.sqlExecuteNonQuery(sql4, false); //親フォームfrmTrayのデータグリットビューを更新するため、デレゲートイベントを発生させる this.RefreshEvent(this, new EventArgs()); this.Focus(); MessageBox.Show("Partial cancel was successful.", "Result", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2); } else { MessageBox.Show("Partial cancel failed.", "Result", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2); } } }
// シリアルがスキャンされた時の処理 private void txtModuleId_KeyDown(object sender, KeyEventArgs e) { // エンターキーの場合、テキストボックスの桁数が17桁または24桁の場合のみ、処理を行う if (e.KeyCode != Keys.Enter) { return; } if (txtModuleId.Text.Length != 17 && txtModuleId.Text.Length != 24) { return; } // BASEシリアルからHOOPシリアルを取得し(ステップ1)、両方のシリアルに該当する、テスト結果・プロセス名・テスト日時を取得する(ステップ2、ステップ3) TfSQL tf = new TfSQL(); DataTable dt = new DataTable(); string log = string.Empty; string module = txtModuleId.Text; string mdlShort = VBS.Left(module, 17); string mdlNtrs = string.Empty; string mdlOK2ShipResult = string.Empty; // 2016.08.18 FUJIKI FORCED NG CHECK を追加 string mdlForcedNGResult = string.Empty; // 2016.08.18 FUJIKI FORCED NG CHECK を追加 string scanTime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); string displayAll = string.Empty; // ログ用 DataRow dr = dtModule.NewRow(); string textResult = "PASS"; string mdlSerialBin = string.Empty; string textSelectBin = string.Empty; // 2016.08.18 FUJIKI FORCED NG CHECK を追加 if (forcedNGSwitch == "ON" && OK2ShipCheckSwitch == "ON") { string sql0 = "select serial from forceddata where serial = '" + mdlShort + "' and result = 1"; mdlForcedNGResult = tf.sqlExecuteScalarStringOK2Ship(sql0); if (!string.IsNullOrEmpty(mdlForcedNGResult)) { textResult = "NG"; displayAll = "NG SERIAL"; } else { // Short Factory Serial No の検索 string sql1 = "select received_result from data where serial = '" + mdlShort + "' and received_result = '0'"; mdlOK2ShipResult = tf.sqlExecuteScalarStringOK2Ship(sql1); // ビン情報を検索 if (string.IsNullOrEmpty(mdlOK2ShipResult)) { mdlOK2ShipResult = "NG"; textResult = "NG"; } else { mdlOK2ShipResult = "OK"; } displayAll = displayAll + "OK2:" + mdlOK2ShipResult; } } else { mdlOK2ShipResult = string.Empty; textResult = "n/a"; displayAll = "test function off"; } // 2017.03.08 FUJII シリアル構成要素のチェックをオフ //トレーIDの新規採番 // 先ずは、シリアルの構成要素のパターンが適正か、ユーザーデスクトップの設定ファイルを使用して確認する string matchResult = string.Empty; //string matchResult = matchSerialNumberingPattern(module); if (matchResult != string.Empty) { MessageBox.Show(matchResult + " does not match with desktop file's setting.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } // メモリ上のテーブルにレコードを追加 dr["module_id"] = module; dr["lot"] = VBS.Left(module, 8); dr["bin"] = mdlSerialBin; dr["tester_id"] = displayAll; dr["test_result"] = textResult; dr["test_date"] = DateTime.ParseExact(scanTime, "yyyy/MM/dd HH:mm:ss", CultureInfo.InvariantCulture);; dr["r_mode"] = formReturnMode ? "T" : "F"; dtModule.Rows.Add(dr); // アプリケーションフォルダに、日付とテスト結果のログを付ける log = Environment.NewLine + scanTime + "," + module + "," + displayAll + ":" + textResult; // log = Environment.NewLine + earlyTime + "," + module + "," + displayAll; // 同日日付のファイルが存在する場合は追記し、存在しない場合はファイルを作成追記する try { string outFile = outPath + DateTime.Today.ToString("yyyyMMdd") + ".txt"; System.IO.File.AppendAllText(outFile, log, System.Text.Encoding.GetEncoding("UTF-8")); } catch (Exception ex) { MessageBox.Show(ex.Message, "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); } // データグリットビューの更新 updateDataGridViews(dtModule, ref dgvModule); }
// サブプロシージャ:データグリットビューの更新 public void updateDataGridViews(DataTable dt, ref DataGridView dgv, bool load) { DateTime registerDateFrom = dtpRegsterDateFrom.Value; DateTime registerDateTo = dtpRegisterDateTo.Value.AddDays(1); string invoiceNo = txtInvoiceNo.Text; string palletId = txtPalletId.Text; string lot = txtLot.Text; string cartonId = txtCartonId.Text; string batch = txtBatch.Text; bool b_registerDateFrom = cbxRegisterDateFrom.Checked; bool b_registerDateTo = cbxRegisterDateTo.Checked; bool b_invoiceNo = cbxInvoiceNo.Checked; bool b_palletId = cbxPalletId.Checked; bool b_lot = cbxLot.Checked; bool b_cartonId = cbxCartonId.Checked; bool b_batch = cbxBatch.Checked; bool b_multi_lot = cbxMultiLot.Checked; bool b_hideCancel = cbxHideCancel.Checked; // ユーザーがパックIDを検索条件として指定した場合は、個別のSQL文を使用する string sqlX = "select pallet_id, lot, l_cnt, m_qty, batch, register_date, rg_user, cancel_date, cl_user, invoice_no from t_pallet " + "where pallet_id in (select pallet_id from t_carton where carton_id like '" + cartonId + "%')"; // ユーザーが選択した検索条件を、SQL文に反映する string sql1 = "select pallet_id, lot, l_cnt, m_qty, batch, register_date, rg_user, cancel_date, cl_user, invoice_no from t_pallet where "; bool[] cr = { true, true, invoiceNo == string.Empty ? false : true, palletId == string.Empty ? false : true, lot == string.Empty ? false : true, cartonId == string.Empty ? false : true, batch == string.Empty ? false : true, true, true }; bool[] ck = { b_registerDateFrom, b_registerDateTo, b_invoiceNo, b_palletId, b_lot, b_cartonId, b_batch, b_multi_lot, b_hideCancel }; string sql2 = (!(cr[0] && ck[0]) ? string.Empty : "register_date >= '" + registerDateFrom + "' AND ") + (!(cr[1] && ck[1]) ? string.Empty : "register_date < '" + registerDateTo + "' AND ") + (!(cr[2] && ck[2]) ? string.Empty : "invoice_no like '%" + invoiceNo + "%' AND ") + (!(cr[3] && ck[3]) ? string.Empty : "pallet_id like '%" + palletId + "%' AND ") + (!(cr[4] && ck[4]) ? string.Empty : "lot like '%" + lot + "%' AND ") + (!(cr[5] && ck[5]) ? string.Empty : "carton_id like '%" + cartonId + "%' AND ") + (!(cr[6] && ck[6]) ? string.Empty : "batch = '" + batch + "' AND ") + (!(cr[7] && ck[7]) ? string.Empty : "l_cnt >= 2 AND ") + (!(cr[8] && ck[8]) ? string.Empty : "cancel_date is null AND "); bool b_all = (cr[0] && ck[0]) || (cr[1] && ck[1]) || (cr[2] && ck[2]) || (cr[3] && ck[3]) || (cr[4] && ck[4]) || (cr[5] && ck[5]) || (cr[6] && ck[6]); if (!b_all) { MessageBox.Show("Please select at least one check box and fill the criteria.", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2); return; } string sql3 = sql1 + VBS.Left(sql2, sql2.Length - 5) + " order by pallet_id"; string sql4 = string.Empty; if (cartonId != string.Empty && b_cartonId) { sql4 = sqlX; } else { sql4 = sql3; } System.Diagnostics.Debug.Print(sql4); // SQL結果を、DTAATABLEへ格納 dt.Clear(); TfSQL tf = new TfSQL(); tf.sqlDataAdapterFillDatatableFromTrayGuardDb(sql4, ref dt); // データグリットビューへDTAATABLEを格納 dgv.DataSource = dt; dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; // グリットビュー右端にボタンを追加(初回のみ) if (load) { addButtonsToDataGridView(dgv); } //行ヘッダーに行番号を表示する for (int i = 0; i < dgv.Rows.Count; i++) { dgv.Rows[i].HeaderCell.Value = (i + 1).ToString(); } //行ヘッダーの幅を自動調節する dgv.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders); // 一番下の行を表示する if (dgv.Rows.Count != 0) { dgv.FirstDisplayedScrollingRowIndex = dgv.Rows.Count - 1; } }
// 変更後モジュールがスキャンされたときの処理 private void txtAfter_KeyDown(object sender, KeyEventArgs e) { // エンターキーの場合、テキストボックスの桁数が17桁または24桁の場合のみ、処理を行う if (e.KeyCode != Keys.Enter) { return; } if (txtAfter.Text.Length != 17 && txtAfter.Text.Length != 24) { return; } // データテーブルのクリア dtModule.Rows.Clear(); // BASEシリアルからHOOPシリアルを取得し(ステップ1)、両方のシリアルに該当する、テスト結果・プロセス名・テスト日時を取得する(ステップ2、ステップ3) TfSQL tf = new TfSQL(); DataTable dt = new DataTable(); string log = string.Empty; string module = txtAfter.Text; string mdlShort = VBS.Left(module, 17); string mdlNtrs = string.Empty; string mdlOK2ShipResult = string.Empty; // 2016.08.18 FUJIKI FORCED NG CHECK を追加 string mdlForcedNGResult = string.Empty; // 2016.08.18 FUJIKI FORCED NG CHECK を追加 string scanTime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); string displayAll = string.Empty; // ログ用 string textResult = "PASS"; string mdlSerialBin = string.Empty; string textSelectBin = string.Empty; // メモリ上のテーブルにレコードを追加 DataRow dr = dtModule.NewRow(); dr["module_id"] = module; dr["lot"] = VBS.Left(module, 8); dr["bin"] = mdlSerialBin; dr["tester_id"] = displayAll; dr["test_result"] = textResult; dr["test_date"] = DateTime.ParseExact(scanTime, "yyyy/MM/dd HH:mm:ss", CultureInfo.InvariantCulture);; dr["r_mode"] = formReturnMode ? "T" : "F"; dtModule.Rows.Add(dr); // アプリケーションフォルダに、日付とテスト結果のログを付ける log = Environment.NewLine + scanTime + "," + module + "," + displayAll + ":" + textResult; // 同日日付のファイルが存在する場合は追記し、存在しない場合はファイルを作成追記する(AppendAllText がやってくれる) try { string outFile = outPath + DateTime.Today.ToString("yyyyMMdd") + ".txt"; System.IO.File.AppendAllText(outFile, log, System.Text.Encoding.GetEncoding("UTF-8")); } catch (Exception ex) { MessageBox.Show(ex.Message, "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); } // 現在の一時登録件数を変数へ保持する int okCount = getOkCount(dtModule); txtRow.Text = okCount.ToString(); // データグリットビューの更新 updateDataGridViews(dtModule, ref dgvModule); }
// サブプロシージャ:ロット集計グリッドビューを更新し、数量の最も多いロット番号を返す public string updateLotSummary(DataTable dt) { if (dt.Rows.Count <= 0) { dtLot = new DataTable(); dgvLotSummary.DataSource = dtLot; return(string.Empty); } // 各カートンに含まれる、バックIDリストを取得する TfSQL tf = new TfSQL(); string sql1 = "select pack_id from t_pack where carton_id in ("; string sql2 = string.Empty; var query1 = dt.AsEnumerable().Select(row => new { carton_id = row.Field <string>("carton_id") }); foreach (var q in query1) { sql2 += "'" + q.carton_id + "', "; } string sql3 = sql1 + VBS.Left(sql2, sql2.Length - 2) + ")"; System.Diagnostics.Debug.Print(sql3); DataTable dtTemp1 = new DataTable(); tf.sqlDataAdapterFillDatatableFromTrayGuardDb(sql3, ref dtTemp1); // 各パックに含まれる、トレーIDリストを取得する sql1 = "select tray_id from t_tray where pack_id in ("; sql2 = string.Empty; var query2 = dtTemp1.AsEnumerable().Select(row => new { pack_id = row.Field <string>("pack_id") }); foreach (var q in query2) { sql2 += "'" + q.pack_id + "', "; } sql3 = sql1 + VBS.Left(sql2, sql2.Length - 2) + ")"; System.Diagnostics.Debug.Print(sql3); DataTable dtTemp2 = new DataTable(); tf.sqlDataAdapterFillDatatableFromTrayGuardDb(sql3, ref dtTemp1); // 上記で取得したトレーIDが持つモジュールから、ロット集計を作成する sql1 = "select lot, count(lot) as qty from t_module where tray_id in ("; sql2 = string.Empty; var query3 = dtTemp1.AsEnumerable().Select(row => new { tray_id = row.Field <string>("tray_id") }); foreach (var q in query3) { sql2 += "'" + q.tray_id + "', "; } sql3 = sql1 + VBS.Left(sql2, sql2.Length - 2) + ") group by lot order by qty desc, lot"; System.Diagnostics.Debug.Print(sql3); DataTable dtTemp3 = new DataTable(); tf.sqlDataAdapterFillDatatableFromTrayGuardDb(sql3, ref dtTemp3); // ロット集計表示テーブルに、一時テーブルの情報を移す dgvLotSummary.DataSource = null; dgvLotSummary.Refresh(); dtLot = new DataTable(); var query4 = dtTemp3.AsEnumerable().Select(r => new { lot = r.Field <string>("lot"), qty = r.Field <Int64>("qty") }); // 列の追加 foreach (var q in query4) { dtLot.Columns.Add(q.lot, typeof(int)); } dtLot.Columns.Add("total", typeof(int)); // 行の追加 dtLot.Rows.Add(); foreach (var q in query4) { dtLot.Rows[0][q.lot] = q.qty; } dtLot.Rows[0]["total"] = query4.Sum(a => a.qty); // dgvLotSummary_ControlAdded が発生する、655より多い列を取り扱うため、WEIGHT設定を100から1へ変更 dgvLotSummary.DataSource = dtLot; return(query4.First().lot); }
// サブプロシージャ:データグリットビューの更新 public void updateDataGridViews(DataTable dt, ref DataGridView dgv, bool load) { DateTime registerDateFrom = dtpRegsterDateFrom.Value; DateTime registerDateTo = dtpRegisterDateTo.Value.AddDays(1); string registerDept = cmbRegisterDept.Text; DateTime updateDateFrom = dtpUpdateDateFrom.Value; DateTime updateDateTo = dtpUpdateDateTo.Value.AddDays(1); string updateDept = cmbUpdateDept.Text; string trayId = txtTrayId.Text; string line = cmbLine.Text; string shift = txtShift.Text; string moduleId = txtModuleId.Text; string lot = txtLot.Text; bool b_registerDateFrom = cbxRegisterDateFrom.Checked; bool b_registerDateTo = cbxRegisterDateTo.Checked; bool b_registerDept = cbxRegisterDept.Checked; bool b_updateDateFrom = cbxUpdateDateFrom.Checked; bool b_updateDateTo = cbxUpdateDateTo.Checked; bool b_updateDept = cbxUpdateDept.Checked; bool b_trayId = cbxTrayId.Checked; bool b_line = cbxLine.Checked; bool b_shift = cbxShift.Checked; bool b_multiLot = cbxMultiLot.Checked; bool b_hideCancel = cbxHideCancel.Checked; bool b_moduleId = cbxModuleId.Checked; bool b_lot = cbxLot.Checked; // ユーザーがモジュールIDを検索条件として指定した場合は、個別のSQL文を使用する string sqlX = "select tray_id, lot, qty, register_date, rg_dept, update_date, up_dept, cancel_date, cl_dept, multi_lot, pack_id from t_tray " + "where tray_id in (select tray_id from t_module where module_id like '" + moduleId + "%')"; // ユーザーがロットDを検索条件として指定した場合は、個別のSQL文を使用する string sqlY = "select tray_id, lot, qty, register_date, rg_dept, update_date, up_dept, cancel_date, cl_dept, multi_lot, pack_id from t_tray " + "where tray_id in (select tray_id from t_module where lot like '" + lot + "%')"; // モジュールID・ロットIDが選択されなかった場合は、その他全ての選択条件を、SQL文に盛り込む string sql1 = "select tray_id, lot, qty, register_date, rg_dept, update_date, up_dept, cancel_date, cl_dept, multi_lot, pack_id from t_tray where "; bool[] cr = { true, true, registerDept == string.Empty ? false : true, true, true, updateDept == string.Empty ? false : true, trayId == string.Empty ? false : true, line == string.Empty ? false : true, shift == string.Empty ? false : true, true, true }; bool[] ck = { b_registerDateFrom, b_registerDateTo, b_registerDept, b_updateDateFrom, b_updateDateTo, b_updateDept, b_trayId, b_line, b_shift, b_multiLot, b_hideCancel }; string sql2 = (!(cr[0] && ck[0]) ? string.Empty : "register_date >= '" + registerDateFrom + "' AND ") + (!(cr[1] && ck[1]) ? string.Empty : "register_date < '" + registerDateTo + "' AND ") + (!(cr[2] && ck[2]) ? string.Empty : "rg_dept = '" + registerDept + "' AND ") + (!(cr[3] && ck[3]) ? string.Empty : "update_date >= '" + updateDateFrom + "' AND ") + (!(cr[4] && ck[4]) ? string.Empty : "update_date < '" + updateDateTo + "' AND ") + (!(cr[5] && ck[5]) ? string.Empty : "up_dept = '" + updateDept + "' AND ") + (!(cr[6] && ck[6]) ? string.Empty : "tray_id like '%" + trayId + "%' AND ") + (!(cr[7] && ck[7]) ? string.Empty : "line = '" + line + "' AND ") + (!(cr[8] && ck[8]) ? string.Empty : "shift like '%" + shift + "%' AND ") + (!(cr[9] && ck[9]) ? string.Empty : "multi_lot = 'T' AND ") + (!(cr[10] && ck[10]) ? string.Empty : "cancel_date is null AND "); bool b_all = (cr[0] && ck[0]) || (cr[1] && ck[1]) || (cr[2] && ck[2]) || (cr[3] && ck[3]) || (cr[4] && ck[4]) || (cr[5] && ck[5]) || (cr[6] && ck[6]) || (cr[7] && ck[7]) || (cr[8] && ck[8]) || (moduleId != string.Empty && b_moduleId) || (lot != string.Empty && b_lot); if (!b_all) { MessageBox.Show("Please select at least one check box and fill the criteria.", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2); return; } string sql3 = sql1 + VBS.Left(sql2, sql2.Length - 5) + " order by tray_id"; string sql4 = string.Empty; if (moduleId != string.Empty && b_moduleId) { sql4 = sqlX; } else if (lot != string.Empty && b_lot) { sql4 = sqlY; } else { sql4 = sql3; } System.Diagnostics.Debug.Print(sql4); // SQL結果を、DTAATABLEへ格納 dt.Clear(); TfSQL tf = new TfSQL(); tf.sqlDataAdapterFillDatatableFromTrayGuardDb(sql4, ref dt); // データグリットビューへDTAATABLEを格納 dgv.DataSource = dt; dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; // グリットビュー右端にボタンを追加(初回のみ) if (load) { addButtonsToDataGridView(dgv); } //行ヘッダーに行番号を表示する for (int i = 0; i < dgv.Rows.Count; i++) { dgv.Rows[i].HeaderCell.Value = (i + 1).ToString(); } //行ヘッダーの幅を自動調節する dgv.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders); // 一番下の行を表示する if (dgv.Rows.Count != 0) { dgv.FirstDisplayedScrollingRowIndex = dgv.Rows.Count - 1; } }