2009-05-29 6 views
0

私は、基本的なASP.NETグリッドビューから継承する拡張GridViewクラスGridViewExを持っています。 CreateColumnsメソッドをオーバーライドして、列コレクションをインターセプトし、変更されたCheckBoxFieldを含む独自の列を挿入します。行更新コマンドでカスタムマルチ選択グリッドビューが破損する

(追記:私は行が選択された保存および更新のいくつかの他の方法を探しているだけ表示機構としてのチェックボックスを使用してみましたが、最終的にチェックボックスがすべてを処理するための最も簡単な方法であった)

CheckBoxField ReadOnlyプロパティが作成時にtrueに設定されています(また、列コレクションに追加されたときはtrueのままです)。これにより、Gridviewのデータソースに対するUpdate要求のパラメータとして渡されないようにする必要があります。

あなたが推測するかもしれないが、それは起こっていない。行の編集や更新を実行しようとすると、名前がない単一のパラメータで「パラメータが多すぎます」という警告が表示されます。複数選択機能をオフにすると、これは消えてしまいます。だから私は自分のチェックボックスフィールドがReadonlyフィールドとして扱われていないことを知っている。しかし、私はそれを修正する方法を知らない!

私の更新プログラムのパラメータとして自動的に渡されないように、このフィールドを設定する必要がある場所、時期、方法についてのアイデアはありますか?

答えて

0

わかりました。

私はまた、InitializeDataCellをオーバーライドし、私自身のチェックボックスに書き込むカスタムCheckBoxFieldを持っていました。 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; 
      } 
     } 
    } 
関連する問題