Excel シートからデータを読み取り、そのデータをマトリックスにロードする SAP Business One 用のアドオン プログラムを作成しています。Excel シートには常に同じ列があります。ただし、一部の列がまったく入力されていないか、一部のセルが空である可能性があります。私のテスト Excel シートでは、列「DocEntry」が空です。「入力文字列が正しい形式ではありませんでした」というエラーが表示されます
oDT.SetValue("hDocEntry", i, int.Parse(dt.Rows[i]["DocEntry"].ToString()));
System.Data.DataTable dt = new System.Data.DataTable();
OleDbCommand cmd = new OleDbCommand(sql, myConnection);
cmd.CommandType = CommandType.Text;
OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
adapter.Fill(dt);
if (dt != null)
{
if (_form.DataSources.DataTables.Count.Equals(0))
{
_form.DataSources.DataTables.Add("dtData");
}
else
{
_form.DataSources.DataTables.Item("dtData").Clear();
}
oDT = _form.DataSources.DataTables.Item("dtData");
// Get matrix
_aphMatrix.Clear();
oDT.Columns.Add("hNum", SAPbouiCOM.BoFieldsType.ft_Integer, 10);
oDT.Columns.Add("hRecordKey", SAPbouiCOM.BoFieldsType.ft_Integer, 10);
oDT.Columns.Add("hDocEntry", SAPbouiCOM.BoFieldsType.ft_Integer, 10);
oDT.Columns.Add("hCardCode", SAPbouiCOM.BoFieldsType.ft_AlphaNumeric, 10);
oDT.Columns.Add("hComments", SAPbouiCOM.BoFieldsType.ft_AlphaNumeric, 20);
oDT.Columns.Add("hDocCurr", SAPbouiCOM.BoFieldsType.ft_AlphaNumeric, 4);
oDT.Columns.Add("hDocDate", SAPbouiCOM.BoFieldsType.ft_Date);
//Create SAP datatables rows
oDT.Rows.Add(dt.Rows.Count);
_form.Freeze(true);
// Iterate through the datatable rows
for (int i = 0; i <= dt.Rows.Count - 1; i++)
{
oDT.SetValue("hNum", i, i + 1);
oDT.SetValue("hRecordKey", i, int.Parse(dt.Rows[i]["RecordKey"].ToString()));
oDT.SetValue("hDocEntry", i, int.Parse(dt.Rows[i]["DocEntry"].ToString()));
oDT.SetValue("hCardCode", i, dt.Rows[i]["CardCode"].ToString());
oDT.SetValue("hComments", i, dt.Rows[i]["Comments"].ToString());
oDT.SetValue("hDocCurr", i, dt.Rows[i]["DocCurrency"].ToString());
oDT.SetValue("hDocDate", i, dt.Rows[i]["DocDate"]);
}
// Bind the data to the matrix columns
_aphMatrix.Columns.Item("hNum").DataBind.Bind("dtData", "hNum");
_aphMatrix.Columns.Item("hRecordKey").DataBind.Bind("dtData", "hRecordKey");
_aphMatrix.Columns.Item("hDocEntry").DataBind.Bind("dtData", "hDocEntry");
_aphMatrix.Columns.Item("hCardCode").DataBind.Bind("dtData", "hCardCode");
_aphMatrix.Columns.Item("hComments").DataBind.Bind("dtData", "hComments");
_aphMatrix.Columns.Item("hDocCurr").DataBind.Bind("dtData", "hDocCurr");
_aphMatrix.Columns.Item("hDocDate").DataBind.Bind("dtData", "hDocDate");
_aphMatrix.AutoResizeColumns();
_aphMatrix.LoadFromDataSource();
// Close the OLEdb connection
if (myConnection != null)
{
myConnection.Close();
myConnection.Dispose();
}
// Clear the datatable
oDT.Clear();
_form.Freeze(false);
}
null 値のためです。
null 値が oDT に転送されないように dt データテーブルをフィルタリングするにはどうすればよいですか? つまり、文字列の null は string.Empty に設定され、整数/小数の場合はゼロに設定されます。どんな助けでも感謝します。