C# 在GridView中更新ReadOnlyCollection

C# 在GridView中更新ReadOnlyCollection,c#,asp.net,gridview,readonly-collection,C#,Asp.net,Gridview,Readonly Collection,我试图修改另一位先生编写的一些代码,这些代码生成各种格式的平面文件。所讨论的特定平面文件是一个位置定义的平面文件-值X位于位置10,值Y位于位置17,值Z位于位置26,以此类推 当用户单击“创建文件”按钮时,将调用此提取: ReadOnlyCollection<IDataRow> dataRows = null; try { dataRows = FlatFileExporter.MerrillLynch.GetMerrillLynchData(mPostSeq, mPayc

我试图修改另一位先生编写的一些代码,这些代码生成各种格式的平面文件。所讨论的特定平面文件是一个位置定义的平面文件-值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的只读集合。它是通过以下例程中的存储过程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,FlatFileGenerator将输出正确格式的文件

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


可以这样做吗?

如果ReadOnlyCollection是一个数据行集合,只是转换到IDataRow接口,它可能是Datarow类的子集,那么您可能可以将该集合用作Datagrid中的ItemsSource,并使用所获得的内容。 在此之后,我假定您必须将datagrid设置为允许编辑,并且集合的内容将被修改。 为了帮助您了解更多信息,我们需要了解IDataRow接口是如何制作的,以及ReadOnlyCollection使用哪种类型的基集合。 如果集合确实是只读的,则要对其进行编辑,可能需要将其内容放在非只读集合中,并使用它编辑数据,然后从修改后的数据创建新的只读集合,并使用该集合创建文件。 HTH解决方案1:

创建数据行的读写副本:

return new List<IDataRow>(dataRows);

是的,这是可以做到的,但堆栈溢出不应该是一个获得免费解决方案的地方,所以请自己尝试一下,然后带着一个真正的问题回来,回答得相当严厉。两天来,我一直在努力解决这个问题,试图修改远远超出我理解范围的代码。这个问题是非常真实的,我不是在寻找你如此粗鲁地猜测的免费解决方案。我正在寻找一个不是你的人的善意指导。萨布丽娜,谢谢你的善意回复。我将创建一个DataGrid并将其指定为dataRows作为ItemsSource,然后看看会发生什么。正如我在上面对Thorarins提到的,这是我过去两天的做法——以某种方式调整一下,看看我能得到什么。另一个建议是:我确实尝试将ReadOnlyCollection更改为simply Collection,但我发现到处都是构建错误。试图把他们都追下去,但最终还是回到了起点。我可能需要再次沿着这条路走下去,努力跟踪问题。您不能简单地更改ReadOnlyCollection,它可能是在集合中实现该代码的人在您的某个库中实现的类,但您可以创建一个列表并将ReadOnlyCollection中的所有元素添加到该列表中,或者,如果ReadOnlyCollection允许,您可以使用Linq并使用selectTaffer创建列表,是的,我需要在将数据行传递到FlatFileGenerator之前保存编辑。我现在正在执行萨布丽娜的建议,如果我在那里没有得到任何乐趣,我会试试你上面的方法。一个黑客只要能用就好了-
FieldInfo wrappedCollection = dataRows.GetType().GetField("list",
    BindingFlags.Instance | BindingFlags.NonPublic);
return (IList<IDataRow>)wrappedCollection.GetValue(dataRows);