3

ピアのグループ用のカスタムコントロールを作成していて、障害が発生しています。コントロールの目的は、ネスト、並べ替えなどを使用してグリッドを実装する簡単な方法を提供することです。

ネストを作成するために、残りの子の青写真として機能する子GridViewがあります。開発者が希望どおりに構成できるようにすると、カスタムコントロールが多数の同一のコピーを作成します。

ここでの私の問題は、子グリッドを完全にコピーできないことです。MemberWiseClone()は機能していないようで、GridViewはシリアル化できません。

私の現在の解決策は、必要になることがわかっているフィールド(ID、CssClassなど)のリストを手動でコピーすることですが、それは明らかに不十分であり、EventHandlerにも触れません。

GridViewをディープコピーする良い方法はありますか-または-別の方法を使用して説明した機能を提供しますか?

4

4 に答える 4

0

私たちはオブジェクト指向言語であることを忘れないでください。BoundFieldオブジェクトとGridViewオブジェクトから継承して制御する必要があると思います。GridViewのCreateColumns関数をオーバーライドして、デフォルトの代わりに新しいBoundFieldオブジェクトを使用させることができます。

これが、GridViewから複数列のTreeViewを作成した方法です。ここを参照してください。

BoundFiledオブジェクトには、New、InitializeDataCell、OnDataBindField、ExtractValuesFromCellなどのオーバーライドしたり、独自のイベントを作成したりできるイベントがあります。次のようなイベントハンドラーを追加できます。

 Protected Overrides Sub InitializeDataCell(ByVal cell As
 System.Web.UI.WebControls.DataControlFieldCell, 
 ByVal rowState As System.Web.UI.WebControls.DataControlRowState)
    ... ect...
                AddHandler cell.DataBinding, AddressOf OnDataBindField

            End Sub

GridViewから継承すると、オーバーライドできる多くのメソッドが提供され、新しいオブジェクトで実行できることを完全に制御できます。これらには、OnInit、InitializeRow、PerformDataBinding、OnPreRender、OnSorting、UpdateRow、InitializeDataCellなどが含まれます。完全に制御する方法を確認できます。

この道を行くなら、次の本を強くお勧めします。彼は例でGridViewを使用しています。

代替テキスト

于 2009-12-09T18:11:03.377 に答える
0

ビューステートまたはコントロールステートを使用できますか?グリッドビューは、ビューステートに保存したり、ビューステートから復元したりできます。コントロールをビューステート文字列に変換し、それを新しいグリッドビューオブジェクトに復元してから、オブジェクトIDを変更できる場合は、これによりメカニズムが提供される可能性があります。IStateFormatterを確認することをお勧めします

ただし、これはイベントハンドラーを処理しません。ただし、このアプローチの利点は、他のすべてを保存および復元するために機能することがわかっていることです。

于 2009-12-09T09:16:25.897 に答える
0

必要なのが別の設定でのGridViewのhtmlのスナップショットだけである場合は、RenderControlメソッドを使用してレンダリングされたhtmlを取得できます。

次に例を示します。

http://forums.asp.net/p/1016960/1368933.aspx

System.IO.StringWriter stringWriter = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWriter = new System.Web.UI.HtmlTextWriter(stringWriter);
gridView.RenderControl(htmlWriter);
string s = stringWriter.ToString();

ただし、これではEventHandlerの問題は解決されません。

于 2009-12-09T16:53:48.633 に答える
0
    Protected Sub GridView1_Init(sender As Object, e As System.EventArgs) Handles GridView1.Init
    Dim ThisGridView As GridView = sender
    ThisGridView.ApplyStyle(MasterGridView.ControlStyle)
End Sub
于 2012-09-26T21:27:32.317 に答える