【问题标题】:datagridview not allowing user to delete rowdatagridview 不允许用户删除行
【发布时间】: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


【解决方案1】:

点击 Delete 不会删除行的另一个原因是,如果您将 RowHeadersVisible 属性设置为 False,则不会在最左侧的列中显示 *。修复后,@MAW74656 的解决方案对我有用。

【讨论】:

    【解决方案2】:

    我创建了一个空的 winform 并将网格代码放入其中。不同之处在于我如何设置DataGridView.EditMode。我有它= EditOnEnter,但如果我将它设置为= EditOnKeystroke.,则删除效果很好

    【讨论】:

      【解决方案3】:

      这是我使用您的部分代码做的一个快速示例,减去您的两列。我无法复制您的问题。您可能想要验证您实际上是在选择一个值,从下拉列表中单击该值,然后单击“删除”。 (在这种情况下,我只是从工具箱中将DataGridView 拖到了表单中。我没有进行其他修改。)

      public partial class Form1 : Form
      {
             public Form1()
             {
                 InitializeComponent();
             }
      
             private void button1_Click(object sender, EventArgs e)
             {
                 DataTable myTable = new DataTable("MyTable");
                 myTable.Columns.Add("CategoryID", typeof(int));
                 myTable.Columns.Add("CategoryName", typeof(string));
                 myTable.Rows.Add(new object[] { 1, "Small" });
                 myTable.Rows.Add(new object[] { 2, "Medium" });
                 myTable.Rows.Add(new object[] { 3, "Large" });
      
                 DataGridViewComboBoxColumn cboCategory = new DataGridViewComboBoxColumn();
                 cboCategory.HeaderText = "Category";
                 cboCategory.DataSource = myTable;
                 cboCategory.DisplayMember = "CategoryName";
                 cboCategory.ValueMember = "CategoryID";
                 cboCategory.DataPropertyName = "Category";
                 cboCategory.Width = Convert.ToInt16(dataGridView1.Width * 0.20);
                 cboCategory.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox;
                 cboCategory.AutoComplete = true;
      
                 dataGridView1.Columns.Add(cboCategory);
      
             }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-20
        • 2021-01-02
        • 1970-01-01
        • 2014-01-05
        • 1970-01-01
        • 2016-01-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多