1

我正在为 SAP Business One 创建一个附加程序,该程序从 Excel 工作表中读取数据,然后将数据加载到矩阵中。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);
}                 

因为空值。

如何过滤 dt 数据表,以便没有空值被带到 oDT?即字符串的空值设置为 string.Empty,整数/小数设置为零;任何帮助表示赞赏。

4

1 回答 1

1

首先检查它是否为空

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