C# 定义数据库驱动的DataGridView的列控件

C# 定义数据库驱动的DataGridView的列控件,c#,.net,winforms,C#,.net,Winforms,我使用DataGridView查看和编辑PostgreSQL数据库中的数据,这很好。我想通过选择正确的控件来输入数据,从而使它更加用户友好。具体来说,我想在列中创建一个组合框,让用户快速搜索和选择一个值 为此,我想我需要EditingControlShowing事件来填充组合框。但是,我得到的列是DataGridViewTextBoxColumn类型,因此相应的e.Control是一个TextBox而不是ComboBox 我从不初始化这些列,因为它们来自数据库中的视图。如何将列强制转换/初始化为

我使用DataGridView查看和编辑PostgreSQL数据库中的数据,这很好。我想通过选择正确的控件来输入数据,从而使它更加用户友好。具体来说,我想在列中创建一个组合框,让用户快速搜索和选择一个值

为此,我想我需要EditingControlShowing事件来填充组合框。但是,我得到的列是DataGridViewTextBoxColumn类型,因此相应的e.Control是一个TextBox而不是ComboBox

我从不初始化这些列,因为它们来自数据库中的视图。如何将列强制转换/初始化为DataGridViewComboBoxColumn

这是我填充DataGridView的方式:


getView返回一个可以从NpgsqlDataAdaper获取的数据表。

因为您想使用DataGridViewTextBoxColumn以外的其他内容,所以需要将AutoGenerateColumns设置为false,并自己实际定义这些列。定义它们时,请为相应字段选择DataGridViewComboBox列


这可以在代码中完成,也可以在设计器中完成,基于您的问题,我认为您应该可以通过设计器轻松完成。

因为您希望使用DataGridViewTextBoxColumn以外的其他内容,所以需要将AutoGenerateColumns设置为false,并自己实际定义列。定义它们时,请为相应字段选择DataGridViewComboBox列


这可以在代码中完成,也可以在设计器中完成,基于您的问题,我认为您应该可以通过设计器轻松完成。

您应该分两步完成。 1.首先,正如Michael所提到的,您应该将AutoGenerateColumns设置为false,然后使用properties中的datagrid view columns选项创建所需的列 2.然后,您应该循环浏览记录,并为相应的列分配适当的值


<>如果你在网格视图中显示了数百条记录,那么你就不应该考虑使用服务器端分页。

你应该在2个步骤中完成。 1.首先,正如Michael所提到的,您应该将AutoGenerateColumns设置为false,然后使用properties中的datagrid view columns选项创建所需的列 2.然后,您应该循环浏览记录,并为相应的列分配适当的值


<> P>在网格视图中有数百个记录,而不应考虑使用服务器端分页。

我不能在设计器中执行,因为几乎所有的功能和视图都在DB中。我希望能够编辑数据库并在应用程序中反映这些更改。您应该这样做,但我无法在设计器中这样做,因为几乎所有功能和视图都在数据库中。我希望能够编辑数据库,并将这些更改反映在应用程序中
dgView.DataSource = getView();