Преобразование содержимого DataGridView в список в C # - PullRequest
12 голосов
/ 26 ноября 2010

Каков наилучший способ получить содержимое DataGridView и поместить эти значения в список в C #?

Ответы [ 5 ]

13 голосов
/ 26 ноября 2010
        List<MyItem> items = new List<MyItem>();
        foreach (DataGridViewRow dr in dataGridView1.Rows)
        {
            MyItem item = new MyItem();
            foreach (DataGridViewCell dc in dr.Cells)
            { 
                ...build out MyItem....based on DataGridViewCell.OwningColumn and DataGridViewCell.Value  
            }

            items.Add(item);
        }
5 голосов
/ 12 апреля 2014

Если вы связываете свой список с использованием DataSource, вы можете преобразовать обратно с помощью:

List<Class> myClass = DataGridView.DataSource as List<Class>;
4 голосов
/ 26 ноября 2010
var Result = dataGridView1.Rows.OfType<DataGridViewRow>().Select(
            r => r.Cells.OfType<DataGridViewCell>().Select(c => c.Value).ToArray()).ToList();

или получить строковый словарь значений

var Result = dataGridView1.Rows.OfType<DataGridViewRow>().Select(
            r => r.Cells.OfType<DataGridViewCell>().ToDictionary(c => dataGridView1.Columns[c.OwningColumn].HeaderText, c => (c.Value ?? "").ToString()
                ).ToList();
4 голосов
/ 26 ноября 2010

Или обычным способом

var list = (from row in dataGridView1.Rows.Cast<DataGridViewRow>()
           from cell in row.Cells.Cast<DataGridViewCell>()
           select new 
           {
             //project into your new class from the row and cell vars.
           }).ToList();
1 голос
/ 05 января 2017

IEnumerable.OfType<TResult> метод расширения может быть вашим лучшим другом здесь. Вот как я мог бы сделать это через запрос LINQ:

List<MyItem> items = new List<MyItem>();
dataGridView1.Rows.OfType<DataGridViewRow>().ToList<DataGridViewRow>().ForEach(
                row =>
                {
                    foreach (DataGridViewCell cell in row.Cells)
                    {
                        //I've assumed imaginary properties ColName and ColValue in MyItem class
                        items.Add(new MyItem { ColName = cell.OwningColumn.Name, ColValue = cell.Value });
                    }
                });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...