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;
}