ColumnCount属性不能在数据绑定的DataGridView控件上设置.c#



在我的表单中,我有数据网格视图,我通过使用以下方法选择数据到数据网格视图存储过程:

create proc [dbo].[GET_CULTURE_RESULT_DETAILS]
@ORDER_ID int 
as 
select LAB_MICRO_RESULTS_DETAILS.[organism_id] as 'Org.Id' , organism_desc as 'Organism Name'
,LAB_MICRO_RESULTS_DETAILS.[Antibiotic_id] as 'Ant.Id', Antibiotic_Name as 'Antibiotic Name'
,LAB_MICRO_RESULTS_DETAILS.[sensitivityId] as 'Sens.Id', Sensitivity_desc as 'Sensitivity Name'
from LAB_MICRO_RESULTS_DETAILS 
inner join lab_organisms on LAB_MICRO_RESULTS_DETAILS.organism_id = lab_organisms.organism_id
inner join lab_antibiotics on LAB_MICRO_RESULTS_DETAILS.Antibiotic_id = lab_antibiotics.Antibiotic_id
inner join Lab_Sensitivity on LAB_MICRO_RESULTS_DETAILS.sensitivityId = Lab_Sensitivity.sensitivityId
where LAB_MICRO_RESULTS_DETAILS.order_id = @ORDER_ID

然后,当选择订单号datagridview填充使用key down事件时,代码如下:

private void txtOrder_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter && txtOrder.Text != string.Empty)
{
dgvcultures.DataSource = micro.GET_CULTURE_RESULT_DETAILS(Convert.ToInt32(txtOrder.Text));
txtPCfile.Focus();
}
}

最后,当我尝试使用以下代码向数据网格视图添加新行时,出现了错误:

private void btnAdd_Click(object sender, EventArgs e)
{

if (dgvcultures.Columns.Count >= 0)
{

dgvcultures.ColumnCount = 6;
dgvcultures.Columns[0].Name = "Org.Id";
dgvcultures.Columns[1].Name = "Organism Name";
dgvcultures.Columns[2].Name = "Ant.Id";
dgvcultures.Columns[3].Name = "Antibiotic Name";
dgvcultures.Columns[4].Name = "Sens.Id";
dgvcultures.Columns[5].Name = "Sensitivity Name";

dgvcultures.Rows.Add(comboOrganism.SelectedValue.ToString(), comboOrganism.Text,
comboAntibiotics.SelectedValue.ToString(), comboAntibiotics.Text,
comboSensitivity.SelectedValue.ToString(), comboSensitivity.Text);
// comboGrowth.SelectedValue.ToString(),comboGrowth.Text);
}
}

当点击添加按钮并尝试插入新行时,我得到了这个错误:

ColumnCount property cannot be set on a data-bound DataGridView control. c#

我检查了这个网站的解决方案,他们说你必须在插入新行之前清除datagridview,我尝试过从存储过程中清除填充的数据,我不需要清除datagridview,我需要保留数据并添加新行,而不清除当前数据:

//Clear the binding.
dgvcultures.DataSource = null;

这个命令将删除datagridview中的行,但我需要保留行。

如何解决这个错误。

从我可以破译的,网格DataSource看起来像DataTable具有以下列…

Org。Id,有机体名称,蚂蚁。Id,抗生素名称,传感器Id和敏感性名称。

我从从DB获取表的第一个代码片段中假设了这一点。

如果这个DataTable被用作网格的DataSource,那么在按钮单击事件中,不需要"重新创建"列。这些列已经存在于表中。代码只需要将行添加到DataTable.。不清楚列"类型"是否都是strings,代码可能必须转换一些值,否则按钮单击事件中的代码可能看起来像…

DataTable gridDT = (DataTable)dgvcultures.DataSource;
gridDT.Rows.Add(comboOrganism.SelectedValue.ToString(),
comboOrganism.Text,
comboAntibiotics.SelectedValue.ToString(),
comboAntibiotics.Text,
comboSensitivity.SelectedValue.ToString(),
comboSensitivity.Text);

最后,应该考虑使用BindingSource。这可能会使事情更容易。

我希望这有意义。

最新更新