簡體   English   中英

通過更改更新數據綁定的GridView

[英]Updating a Databound GridView with changes

我在數據綁定到對象列表的窗體上有一個DataGridView。 我有幾列,包括一個復選框列。 要求是在給定時間集合中只有一個項目的數據綁定布爾屬性可以設置為true。 數據對象名為“間隔”,相關屬性為“程序”:

public bool Program
{
    get { return _program; }
    set
    {
        if (value)
        {
            Parent.Intervals.Except(new[] { this }).ForEach(interval => interval.Program = false);
        }
        _program = value;
        OnPropertyChanged();
    }
 }

我的預期行為是,單擊數據綁定復選框會將Interval的一個實例的Program屬性設置為true,這樣做會將所有其他實例的Program屬性設置為false。 確實發生了這種情況,但是datagridview無法正確更新。 它將保留先前的復選框處於選中狀態,並在跳出單元格或將鼠標懸停在另一個復選框之后,然后將更新該特定復選框。

如何獲取數據網格視圖以准確顯示對象的狀態。 我相信您,DataGridView! 你騙了我。 我...我再也不會相信你再說了什么。

解決方案是改用BindingList。 綁定到常規List或其他集合(不是特定於Binding的折彎)時,僅更新選定的行值。 但是,BindingList的附加好處是,所有項目的屬性都將被更新,而不僅僅是選定的行。 請記住,如果使用的是AddRange(來自List)之類的內容,則可能必須修改代碼以在初始化時或通過循環添加項,因為BindingList沒有AddRange方法(盡管可以編寫擴展方法) )。

嘗試這個

private void dgv_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    if ((bool)dg.Rows[e.RowIndex].Cells[CheckBoxColumnIndex].Value)
    {
        var rows = (from DataGridViewRow row in Clients.Rows 
                    where row.Index != e.RowIndex
                    select row).ToArray(); 

        foreach(DataGridViewRow row in rows)
        {
             row.Cells[CheckBoxColumnIndex].Value = false;
        }
    }
 }

暫無
暫無

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

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