DataGrid 重新整理選中問題

2022-08-05 09:54:22 字數 1772 閱讀 8531

背景:在專案中遇到了這樣的問題,使用的datagrid需要預設選中第一條資料,即資料載入後,無需使用者點選,即可預設選中一項,並且,datagrid支援篩選操作,需要完成這樣的功能,資料來源中的資料項的某些屬性更新時,需要重新整理ui,並且需要保持當前的多選項。

問題:上面的背景中提到了兩個問題,一是需要預設選中第一項;二是datagrid相關的檢視進行重新整理時需要保持上次的多選項。預設選中第一項可以在資料載入完成後使用乙個雙向繫結完成,而保持上次的多選項,datagrid提供了乙個內部屬性用來控制,即為issynchronizedwithcurrentitem

,其值為false時,會保持上次的多選項,但此時設定當前選中的。這樣只可以實現,便卻要判斷每乙個當前選中項可以會空的場景,並及時的設定當前選中項為檢視中的第一項,太過複雜,容易出錯。

解決方案:自定乙個集合及所使用的檢視類,在檢視類中判斷當前選中項為空且檢視列表不為空的情況下,設定當前選中項為列表中第一項,否則為需要保持多選項的情況,即需要控制項的issynchronizedwithcurrentitem=false來保證,在檢視中設定預設選中項時又需要設定issynchronizedwithcurrentitem=true才能保持檢視中的更改可以及時的重新整理到ui上去。因此需要做好的兩種情況的判斷,從而正確切換issynchronizedwithcurrentitem,保證ui的正確性。

實現:資料的篩選需要重新filter一次,需要呼叫檢視的refresh操作,通過分析原始碼,分析出重新整理的過程,實現的示例圖可參照下圖:

注意:issynchronizedwithcurrentitem主要是用來同步當前選中項,在多ui使用同一資料來源時可以同步當前選中項,但這裡的實現並不支援,因為需要檢視類與ui耦合。

實現原始碼:

public

class customcollection: observablecollection, icollectionviewfactory

private

readonly

selector _selector;

public

icollectionview createview()

}public

class

myview : listcollectionview

}private

readonly

selector _selector;

private

readonly

bool?_dgsynchronized;

private

object _precurrentitem = null

;

protected

override

void

refreshoverride()

protected

override

void

oncollectionchanged(notifycollectionchangedeventargs args)

else

_selector.issynchronizedwithcurrentitem = false

; }

base

.oncollectionchanged(args);

}protected

override

void

oncurrentchanged()}}

easyUI跨tab重新整理datagrid

專案上遇到乙個情況,需要在當前頁 tab 完成操作後重新整理另外乙個tab中datagrid的資料,然而在當前tab中獲取到datagrid呼叫其load方法,datagrid從伺服器獲取到資料了,但是那個tab中的datagrid資料清空了!最終沒有找到好的解決方法,只好用一種迂迴的方式解決 1 ...

flex中獲取datagrid選中行的列值

var v object datagrid.editeditemposition var colindex number v.columnindex var rowindex number v.rowindex var colatagridcolumn datagrid.columns colind...

DataGrid 換行問題

1.在頁面新增 在grid的html裡面新增 itemstyle wrap false 如 asp templatecolumn itemstyle wrap false itemtemplate asp linkbutton id lb edit runat server commandname ...