簡體   English   中英

防止DataGridView提交新的空白行

[英]Prevent DataGridView from commiting a new blank row

我有一個未綁定的DGV,用戶可以向其中添加行。

默認情況下,網格底部有一個空白行。 讓我們將其稱為X行。當用戶開始編輯X行中的單元格時,將在其下方添加一個新的空白行(X + 1)。

編輯單元格時添加了新的空白行

但是在添加新行之后,可以刪除X行中的所有文本,並將其保留為空白。 網格保留有2個連續的空白行。

離開儲存格后還剩2行空白

使用CellEndEdit事件,我試圖:

  1. 刪除行X-收到InvalidOperationException:操作無效,因為它導致對SetCurrentCellAddressCore函數的可重入調用。
  2. 刪除X + 1行-收到InvalidOperationException:無法刪除未提交的新行。

也不能通過CellValueChanged事件來完成此操作,因為從null到null不被視為更改。

有沒有一種方法可以防止這種行為/確保始終只有一個空白行存在? 謝謝!

第一個錯誤是告訴您,如果其中一個單元格具有當前焦點,則無法刪除該行。 因此,在CellEndEdit ,將CurrentCell設置為上面一行中的一個單元(嘗試刪除該行之前)。

編輯:示例代碼

public class FormClick : Form {

    DataGridView dgv = new DataGridView { Dock = DockStyle.Fill };
    DataTable table = new DataTable();

    public FormClick() {
        table.Columns.Add("A");
        table.Columns.Add("B");
        dgv.DataSource = table;
        Controls.Add(dgv);

        dgv.CellEndEdit += dgv_CellEndEdit;
    }

    void dgv_CellEndEdit(object sender, DataGridViewCellEventArgs e) {

        DataRow row = ((DataRowView) dgv.Rows[e.RowIndex].DataBoundItem).Row;
        bool allEmpty = true;
        for (int i = 0; i < table.Columns.Count; i++) {
            String s = row[i].ToString();
            if (s.Length > 0) {
                allEmpty = false;
                break;
            }
        }
        if (allEmpty) {
            dgv.Rows.RemoveAt(e.RowIndex);
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM