【问题标题】:How to restrict datagridview to create 2 rows?如何限制 datagridview 创建 2 行?
【发布时间】:2012-03-19 08:55:40
【问题描述】:

我的 Windows 应用程序中有 datagridview。默认情况下,datagridview 加载 1 行。如果我们在单元格中输入内容,它会在该行下方创建另一行。就这样继续下去。现在,如果有人键入内容然后将其删除,则下面创建的行不会被删除。我想阻止用户创建无限编号。没有任何数据的行。是否可以限制 datagridview 创建最多 2 个这样的空白行?请建议,如何做到这一点。

【问题讨论】:

标签: c# winforms datagridview


【解决方案1】:

无法自动实现。您将需要手动执行此操作。最好的方法是正确处理 cellvalidating 和 cellvalidated 事件。如果单元格为空,则取消事件。您还可以设置属性 AllowUserToAddRows=false 并手动添加新行,例如按下按钮:

                // source is IBindingSource

                MyObject newObject = this.source.AddNew();
                DataGridViewRow row = this.dgv.Rows[this.source.IndexOf(newObject)];
                row.Selected = true;

                int maxSelectedOrder = this.source.IndexOf(newObject );
                int minSelectedOrder = this.source.IndexOf(newObject );

                int displayedRows = this.dgv.Rows.GetRowCount(DataGridViewElementStates.Displayed);
                int firstDisplayed = this.dgv.FirstDisplayedScrollingRowIndex;
                int lastDisplayed = displayedRows + firstDisplayed - 1;

                if (maxSelectedOrder - 1 > lastDisplayed && minSelectedOrder - 1 > firstDisplayed)
                {
                    int firstToDisplay = displayedRows + firstDisplayed - 1 - (displayedRows - 1);

                    if (firstToDisplay > 0)
                    {
                        this.dgv.FirstDisplayedScrollingRowIndex = firstToDisplay;
                    }
                }

                this.dgv.CurrentCell = row.Cells[0];
                this.dgv.Focus();

【讨论】:

    【解决方案2】:

    设置属性AllowUserTAddRows=false;或通过代码

    myDataGridView.AllowUserToAddRows = false;
    

    【讨论】:

      猜你喜欢
      • 2011-02-09
      • 2014-03-03
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 2022-06-23
      • 2014-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多