第一次用ListView,就抓到BUG。

2021-09-09 04:46:48 字數 1547 閱讀 1035

事發於listview.edititem 屬性

msdn對此屬性的解釋:

型別:system.web.ui.webcontrols.listviewitem listview 控制項中處於編輯模式的項;或者,如果沒有項處於編輯模式,則為 null。

事發過程

我的頁面是這樣子的:

在listview中巢狀乙個repeater控制項顯示和編輯子表資料。

因為在update的時候listview不會幫我更新repeater中的資料,所以我需要在itemupdating事件中找到repeater控制項,再通過repeater控制項findcontrol找到每行的資料。

按msdn的說法,我可以這樣做:

protected

void listview1_itemupdating(object sender, listviewupdateeventargs e)

這樣基本沒問題,除非update的是listview的第一行

如果update第一行,蟲子就出現了。

啟動debug,看下,edititem==null ???

不管是轉到第幾頁,就是只在更新第一行時出錯

如果updata的不是第一行,那就沒什麼問題。

沒折了,只能繞個圈子,通過this.listview1.items[e.itemindex]來findcontrol

沒辦法,祭出reflctor,開啟system.web.extensions, version=3.5.0.0程式集,找到system.web.ui.webcontrols.listview.edititem. desassemble->

問題出在這裡了,看紅圈圈部分,如果編輯listview的第一行時,editindex是0,而edititem的實現竟然是判斷大於0 :(

順便看下editindex的實現

這個沒什麼問題了,如果設定值小於-1時就出錯,=-1就認為是結束編輯狀態。

難得第一次用listview就遇到這種bug。

ms的工程師也太粗心了。

附上個測試例子

listviewbugtest.rar

第一次用剪枝

hdoj 1010 include include using namespace std int n,m,t,sx,sy,ex,ey char maze 8 8 int dir 4 2 bool escape false int least distance int x,int y void df...

第一次用部落格

這是乙個開始 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下markdown的基本語法知識。全新的介面設計,將會帶來全新的寫作體驗 在創作中心設定你喜愛的 高亮樣式,markdown將 片顯示選擇的高亮樣式進行展...

第一次用ActionScript

以前以為做網路程式設計就是好asp就好,但是後面漸漸的開始轉型asp.net了,又漸漸的轉到了php上,在這其中各種script的語言給我們的東西填色不少,如今漸漸地開始接觸到了一些東西,需要使用flash了,那就開始我的actionscript了。今天開始寫我的學習actionscript,今天的...