【发布时间】:2012-02-28 19:53:33
【问题描述】:
我有一个绑定到数据表的 datagridview。这些列不是自动生成的,我在代码中创建它们。我希望我的用户能够添加和删除一行,所以我有 AllowUserToAddRows = true, AllowUserToDeleteRows = true。
问题是:当他们选择一行并按 DEL 时,信息将替换为行单元格的默认值。该行不会消失。
这是什么行为(为什么/发生了什么),我该如何解决?
这是我的网格创建代码:
private void resetDowntimeGrid()
{
downtimeEntries = new DataTable();
downtimeEntries.Columns.Add("Category", typeof(int));
downtimeEntries.Columns.Add("HoursDown");
downtimeEntries.Columns.Add("Reason");
//deptDowntimeCategories.Select("", "ListOrder ASC");
gridDowntime.Columns.Clear();
DataGridViewComboBoxColumn cboCategory = new DataGridViewComboBoxColumn();
{
cboCategory.HeaderText = "Category";
cboCategory.DataSource = deptDowntimeCategories;
cboCategory.DisplayMember = "Name";
cboCategory.ValueMember = "CategoryID";
cboCategory.DataPropertyName = "Category";
cboCategory.Width = Convert.ToInt16(gridDowntime.Width * 0.20);
cboCategory.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox;
cboCategory.AutoComplete = true;
gridDowntime.Columns.Add(cboCategory);
}
DataGridViewTextBoxColumn txtDowntime = new DataGridViewTextBoxColumn();
txtDowntime.HeaderText = "HoursDown";
txtDowntime.DataPropertyName = "HoursDown";
txtDowntime.Width = Convert.ToInt16(gridDowntime.Width * 0.15);
gridDowntime.Columns.Add(txtDowntime);
DataGridViewTextBoxColumn txtReason = new DataGridViewTextBoxColumn();
txtReason.HeaderText = "Reason";
txtReason.DataPropertyName = "Reason";
txtReason.Width = Convert.ToInt16(gridDowntime.Width * 0.60);
gridDowntime.Columns.Add(txtReason);
gridDowntime.DataSource = downtimeEntries;
lblStatus.Text = "Downtime grid reset.";
}
【问题讨论】:
-
您能否发布一些代码来展示您如何创建/绑定数据?
-
当您说该行被“默认值”替换时,您是什么意思?我尝试了您提供的代码,它按预期工作。一种想法是行选择模式给出了意想不到的行为?我发现删除没有全行选择的行经常会令人困惑。
-
@DavidHall - 看起来该行已被清除,但并未消失。并且仍然有通常的新行,其下方带有 *。我只想(并期望)留下 * 行。
-
当我尝试它时,这就像预期的那样工作。你能提供所有的代码吗?会有一些事件处理程序会干扰默认行为。可能你有自动数据库写入,类似的东西?另外,您是否在一个完全空的示例表单中尝试过此操作,然后尝试添加功能,直到找到问题为止。
标签: c# winforms datagridview