2015-03-03 4 views
2

Я использую DevExpress для создания сетки, но я пытаюсь создать вспомогательные методы, чтобы упростить объем генерируемого кода. Например, следующий простой пример создает столбец сетки:C# Параметры действия в методах расширения

settings.Columns.Add(column => 
{ 
    column.FieldName = "StatusId"; 
    column.Caption = "Status"; 
    column.Width = Unit.Percentage(20); 
}); 

Я хочу использовать методы расширения, чтобы получить следующее, что позволяет разработчику упростить основную работу, но до сих пор получить доступ к дополнительным настройкам:

settings.AddColumn("StatusId", "Status", column => 
{ 
    column.Width = Unit.Percentage(20); 
}); 

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

Что бы мой метод расширения выглядел так, чтобы поддерживать этот формат? Ему понадобится создать столбец с установленными настройками по умолчанию и добавить его в коллекцию колонок. Это, насколько я получаю:

public static void AddColumn(this GridViewSettings settings, string fieldName, string caption, Action<MVCxGridViewColumn> column) 
{ 
    //...? 
} 
+0

Для того чтобы вам код для работы код внутри должен перезванивать столбец Action. Это означает, что вы должны иметь MVCxGridViewColumn. Я не знаю, что это такое, но ты делаешь. Какая конкретная проблема у вас есть? Вы не знаете, как создать или получить экземпляр MVCxGridviewColumn? –

ответ

2

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

public static void AddColumn(this GridViewSettings settings, string fieldName, string caption, Action<MVCxGridViewColumn> additionalConfig = null) 
{ 
    var column = new MVCxGridViewColumn 
    { 
     FieldName = fieldName, 
     Caption = caption 
    }; 

    if (additionalConfig != null) 
    { 
     additionalConfig(column); 
    } 

    settings.Columns.Add(column); 
} 

Вызов его с

settings.AddColumn("StatusId", "Status", column => 
{ 
    column.Width = 20; 
}); 

или

settings.AddColumn("StatusId", "Status"); 
+0

Мне нравится дополнительное использование и лучшее именование параметра – Savage

5
public static void AddColumn(
    this GridViewSettings settings, 
    string fieldName, 
    string caption, 
    Action<MVCxGridViewColumn> action 
) 
{ 
    settings.Columns.Add(column => 
    { 
     column.FieldName = fieldName; 
     column.Caption = caption; 
     action(column); 
    }); 
} 
+0

К сожалению, это должно быть 'action (column);' Конечно, ответ обновляется. –

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