C# “链接”;“数据绑定完成”;具有自定义输入的事件处理程序

C# “链接”;“数据绑定完成”;具有自定义输入的事件处理程序,c#,datagridview,lambda,event-handling,C#,Datagridview,Lambda,Event Handling,我在一个Windows窗体项目中工作,我必须动态创建DataGridView,用一个DataTable填充它们,然后根据另一个DataTable格式化单元格。代码如下所示: my_forms_function(){ DataGridView dgv = new DataGridView(); DataTable values = get_values(); DataTable formatting = get_formatting(); dgv.DataSource = valu

我在一个Windows窗体项目中工作,我必须动态创建DataGridView,用一个DataTable填充它们,然后根据另一个DataTable格式化单元格。代码如下所示:

my_forms_function(){
  DataGridView dgv = new DataGridView();
  DataTable values = get_values();
  DataTable formatting = get_formatting();
  dgv.DataSource = values;
  format_grid(dgv, formatting);
  WindowsForm.Add(dgv);
}
我的问题是,在绑定数据源之后,在DataGridView完全配置之前调用format_grid方法,因此在格式化过程中我不能像需要的那样引用单个单元格。因此,我需要将format_grid方法(或其功能)链接到DataBindingComplete事件。我一直在四处搜索,发现了像和这样的东西


Lambda语句似乎是一种方法,但我一直无法使它起作用。总有一些语法错误阻止我编译。有人能解释一下怎么做吗?

我相信你已经走上正轨了,这只是语法正确的问题。尝试:

dgv.DataBindingComplete += (sender, e) => format_grid(dgv, formatting);
我没有一个完整的示例来复制您的代码,但通过以下简单的示例,它可以工作:

string hello = "Hello World!";
DataTable values = GetValues();
dataGridView1.DataSource = values;
dataGridView1.DataBindingComplete += (sender, e) => this.DoStuff(hello);

private void DoStuff(string text)
{
  Console.WriteLine(text);
}

起初对我不起作用,但我终于明白了原因。我正在使用的方法(“my_forms_function()”)也是一个事件触发的方法。所以“sender”和“e”都已经在方法中定义了,这就是我得到语法错误的原因。因此,我更改了父方法中“sender”和“e”的名称,然后可以按照您的建议使用lambda语句。很好用!:)