C# 在运行时将Textboxcell更改为ComboxCell
我正在使用MySQL.net连接器使用C# 在运行时将Textboxcell更改为ComboxCell,c#,winforms,datagridview,C#,Winforms,Datagridview,我正在使用MySQL.net连接器使用Mysqladapter和Datagridview.Bindingsource填充Datagridview。这很好,但我想改变一件事: 在填充到DataGridview的表中,有一个文本类型的列。此列中的单元格在datagridview中显示为Datagridviewtextboxcell,但我想将其更改为DataGridViewComboxCell(用户应在~10项之间进行选择) 我已经试过很多次了,但都没有达到应有的效果。DataGridview中的列是
Mysqladapter
和Datagridview.Bindingsource
填充Datagridview。这很好,但我想改变一件事:
在填充到DataGridview的表中,有一个文本类型的列。此列中的单元格在datagridview中显示为Datagridviewtextboxcell
,但我想将其更改为DataGridViewComboxCell
(用户应在~10项之间进行选择)
我已经试过很多次了,但都没有达到应有的效果。DataGridview中的列是只读的,我无法将DefaultCellTemplate
更改为DataGridViewComboxCell
,因为它不继承DataGridviewTextboxcell
我也试过这个:我想我的问题可以通过这种方式解决,但有了这个解决方案,我还有一个问题:它没有显示下拉按钮
任何帮助都将不胜感激。在您链接的答案中,行前:
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex] = cb;
尝试添加:
cb.DisplayStyle = DataGridViewComboBoxDisplayStyle.CHOOSE_ONE;
cb.FlatStyle = FlatStyle.CHOOSE_ONE;
我不确定你到底想如何设计你的组合框,所以不要“选择一个”,而是尝试一下样式,选择你想要的样式
编辑:似乎您根本没有将其更改为组合框。试试这个:
var values = new List<string> { "a", "b", "c" };
var cell = new DataGridViewComboBoxCell();
cell.DataSource = values;
dataGridView1[col, row] = cell;
var值=新列表{“a”、“b”、“c”};
var cell=新的DataGridViewComboxCell();
cell.DataSource=值;
dataGridView1[col,row]=单元格;
要执行此操作,需要向网格中添加新的DataGridViewComboBoxColumn,然后隐藏文本框列
我在下面使用代码展示了这一点,但您也可以使用设计器进行同样的操作(只需使用设计器设置我在代码中设置的属性)
需要注意的关键事项是:
- DataPropertyName是指网格数据源的一个属性,很可能是您的文本框源
- 您需要为列提供自己的数据源
- DisplayMember和ValueMember指列的数据源
// Here I do this in the form constructor - there are other places you can do it
public Form1()
{
InitializeComponent();
DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();
// You need to set some properties on the column to make it work
// Datasource is the source (usually a list) of objects to show in the combobox
col.DataSource = dataSource;
col.DataPropertyName = "ColumnInGridDataSource";
col.DisplayMember = "DisplayProperty";
col.ValueMember = "ValueProperty";
dataGridView1.Columns.Add(col);
// This hides the textboxcolumn
dataGridView1.Columns["YourTextBoxColumnName"].Visible = false;
}
您希望此列中的每个单元格都是组合框,还是只希望某些单元格,其余单元格都是文本?我希望此列中的每个单元格都是组合框。Thx,但它不起作用,我尝试了所有的显示样式和平面样式,结果仍然是:我觉得它根本不像组合框。查看编辑。这可能还不错,但如果我这样做的话,使用
MySQLDataAdapter
更新将不再有效。@tearsdontfall为什么不起作用?这段代码设计用于数据绑定-设置DataPropertyName更新备份数据源,然后像以前一样使用dataadapter进行更新。好吧,这可能是我的失败,我在没有更改DataPropertyName和其他属性的情况下完成了C&P。明天再试一次。。。愚蠢的我(:这些属性指的是要用作组合框显示值(向用户显示的内容)和实际值(用于传递到DataPropertyName列的内容)的属性两者都指向列的数据源,而不是网格的数据源。您的意思是显示的属性已经是您想要的了吗?在这种情况下,不必麻烦-value属性可能是必需的,不过,如果它都可以工作,也不必麻烦设置它。