我正在使用代码格式化此帖子中提供的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上调用它。
有谁知道如何做到这一点?
答案 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()之后从构造函数中调用该方法。
或者只是将您的方法用作静态方法并从设计器中添加它。