2009-05-29 62 views
0

我有一個擴展的GridView類GridViewEx,它繼承自基本的ASP.NET gridview。我重寫CreateColumns方法來攔截列集合並注入我自己的列,其中包含修改的CheckBoxField。在行更新命令上自定義multiselect gridview中斷

(旁註:我試圖尋找哪個被選擇的行存儲和更新的一些其他方法,只是使用的複選框作爲顯示機構,但最終的複選框是用於處理一切的最簡單的方法)

的CheckBoxField字段在創建時它的ReadOnly屬性設置爲true(當它被添加到列集合時它仍然是true),這應該防止它作爲更新請求的參數傳遞給gridview的數據源。

正如你可以推斷,這沒有發生。當我嘗試執行行編輯和更新時,我得到一個「太多參數」的警告,其中沒有名稱的單個參數。如果我關閉多選功能,則會消失。所以我知道我的checkboxfield不被當作Readonly字段。但我不知道如何解決它!

有關何時,何時或如何設置此字段以便它不會自動作爲參數傳遞給我的更新的任何想法?

回答

0

好吧,算出來。

我也有一個自定義的CheckBoxField,它覆蓋了InitializeDataCell並寫入我自己的複選框。如果設置了Readonly,我需要添加一個額外的檢查,以便在編輯過程中禁用該字段。這似乎解決了這個問題。希望這有助於其他任何可能正在執行自定義GridView編輯的人員。

internal class InputCheckBoxField : CheckBoxField 
    { 
     //... Some boilerplate for ID and other properties here 

     protected override void InitializeDataCell(DataControlFieldCell cell, DataControlRowState rowState) 
     { 
      base.InitializeDataCell(cell, rowState); 

      if (cell.Controls.Count == 0) 
      { 
       CheckBox chk = new CheckBox(); 
       chk.ID = CheckBoxID; 
       chk.AutoPostBack = true; 
       cell.Controls.Add(chk); 

       //This was the needed check 
       if(ReadOnly && rowState == DataControlRowState.Edit) 
        chk.Enabled = false; 
      } 
     } 
    }