如何使这个C#函数可重用?

时间:2014-12-11 13:35:06

标签: c# winforms datagridview

我正在使用代码格式化此帖子中提供的datagridview中的时间戳:

Format TimeSpan in DataGridView column

...而且我对要添加到datagridview_Cellformatting事件的代码有疑问。

以下是有问题的代码:

private void dataGridView_CellFormatting(object sender, 
                                       DataGridViewCellFormattingEventArgs e)
{
    var formatter = e.CellStyle.FormatProvider as ICustomFormatter;
    if (formatter != null)
    {
        e.Value = formatter.Format(e.CellStyle.Format, 
                                   e.Value, 
                                   e.CellStyle.FormatProvider);
        e.FormattingApplied = true;
    }
}

这很好用,但我的问题是,鉴于我在我的应用程序中进行的数据绑定的性质,我需要在十个不同的datagridview对象上调用此方法。

您会注意到此方法会捕获事件目标,这意味着我目前在我的代码中使用此方法的十个单独副本。必须有一种方法可以将其整合到一个方法中,我可以在CellFormatting事件的任何datagridviews上调用它。

有谁知道如何做到这一点?

2 个答案:

答案 0 :(得分:2)

使用扩展方法。

namespace Foo 
{
    public static class DataGridExtensions
    {
        public static void FormatViewCell(this DataGridViewCellFormattingEventArgs e)
        {
            var formatter = e.CellStyle.FormatProvider as ICustomFormatter;
            if (formatter != null)
            {
                e.Value = formatter.Format(e.CellStyle.Format, 
                                           e.Value, 
                                           e.CellStyle.FormatProvider);
                e.FormattingApplied = true;
            }
        }
    }
}

在数据网格上进行CellFormatting

using Foo;

private void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    e.FormatViewCell();
}

答案 1 :(得分:1)

您可以使用存储在辅助类中的静态方法,如下所示:

private static void AddCellFormatting(DataGridView dgView)
{
    dgView.CellFormatting += (sender, e) => 
    {
        var formatter = e.CellStyle.FormatProvider as ICustomFormatter;
        if (formatter != null)
        {
            e.Value = formatter.Format(e.CellStyle.Format, e.Value, e.CellStyle.FormatProvider);
            e.FormattingApplied = true;
        }
    }
}

可以在InitializeComponent()之后从构造函数中调用该方法。

或者只是将您的方法用作静态方法并从设计器中添加它。