- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我对 C# 还是有点陌生,但我使用的是 Winforms 并且我有一个 DataGridView,它连接到数据源并且正在正确填充。
我还在运行时添加了一个 ComboBoxColumn。此 ComboBoxColumn 连接到数据源,设置了 displaymember 和 valuemember,设置了标题文本,然后将列添加到数据网格。连接工作正常,当用户单击时,组合框按预期填充。
当用户在网格中完成一个新行时,他显然会选择组合框中的项目,然后整行在完成后更新到我的数据库。
我的问题是:当再次打开或重新绘制此数据网格时,由于数据源属性,它会被填充,但我如何让组合框单元格显示他最初选择的值,而不仅仅是一个空白框。我知道从数据库中获取值并输入值的代码。理想的情况是我可以将该变量放在组合框的显示中。请记住,组合框仍然是数据绑定(bind)的,以便用户可以根据需要编辑值?
我知道在普通的组合框控件中,我应该只设置 .Text 属性。但是 DataGridViewComboBox 没有相同的属性。
这里是实际数据连接和添加comboBoxColumn的代码:
public void AddComboBoxColumn(DataGridView datagridName, DataTable table, string headerText, int columnIndex)
{
DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn();
GetDisplayAndValueMembers(table, headerText); //Calls method that gets the datasource, displaymember, valuemember depending on column
column.DataSource = tableRef; //sets datasource to table referenced by column
column.DisplayMember = displayMember; //sets displaymember
column.ValueMember = valueMember; //sets valuemember
column.HeaderText = headerText; //changes headertext to displayed text
if (newColumnIndex == 0)
datagridName.Columns.Add(column); //added to end of datagrid
else
{
datagridName.Columns.RemoveAt(columnIndex);
datagridName.Columns.Insert(newColumnIndex, column); //added in specific index if needed
}
}
这仅显示下拉列表的数据连接。显然有很多方法正在使用大量代码。但这不是问题,因为它工作正常。我不知道如何解决将先前选择的项目实际显示为组合框文本的问题?
最佳答案
听起来您正在寻找的是 ComboBoxColumn
的 DataPropertyName
属性。此属性在 DataGridView
的 DataSource
和 ComboBoxColumn
的选定值之间创建绑定(bind)。
例如,假设您在组合框中显示了一个产品列表。然后,您的 DataGridView
DataSource
中也会有一个 ProductId。像这样:
// There Orders is a data table coming from the db which includes the product id column
dataGridView1.DataSource = Orders;
// You set up your column just the same, with the DisplayMember and ValueMember
DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn();
GetDisplayAndValueMembers(table, headerText);
column.DataSource = tableRef; //sets datasource to table referenced by column
column.DisplayMember = displayMember; //sets displaymember
column.ValueMember = valueMember; //sets valuemember
column.HeaderText = headerText; //changes headertext to displayed text
//Now you also set the DataPropertyName
column.DataPropertyName = "ProductId"; // this is the name of a column or property from the grid datasource
dataGridView1.Columns.Add(column);
通过 DataPropertyName
设置,您现在将在 ComboBoxColumn
和 DataGridView
之间进行数据绑定(bind)。
如果您的基础数据源绝对不能在其中包含组合框属性的值,那么您将需要在自定义代码中处理 ComboBoxColumn
的所有这些保存和值设置。
要设置 DataGridViewComboBoxCell
的选定值,您只需选择单元格,然后设置其 Value
属性即可。
dataGridView1.Rows["rowname"].Cells["columnname"].Value = valueFromDb;
关于c# - 如何更改动态添加的 DataGridViewComboBoxColumn 的组合框单元格的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6720727/
假设我拥有的数据是'valuenumber1'、'valuenumber2'、'valuenumber3'。 我有一个问题,如果'valueNumber2'或'valueNumber3'是一个问题,将
在我的 datagridview 中,当单击 datagridviewComboBoxColumn 以填充其下拉列表时,它没有显示我需要单击 2 次的下拉列表。第一次它只关注 datagridview
我有一本字典,它的键是三个字母的国家代码,值是国家的名称。 Dictionary CountryList=new Dictionary(); 我还有一个 DataGridView 和一个 DataTa
这个问题在这里已经有了答案: c# add a dgv row with a dataGridViewComboBoxCell (3 个答案) 关闭10 年前。 我有一个 DataGridView,
我正在使用带有 DataGridViewComboBoxColumn 的 DataGridView,我需要在组合框项的左侧添加图标。我目前正在使用 EditingControlShowing 事件以及
我正在使用 DataGridView 构建一个表,用户可以在其中从每个单元格的下拉列表中选择项目。为了简化问题,假设我有 1 列。我在设计器中使用 DataGridViewComboBoxColumn
我有一个带有几个 DataGridViewComboBoxColumns 的 DataGridView。 DataGridView 上有一个 CellEnter 事件处理程序,用于单击下拉组合框。 该
我正在尝试在 DataGridView 中设置一些内容。看起来这应该很简单,但我遇到了麻烦。我想显示三列: 代码ID 代号 带有 TypeName 的 DisplayMember 和 TypeID 的
在任何人将此标记为重复之前,请注意这与提出的问题不同 here , here和 here . 当您的 DataGridView 中有两个或多个 DataGridViewComboBoxColumn,并
嗨,我在运行时将数据绑定(bind)到 datagridview 组合框。但是我如何让它自动显示第一个项目呢?我无法从 DataGridViewComboBoxColumn 中找到 selectedi
我正在使用 DataGridView,它是使用设计器创建的,其中包含几列,包括 DataGridViewComboBoxColumn 列。 有点烦人的是我必须点击每个单元格两次甚至三次才能显示下拉列表
我创建了一个 DataGridView 对象,其中包含 DataGridViewComboBoxColumn 类型的列,以允许用户从下拉列表中选择值。例如,如果用户选择“高”,我想为组合框的背面着色。
我有一个 DataGridViewCobmoboxColumn那必须在屏幕的最右侧。单元格中的项目比单元格宽度宽,因此下拉列表也比单元格宽,因此用户可以看到顶部选择的内容。当列表下拉时,下拉列表的右侧
我试图用字符串列表填充 DataGridViewComboBoxColumn,然后根据它们在表单加载时的值选择其中一个。 人们认为这是一项简单的任务,但我就是做不对。 我正在用这样的字符串填充 Dat
我有一个 combobox 列的 datagridview。我填充组合框列。当我从组合框列中选择任何文本时,我需要在 for 循环中读取数据时获取值。 这里是dgFilter datagridview
假设我有两个表: work_hours work_hours_id | date | _project_id 1 1.2. 10 2
我有一个数据 GridView ,它是通过从 SQL 服务器获取数据来填充的。 gridview.Datasource = dataSet.Tables[0] -> 没问题。 在这个网格中,一列是 C
我正在编写一个小型应用程序来查看和编辑 mySQL 表。 我想将 ComboBox 输入放在 DataGridView 中,以从其他表中的外键中选择数据。 有什么方法可以做到吗? 到目前为止我只找到这
我需要检查某个值是否存在于 DataGridViewComboBoxColumn 中。问题是 DataGridViewComboBoxColumn.Items.Contains() 想要一个对象,我给
大家好,我已经将我的 datagridview 与 DataGridViewComboBoxColumn 绑定(bind)如下 DataGridViewComboBoxColumn clnStatus
我是一名优秀的程序员,十分优秀!