2015-12-18 2 views
1

У меня есть datagridview, связанный со списком объектов «CarColor». Я пытаюсь добавить дополнительный столбец в dataGridView, который берет свойство Name каждого CarColor и отображает локализованную версию.Добавить столбец с производными данными в DataGridView

В настоящее время у меня есть метод расширения, который создает столбец и заполняет его правильными значениями, но каждый раз, когда dataGridView меняет видимость или данные, все ячейки в столбце Локализованное имя становятся пустыми. До сих пор мне удалось обходное решение, запустив метод расширения в событиях VisibileChanged и DataSourceChanged данныхGridView. Это громоздко, особенно если я пытаюсь повлиять на DataGridView в другом элементе управления (например, в диалоговом окне).

Я читал, что использование DataGrid является опцией путем установки значения «Expression» нового столбца. Однако я не знаю, можно ли преобразовать список в DataGrid или преобразовать DataGridView в DataGrid.

Как я могу гарантировать, что значения таблицы локализованного имени не будут стерты?

+0

Возможно, вы имеете в виду «DataTable», и вы ошибочно сказали «DataGrid»? –

+0

Если у вас есть «Список », вам не нужен «DataTable», просто добавьте новое свойство в «CarColor», которое возвращает локализованное значение его свойства «Имя». –

+0

Дайте мне знать, если у вас есть какие-либо вопросы по поводу ответа или если вы считаете это полезным :) –

ответ

0

Если у вас есть List<CarColor>, вам не нужно DataTable, чтобы добавить новый вычисленный столбец. Вы можете просто добавить новое свойство в CarColor, которое возвращает желаемое вычисленное значение или в вашем случае локализованное значение его свойства Name.

public partial class CarColor 
{ 
    publlic string LocalizedName 
    { 
     get 
     { 
      return GetLocalizedName(this.Name); 
     } 
    } 

    private string GetLocalizedName(string name) 
    { 
     // put the logic for localizing the name here 
    } 
} 

Примечание:

  • Я написал partial, так что вы можете позволить оригинальный CarColor класс нетронутым, просто добавьте этот частичный в том же пространстве имен, или если вы предпочитаете, просто добавить тело код класса к оригиналу CarColor.

  • Если CarClass не в вашем классе, и вы не измените его код, вы можете создать класс ViewModel для CarColor и использовать эту же идею, чтобы представлять это свойство.

+0

ViewModel звучит как то, что мне нужно. Я буду смотреть в него. Благодаря! – Grug