1

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 に設定され、整数/小数の場合はゼロに設定されます。どんな助けでも感謝します。

4

1 に答える 1

1

最初のチェックはnullです

if(dt.Rows[i]["DocEntry"]!= DBNull.Value)
{
   oDT.SetValue("hDocEntry", i, int.Parse(dt.Rows[i]["DocEntry"].ToString()));
}
于 2013-06-05T09:23:04.873 に答える