数据是Null在我的情况下,在我的列表.添加

本文关键字:我的 列表 添加 情况下 数据 Null | 更新日期: 2023-09-27 17:50:50

我从以下代码中得到一个错误,该代码已编写为显示表数据

Data is Null。此方法或属性不能在Null值上调用。

所以这是我的代码,这样你可以帮助我研究它。

public static List<NomsPRRequest> LoadPRfromDB_withParams(DateTime from, DateTime to, string EntityID,
        string DepartmentID)
    {
        string sScript = m_sReport + ((EntityID == "") ? "" : " AND d.[EntityID]=" + EntityID) + ((DepartmentID == "") ? "" : " AND d.[DepartmentID]=" + DepartmentID)
            + " and [RequestDate] between '" + from.ToString("yyyy-MM-dd HH:mm:ss") + "' and '" + to.ToString("yyyy-MM-dd HH:mm:ss") + "'";
        Dictionary<long, NomsPRRequest> data = new Dictionary<long, NomsPRRequest>();
        long key;
        double dAmount;
        using (SqlConnection con = new SqlConnection(m_sConnectionString))
        {
            con.Open();
            using (SqlCommand command = new SqlCommand(sScript, con))
            {
                SqlDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    key = reader.GetInt64(0);
                    if (!data.ContainsKey(key))
                    {
                        data.Add(key, new NomsPRRequest()
                        {
                            RequestID = key,
                            RequestDate = reader.GetDateTime(1),
                            PARNumber = reader.GetString(2),
                            DepartmentName = reader.GetString(10),
                            DepartmentID = reader.GetInt64(11),
                            StatusID = reader.GetInt64(3),
                            FullName = reader.GetString(7),
                            InboxLearUID = reader.GetString(12),
                            ProgramName = reader.GetString(14),
                            ItemList = new List<NomsPRItem>(),
                            TotalAmount = 0.0
                        });
                    }
                    dAmount = (double)reader.GetDecimal(21) * (double)reader.GetDecimal(22);
                    data[key].TotalAmount += dAmount;
                    ****data[key].ItemList.Add(new NomsPRItem()****
                    {
                        RequestID = key,
                        PartDesc = reader.GetString(17),
                        PartNumber = reader.GetString(23),
                        SupplierID = reader.GetString(18),
                        FullName = reader.GetString(7),
                        AccountType = reader.GetString(19),
                        CurrName = reader.GetString(20),
                        PartQuantity = (double)reader.GetDecimal(21),
                        PiecePrice = (double)reader.GetDecimal(22),
                        Amount = dAmount
                    });
                }
            }
        }
        return data.Values.ToList();
    }

我在这部分得到错误

数据(关键).ItemList。添加(新NomsPRItem ()

这是我的观点。

  <table data-ng-show="models != null" class="table table-striped table-bordered table-hover"
                id="PRTable" >
                <tr class="titlerow">
                    <th>
                        <a href="#" data-ng-click="sorting='RequestDate'; reverse = !reverse">PR Date <span
                            data-ng-show="sorting == 'RequestDate'"></span>
                        </a>
                    </th>
                    <th>
                        <a href="#" data-ng-click="sorting='RequestID '; reverse = !reverse">PR # <span data-ng-show="sorting == 'RequestID '"></span>
                        </a>
                    </th>
                    <th>
                        <a href="#" data-ng-click="sorting='PARNumber '; reverse = !reverse">PAR # <span
                            data-ng-show="sorting == 'PARNumber '"></span>
                        </a>
                    </th>
                    <th>
                        <a href="#" data-ng-click="sorting='ProgramName '; reverse = !reverse">Program <span
                            data-ng-show="sorting == 'ProgramName '"></span>
                        </a>
                    </th>
                    <th>
                        <a href="#" data-ng-click="sorting='FullName '; reverse = !reverse">Requestor <span
                            data-ng-show="sorting == 'FullName '"></span>
                        </a>
                    </th>
                    <th>
                        <a href="#" data-ng-click="sorting='DepartmentName '; reverse = !reverse">Department <span
                            data-ng-show="sorting == 'FullName '"></span>
                        </a>
                    </th>

                    <th>
                        <a href="#" data-ng-click="sorting='PONo'; reverse = !reverse">PO # 
                        </a>
                    </th>
                    <th>
                        <a href="#" data-ng-click="sorting='StatusID '; reverse = !reverse">PRStatus<span
                            data-ng-show="sorting == 'StatusID '"></span>
                        </a>
                    </th>
                    <th>
                        <a href="#" data-ng-click="sorting='Amount '; reverse = !reverse">Total Amount<span
                            data-ng-show="sorting == 'Amount '"></span>
                        </a>
                    </th>
                    <th>
                        <a href="#" data-ng-click="sorting='InboxLearUID '; reverse = !reverse">Last Action<span
                            data-ng-show="sorting == 'InboxLearUID '"></span>
                        </a>
                    </th>
                </tr>

                <tr data-ng-repeat="model in models  | orderBy: sorting:reverse | filter : filterAllColumns | filter : filterOptions ">
                    <td>{{jsonDatetotext(model.RequestDate) | date:'MM/dd/yyyy'}}</td>
                    <td>
                        <a href="#" data-toggle="modal" data-target="#basicModalContent" data-ng-click="getSelectedPR(model)">{{model.RequestID}}
                        </a>
                    </td>
                    <td>{{model.PARNumber }}</td>
                    <td>{{model.ProgramName }}</td>
                    <td>{{model.FullName }}</td>
                    <td>{{model.DepartmentName | uppercase}}</td>
                    <td>{{model.PONo}}</td>
                    <td>{{StatusList[model.StatusID] | uppercase}}</td>
                    <td class="totalAmount"><span class="pull-right">{{model.TotalAmount | number:2}}</span>
                    </td>
                    <td>{{model.InboxLearUID | lowercase}}</td>
                </tr>
            </table>
        </div>
        <!-- /.Modal Na ni -->
        <div class="modal fade" id="basicModalContent" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"
            aria-hidden="true">
            <div class="modal-dialog">
                <div class="modal-content">
                    <div class="modal-header">
                        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
                    </div>
                    <div class="modal-body" id="exportablePRItems">
                        <div class="table-responsive">
                            <table class="table table-striped table-bordered table-hover" id="dataTables-example">
                                <thead>
                                    <tr>
                                        <th>Item Code
                                        </th>
                                        <th>Item Description
                                        </th>
                                        <th>Supplier 
                                        </th>
                                        <th>Account
                                        </th>
                                        <th>Currency
                                        </th>
                                        <th>Amount
                                        </th>
                                        <th>(USD) Amount
                                        </th>
                                    </tr>
                                </thead>
                                <tbody data-ng-repeat="selectedPR in selectedModal.ItemList">
                                    <tr>
                                        <td>{{selectedPR.PartNumber}}</td>
                                        <td>{{selectedPR.PartDesc}}</td>
                                        <td>{{selectedPR.SupplierID }}</td>
                                        <td>{{selectedPR.AccountType}}</td>
                                        <td>{{selectedPR.CurrName }}</td>
                                        <td data-ng-model="amount" class="amount">{{selectedPR.Amount | number:2}}</td>
                                        <td>{{selectedPR.AmountUSD}}</td>
                                    </tr>
                                </tbody>
                                <tr>
                                    <td><span class="pull-right"><i class="glyphicon glyphicon-plus-sign"></i></span></td>
                                    <td colspan="3"><b>{{selectedModal.RequestID}}</b> </td>
                                    <td colspan="1"><b>Total :  </b></td>
                                    <td colspan="2">{{selectedModal.ItemList | sumbykey : 'Amount' | number:2}}</td>
                                </tr>
                            </table>
                        </div>
                        <footer>
                            <br />
                            <button data-ng-click="exportDataItems()" class="btn btn-warning"><i class="glyphicon glyphicon-export"></i>Export Item </button>
                        </footer>
                    </div>
                    <div class="modal-footer">
                        <button id="btnModalCancel" type="button" class="btn btn-default" data-dismiss="modal">
                            Close</button>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
谁能帮我调查一下这些代码,以便我可以继续我的下一步?

数据是Null在我的情况下,在我的列表.添加

我认为问题在于将十进制类型转换为双进位类型。如果21和22的值返回DbNull,则不能将该类型转换为double类型。我建议:

  1. 确保索引21和22处的值返回有效的十进制数。您可以使用sql查询中的IsNull()函数来完成此操作。
  2. 尝试使用reader.GetDouble(21)和reader.GetDouble(22)代替类型转换,如果你的意图是获得双精度值。

或者,您可以通过将对象初始化代码提取成更小的部分来进行一些调试:

        var npri = new NomsPRItem();
        npri.RequestID = key;
        npri.PartDesc = reader.GetString(17);
        npri.PartNumber = reader.GetString(23);
        npri.SupplierID = reader.GetString(18);
        npri.FullName = reader.GetString(7);
        npri.AccountType = reader.GetString(19);
        npri.CurrName = reader.GetString(20);
        npri.PartQuantity = (double)reader.GetDecimal(21);
        npri.PiecePrice = (double)reader.GetDecimal(22);
        npri.Amount = dAmount;

这将指向导致问题的列索引。

最好使用IsDBNull ..就像这个:

                        RequestID = key,
                        PartDesc = reader.IsDBNull(17) ? null : reader.GetString(17),
                        PartNumber = reader.IsDBNull(23) ? null : reader.GetString(23),
                        SupplierID = reader.IsDBNull(18) ? null : reader.GetString(18),
                        FullName = reader.IsDBNull(7) ? null : reader.GetString(7),
                        AccountType = reader.IsDBNull(19) ? null :  reader.GetString(19),
                        CurrName = reader.IsDBNull(20) ? null :  reader.GetString(20),
                        PartQuantity = (double)reader.GetDecimal(21),
                        PiecePrice = (double)reader.GetDecimal(22),
                        Amount = dAmount

我希望它能帮到你