簡體   English   中英

嘗試使用數據綁定的DataGridView設置最大行數

[英]Trying to set a maximum row count with a data-bound DataGridView

我的應用程序中有一個DataGridView,但是我想將其限制為僅20行,但是因為它是數據綁定的,所以我得到了InvalidOperationException 通過研究,我遇到了虛擬模式,但是對於像我這樣的初學者來說,這似乎令人困惑。 此外,我已經看到有人說設置DGV.DataSource = null; 解決問題,但這對我不起作用。

我基本上單擊一個按鈕,然后在DataGridView中填充信息。 我唯一可以解決的問題是限制用戶僅輸入我的對象的20個實例。 然后,他們必須刪除一個才能輸入另一個。

有什么方法可以使用數據綁定的DataGridView設置最大行數限制?

編輯

在我單獨的類文件(objectStorage.cs)中,我有這個

public class objectStorage: IComparable<objectStorage>
{
    public string objID { get; set; }
    public string objName { get; set; }
    public string objDescription { get; set; }


    public static List<objectStorage> objArray = new List<objectStorage>();
}

然后在我添加新對象(addObj.cs)的表單中,我有以下內容:

private void objCreationBtn_Click(object sender, EventArgs e)
    {
         objectStorage.objArray.Add(new objectStorage
         {
            objID = objIDValueTxt.Text,
            objName = objNameRTB.Text,
            objDescription = objDescRTB.Text,
         });

    }

然后在我的主窗體中,我有了DGV(在其中將數據源分配給GUI中的objectStorage,從而創建了綁定源),該DGV創建了一種顯示對象的方法,例如按下按鈕即可:

private void displayObjBtn_Click(object sender, EventArgs e)
{
        showObjects();
}

private void showObjects()
    {

       objectStorageBindingSource.DataSource = null;

       objectStorageBindingSource.DataSource = objectStorage.objArray; 
    }

這完全可以,但是顯然行數沒有限制,由於數據綁定問題,我不能這樣做。

警告

從長遠來看,這不是您應該采用的方法,但是鑒於問題完全針對您的方法並且缺少一些周圍的細節(這最終意味着問題將被解決),因此我提供此作為實用的答案。

它還假設“虛擬模式”操作不是您要執行的操作(根據鏈接的重復問題,它提供了答案)。

請記住以上內容,作為答案的其余部分。


在源頭限制行

在我們的注釋中進行進一步討論之后,在不了解代碼當前外觀的情況下,我將建議一些簡單的方法。

DataGridView將位於Form ,它將具有一個代碼隱藏文件。 在此文件中,我們要進行必要的修改以將列表限制為20個項目:

 using System.Linq; using System.Collections.Generic; public class MyForm : Form { // Event handler for the Forms Load event public void MyForm_OnLoad(object sender, EventArgs e) { // Take 20 items from whatever source you are currently using in the DGV. List<MyDataBoundItem> items = objectStorage.Items.Take(20).ToList(); dataGridView1.DataSource = items; } } 

綁定列表並不總是必需的,可以使用List<T>但我認為它將是只讀的,而BindingList<T>支持添加和刪除行。

還請記住刪除設計者領導的解決方案,因為它們會互相干擾。

如果提供內存,則DataGridView控件不提供強制最大行數的機制。 假設網格允許添加行,您將不得不處理用戶嘗試添加新行且最大數量的情況。 其他用戶輸入方案可能需要手動干預。


關於模式的簡要說明

關於“視圖模型”的簡要說明,暫時不要理會。 它是從幾個標准UI模式中借用的一個術語,用於將UI的處理分為可測試的塊。 這是一個更高級的主題,當您經歷了一些非模式的UI編碼時,您應該繼續閱讀它:-)

為了將來的選擇,請搜索“ MVC”,“ MVP”和“ MVVM”。

暫無
暫無

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

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