public void SetFromCsv()

in src/IdFix/Controls/IdFixGrid.cs [305:396]


        public void SetFromCsv(StreamReader reader)
        {
            this.Reset();
            this._filledFromResults = false;
            this._pageCount = 1;

            var parser = new TextFieldParser(reader);
            parser.Delimiters = new string[] { "," };
            parser.TrimWhiteSpace = true;
            parser.HasFieldsEnclosedInQuotes = true;
            parser.TextFieldType = FieldType.Delimited;

            if (parser.EndOfData)
            {
                // they gave us an empty stream
                return;
            }

            try
            {
                // the first line is expected to have headers so we clear it
                var headers = parser.ReadFields().Select(f => f.ToUpper()).ToArray();
                var mappers = new List<Action<DataGridViewRow, string>>(headers.Length);
                Func<string, Action<DataGridViewRow, string>> mappingBinder = (string field) => (row, value) => row.Cells[field].Value = value;

                for (var i = 0; i < headers.Length; i++)
                {
                    switch (headers[i])
                    {
                        case "DISTINGUISHEDNAME":
                            mappers.Add(mappingBinder(StringLiterals.DistinguishedName));
                            break;
                        case "COMMONNAME":
                            mappers.Add(mappingBinder(StringLiterals.CommonName));
                            break;
                        case "OBJECTCLASS":
                            mappers.Add(mappingBinder(StringLiterals.ObjectClass));
                            break;
                        case "ATTRIBUTE":
                            mappers.Add(mappingBinder(StringLiterals.Attribute));
                            break;
                        case "ERROR":
                            mappers.Add(mappingBinder(StringLiterals.Error));
                            break;
                        case "VALUE":
                            mappers.Add(mappingBinder(StringLiterals.Value));
                            break;
                        case "UPDATE":
                            mappers.Add(mappingBinder(StringLiterals.Update));
                            break;
                        case "PROPOSEDACTION":
                            mappers.Add(mappingBinder(StringLiterals.ProposedAction));
                            break;
                        case "ACTION":
                            mappers.Add((DataGridViewRow row, string value) =>
                            {
                                row.Cells[StringLiterals.Action].Value = new string[] { "EDIT", "REMOVE", "COMPLETE", "UNDO", "FAIL" }.Contains(value) ? value : string.Empty;
                            });
                            break;
                    }
                }

                // now loop on all the rows and return them to the grid
                while (!parser.EndOfData)
                {
                    var row = this.Rows[this.Rows.Add()];
                    var fields = parser.ReadFields();

                    for (var i = 0; i < fields.Length; i++)
                    {
                        // map the field into the row
                        mappers[i](row, fields[i]);
                    }
                }
            }
            catch (Exception err)
            {
                this.OnStatusUpdate?.Invoke(StringLiterals.Exception + "Import CSV Line: [" + parser.LineNumber + "] " + err.Message);
            }
            finally
            {
                parser.Dispose();
            }

            if (this.RowCount >= 1)
            {
                this.Sort(this.Columns[StringLiterals.DistinguishedName], ListSortDirection.Ascending);
                this.CurrentCell = this.Rows[0].Cells[StringLiterals.DistinguishedName];
            }

            this._totalResults = this.RowCount;
        }