- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在设置 DataGridViewComboBoxCell 的值时遇到问题。 datagridview 列与选项/值绑定(bind),但是当我尝试使用 dgv.Rows.Add 为 comboBoxCells 指定列值或单独设置单元格的值时,它会生成“DataGridViewComboBoxCell 值无效”错误。如果我为这些列添加一个包含空白值的行,选项将很好地显示在组合中。
我有一个对话框,它传递了一个简单对象 NDCRecord 的数组列表。
public class NDCRecord
{
public string NDCcode = "";
public string UnitQuantity = "";
public string UnitOfMeasurement = "";
public string Type = "";
public string Number = "";
}
在对话框中,数据网格以编程方式创建,然后重新填充。
public NationalDrugCodesForm(ref ArrayList ndcRecordsIn)
{
InitializeComponent();
ndcRecords = ndcRecordsIn;
SetupDataGridViewColumns();
PopulateForm();
}
设置:
private void SetupDataGridViewColumns()
{
// -----------------------------------------------------
// Add/Del column
// -----------------------------------------------------
DataGridViewButtonColumn dgvbcAddRemove = new DataGridViewButtonColumn();
dgvbcAddRemove.HeaderText = "Add";
dgvbcAddRemove.Text = "Add";
dgvbcAddRemove.Name = "Add";
DataGridViewCellStyle addButtonStyle = new DataGridViewCellStyle();
addButtonStyle.BackColor = Color.Blue;
addButtonStyle.ForeColor = Color.White;
dgvbcAddRemove.HeaderCell.Style = addButtonStyle;
dgvNDC.Columns.Add(dgvbcAddRemove);
// -----------------------------------------------------
// Additional Columns
// -----------------------------------------------------
dgvNDC.Columns.Add("NDCCode", "NDC Code");
dgvNDC.Columns.Add("UnitQuantity", "Unit Quantity");
DataGridViewComboBoxColumn unitOfMeasurement = new DataGridViewComboBoxColumn();
unitOfMeasurement.HeaderText = "Unit Of Measurement";
unitOfMeasurement.Name = "UnitOfMeasurement";
dgvNDC.Columns.Add(unitOfMeasurement);
DataGridViewComboBoxColumn type = new DataGridViewComboBoxColumn();
type.HeaderText = "Type";
type.Name = "Type";
dgvNDC.Columns.Add(type);
dgvNDC.Columns.Add("Number", "Prescription Number");
AddLine("Del", "", "", "", "", "");
BindUnitOfMeasurement((DataGridViewComboBoxCell)dgvNDC.Rows[0].Cells["UnitOfMeasurement"]);
BindType((DataGridViewComboBoxCell)dgvNDC.Rows[0].Cells["Type"]);
}
AddLine 函数:
private void AddLine(string buttonLabel, string ndcCode, string unitQuantity, string unitOfMeasurement, string type, string rxNumber)
{
dgvNDC.Rows.Add(new object[] { buttonLabel, ndcCode, unitQuantity, unitOfMeasurement, type, rxNumber });
}
绑定(bind)函数:
private void BindUnitOfMeasurement(DataGridViewComboBoxCell cb)
{
string[] Values = { "F2", "GR", "ME", "ML", "UN" };
string[] Choices = { "F2 - International Unit", "GR - Gram", "ME - Milligram", "ML - Milliliter", "UN - Unit" };
ControlManip.DataBindDDL(cb, Choices, Values);
}
private void BindType(DataGridViewComboBoxCell cb)
{
string[] Values = { "XZ", "VY" };
string[] Choices = { "XZ - Prescription Number", "VY - Link Sequence Number" };
ControlManip.DataBindDDL(cb, Choices, Values);
cb.Value = "XZ";
}
public static void DataBindDDL(ref ComboBox cb, string[] Choices, string[] Values)
{
DataTable dt = new DataTable();
dt.Columns.Add("Choice");
dt.Columns.Add("Value");
if (Choices.Length != Values.Length)
{
throw new Exception("Number of Choices and Values do not match!");
}
else
{
dt.Rows.Add(new object[] { "", "" });
for (int i = 0; i < Choices.Length; i++)
{
if (Choices[i] is object && Values[i] is object)
{
dt.Rows.Add(new object[] { Choices[i], Values[i] });
}
}
cb.DataSource = dt;
cb.DisplayMember = "Choice";
cb.ValueMember = "Value";
}
}
填写表格:
private void PopulateForm()
{
if (ndcRecords == null || ndcRecords.Count == 0)
return;
dgvNDC.Rows.Clear();
foreach(NDCRecord record in ndcRecords)
{
AddLine("Del", record.NDCcode, record.UnitQuantity, record.UnitOfMeasurement, record.Type, record.Number);
}
}
最佳答案
问题是我绑定(bind)的是单个 CELL 而不是包含下拉框的 COLUMNS。我在单击“添加”按钮的地方插入了绑定(bind)方法,这使得它看起来好像添加一个包含空白值的行仍然会导致填充的下拉列表。但是添加具有指定值的行会导致错误,因为该行的下拉列的集合中还没有任何内容。所以这里是对代码的重要修改:
在 SetupDataGridViewColumns 而不是
BindUnitOfMeasurement((DataGridViewComboBoxCell)dgvNDC.Rows[0].Cells["UnitOfMeasurement"]);
BindType((DataGridViewComboBoxCell)dgvNDC.Rows[0].Cells["Type"]);
使用
BindUnitOfMeasurement((DataGridViewComboBoxColumn)dgvNDC.Columns["UnitOfMeasurement"]);
BindType((DataGridViewComboBoxColumn)dgvNDC.Columns["Type"]);
并适当修改绑定(bind)方法。然后,您可以为组合添加一行空白值或指定值,它会起作用(其中一个下面有一个指定的默认值,另一个留空供用户选择)
AddLine("Del", "", "", "", "XZ", "");
另外,我不确定这是否有必要,但在实验过程中我还为每个组合框列添加了这个:
type.ValueType = typeof (string);
关于c# - 如何以编程方式设置 DataGridViewComboBoxCell 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14388184/
应用程序启动时DataGridViewComboBoxCell显示正常 选择值后,当前行和后续行的背景将变为黑色(见下文)。我使用了默认的 DataGridView 并且没有字体操作 我尝试更改 Ce
我有一个使用多个 DataGridView 控件的项目。大多数单元格都属于 DataGridViewTextBoxCell 说服力。我这样声明我的控件: Dim MyCell as DataGridV
我的 DataGridView 上有一个 DataGridViewComboBoxColumn。这是我的自定义单元格绘制处理程序: private void dataGridView_CellPain
我有两个在运行时添加的 DataGridViewComboBoxColumn 我需要第一个 DataGridViewComboBoxColumn 的项目在 gridview 的所有行中保持相同但我希望
组合框默认显示空白字段,即使组合框填充了多个值也是如此 ColumnSpeed.DataSource = speedList; ColumnSpeed.ValueType = typeof(strin
我们的 DataGridView 中有一列,用户可以从组合框中为其选择一个值 (DataGridViewComboBoxColumn)。我们有一些用于选择的验证逻辑(覆盖 OnCellValidati
我有一个 DataGridView,其中有一列作为 ComboBox这是我用来创建列然后为每一行更新 DataSource 的代码。 var dTable = new DataTable(); dTa
我正在使用 Datagridview,通过设置 DataPropertyNames 部分由数据源填充。部分由我在代码中填写。我有一个 DataGridViewComboBoxColumn,当我单击
为了调出 DataGridViewComboBoxCell 的菜单,我首先必须单击: 1)我要编辑的单元格所在的行 2)在我要编辑的单元格内 3)我想再次编辑,以打开单元格的组合框。 如果已经选择了另
这就是我的情况。我有一个 DataGridView,它有两列,我试图将它们设置为 DataGridViewComboBoxColumns,称为“已接收”和“缺货”。 这些组合框的目的是创建一个下拉菜单
我需要将数据库中的不同值添加到表 1(id、名称、...)中的 DataGridViewComboBoxColumn,并且必须选择值(名称)。 我的代码: SqlDataAdapter coursea
这是我的代码: private class Person { private string myName; privat
我在设置 DataGridViewComboBoxCell 的值时遇到问题。 datagridview 列与选项/值绑定(bind),但是当我尝试使用 dgv.Rows.Add 为 comboBoxC
我知道这可能是重复的,但我一直无法找到有效的解决方案。我有一个带有组合框列的数据 GridView 。当我不尝试设置组合框列的值时,一切都很好(即组合框列正在填充)。当我尝试设置该值时,出现臭名昭著的
所以我的目标是一旦用户单击下拉列表中的项目,单元格将自动调用 EndEdit()。最奇怪的是,下面的代码将在我下拉的第 2-n 个 ComboBoxesCells 上工作,并从中选择值,但绝不是第一个
我在 C# winform 应用程序中有一个带有 datagridviewcomboboxcell 的 datagridview。因为 CellValueChanged 事件触发,所以我可以很容易地捕
我有 DataGridViewComboBoxCell 和一个 DataTable。 Table I中的数据使用DataSource绑定(bind)DataGridViewComboBoxCell,并
我一直在上下寻找执行以下操作的方法,但无济于事。我提出了一个可行的解决方案,但想知道是否有更好的处理方法。 问题: 我正在使用具有两个 DataGridViewComboBoxColumn、col1
我一天中的大部分时间都在为此工作,但解决方案仍然让我难以捉摸。我的 Winform 应用程序包含一个 DataGridView其中两列是ComboBox下拉列表。奇怪的是,DataGridView似乎
我有一个窗体 DataGridView包含一些 DataGridViewComboBoxCell使用 DataSource 绑定(bind)到源集合的 s , DisplayMember和 Value
我是一名优秀的程序员,十分优秀!