-1

我正在尝试修改另一位先生编写的一些代码,这些代码生成各种格式的平面文件。所讨论的特定平面文件是一个位置定义的文件 - 值 X 位于位置 10,值 Y 位于 17,值 Z 位于 26,等等。

当用户单击“创建文件”按钮时,将调用此提取:

ReadOnlyCollection<IDataRow> dataRows = null;
try
{
    dataRows = FlatFileExporter.MerrillLynch.GetMerrillLynchData(mPostSeq, mPaycheckDate, mPayrollStartDate, mPayrollEndDate);
}
catch (Exception ex)
{
    Response.Write((ex.InnerException != null ? ex.InnerException.Message + "; " : "") + ex.Message);
}

此时,我知道我有这个名为 dataRows 的 ReadOnlyCollection。它是从以下例程中的存储过程“GetMerrillLynchData”填充的:

public static ReadOnlyCollection<IDataRow> GetMerrillLynchData(string postSeq, DateTime paycheckDate, DateTime payrollStartDate, DateTime payrollEndDate)
{
    string dateFormat = "MM/dd/yyyy";
    string query = string.Format(
        "exec GatherMerrillLynchPayrollData {0}, '{1}', '{2}', '{3}'",
        "'" + postSeq + "'",
        paycheckDate.ToString(dateFormat),
        payrollStartDate.ToString(dateFormat),
        payrollEndDate.ToString(dateFormat)
    );

    return FileGenerator.GetDataRows(query, MerrillLynchMeta.Columns, dict => new MerrillLynchDataRow(dict));
}

ReadOnlyCollection 将被提供给 FlatFileGenerator,它将输出格式正确的文件。

问题:我们的薪资管理员希望能够在将该文件通过 FTP 传送到美林证券之前对其进行编辑。我想知道是否可以在将数据发送到 FlatFileGenerator 之前打开和编辑 dataRows(可能在 GridView 中?)。然后在她完成编辑后,我想将她的编辑保存回 dataRows 并继续编写代码。

这可以做到吗?

4

2 回答 2

1

如果 ReadOnlyCollection 是 Datarows 的集合,只是转换为 IDataRow 接口,这可能是 Datarow 类的子集,您可以将集合用作 Datagrid 中的 ItemsSource 并查看您得到的内容。之后,我认为您必须将数据网格设置为允许编辑,并且将修改集合的内容。为了帮助您更多,我们需要了解 IDataRow 接口是如何制作的,以及 ReadOnlyCollection 使用哪种类型的基本集合。如果集合真的是只读的,要编辑它,您可能需要将其内容放入非只读集合中,并使用它来编辑数据,然后从修改后的数据创建一个新的 ReadOnlyCollection 并使用它来创建文件。高温高压

于 2015-08-26T14:04:02.510 回答
1

解决方案1:

制作数据行的读写副本:

return new List<IDataRow>(dataRows);

当然,如果您需要保存更改后的集合,则必须手动进行。

解决方案2:

如果ReadOnlyCollection包装了一个重要的 BL 集合对象,它是可写的,并且在集合更新时维护更改,那么您可能想要提取原始集合。这实际上是一个 hack,根本不是一个好的解决方案:

FieldInfo wrappedCollection = dataRows.GetType().GetField("list",
    BindingFlags.Instance | BindingFlags.NonPublic);
return (IList<IDataRow>)wrappedCollection.GetValue(dataRows);
于 2015-08-26T14:17:41.153 回答