2014-09-15 4 views
0

У меня странный вопрос. У меня есть DataGridView, и у меня есть 7 столбцов, заполненных двойниками. У меня есть 7 массивов double в главном классе, который содержит информацию.Можно ли найти переменную из datagridview ColumnName?

Как я могу сделать что-то вроде этого:

if(dgvValues.Columns[dgvValues.SelectedCells[0].ColumnIndex].Name == this.Variables.Name) 
{ 
     this.Variables.Name[dgvValues.SelectedCells[0].RowIndex] = Convert.ToDouble(dgvValues.SelectedCells[0].Value.ToString()); 
} 

Я знаю, что я могу сделать это с делом, но мне интересно, есть короткий способ сделать это. Потому что, если у меня 20 столбцов, я должен сделать 20 случаев.

ответ

1

Поместите эти значения в Dictionary<string, List<double>>!

Теперь вы можете получить доступ к каждому по именам столбцов DGV ..:

// a named collection of lists of doubles: 
Dictionary<string, List<double>> values = new Dictionary<string, List<double>>(); 

// set up the values-dictionary from column names: 
foreach (DataGridViewColumn column in dataGridView1.Columns) 
{ 
    values.Add(column.Name, new List<double>()); 
} 

// load all values into the values-dictionary from the dvg: 
foreach (DataGridViewRow row in dataGridView1.Rows) 
{ 
    foreach (DataGridViewCell cell in row.Cells) 
     values[cell.OwningColumn.Name].Add(Convert.ToDouble(cell.Value)); 
} 

// after the List is filled (!) you can access it like an array: 
// load selected values into the values-dictionary from the dvg: 
foreach (DataGridViewCell cell in dataGridView1.SelectedCells) 
{ 
    values[cell.OwningColumn.Name][cell.RowIndex] = Convert.ToDouble(cell.Value); 
} 

// reload selected values from the corresponding slots in the values-dictionary: 
foreach (DataGridViewCell cell in dataGridView1.SelectedCells) 
{ 
    cell.Value = values[cell.OwningColumn.Name][cell.RowIndex]; 
} 

Обратите внимание, что вы должны быть заполнены списками полностью со всеми строками, чтобы получить доступ правильных слотов, когда вы используете индексатор массив!

+0

Я думал об этом, но есть ли другой способ сделать это? – Georgi

+0

Всегда есть отражение, но это, вероятно, самый эффективный способ доступа к именованным переменным. Любые причины, по которым вам это не нравится? – TaW

+0

Ну, я не сказал, что мне это не нравится, просто интересно, есть ли более эффективный способ. Спасибо, отметив как ответ. :) – Georgi

Смежные вопросы