問題タブ [templatefield]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net - GridView コントロールで asp:ButtonField を asp:TemplateField に変換する
現在、列の 1 つとして asp:ButtonField を持つグリッドビューがあります。コマンドのイベント ハンドラーは、コマンド引数からグリッドビューの行 ID を抽出し、それを使用してロジックを実行します。この列のテンプレート フィールドを使用するように切り替える必要があり、次のようなことをしたいと考えています。
私の問題は、CommandArgument 属性にあります。GridView の行 ID にする方法がわかりません。Eval("id") が機能しません - 行 ID プロパティの名前を知っている人はいますか? または、これを行うより良い方法はありますか?
datetime - テキスト プロパティを使用して TemplateField に HH:mm 24H 形式を表示する
次の行を使用して 24 時間形式を表示しようとしています。
では、たとえば 4:40 ではなく 16:40 を表示するためにどのようにフォーマットされるのでしょうか?
asp.net - TemplateFields、データ バインディング、および GridView で HtmlEncode を使用する方法
ObjectDataSource にバインドされた GridView があります。編集もサポートしていますが、問題なく機能します。ただし、特定のフィールドで特殊文字を許可しているため、表示されるテキストを安全に HtmlEncode したいと考えています。これは、HtmlEncode を true に設定しただけなので、標準の BoundFields で行うのは簡単です。
ただし、検証コントロールを設定するには、代わりに TemplateFields を使用する必要があります。この方法で出力するために HtmlEncoding を簡単に追加するにはどうすればよいですか? これは ASP.NET 2.0 プロジェクトなので、新しいデータ バインディング ショートカット (Eval
および などBind
) を使用しています。
私がやりたいことは、次のようなものです。
ただし、この方法で試してみると、次のエラーが発生します。
CS0103: 'Bind' という名前は現在のコンテキストに存在しません
asp.net - ASP:LinkButton と Eval
GridView の TemplateField 内の ItemTemplate 内で ASP:LinkButton を使用しています。リンク ボタンのコマンド引数には、グリッドビューがバインドされているデータソースから行の ID を渡したいので、次のようにしています。
残念ながら、結果の HTML は次のようになります。
Eval() を適切に解析しているように見えますが、これがどういうわけか、LinkButton タグを解析せず、リテラル テキストとしてダンプするだけです。誰か知っていますか:
a) なぜこれが起こっているのか、b) この問題の良い解決策は何ですか?
asp.net - ASP: ItemTemplate の DropDownList: SelectedValue 属性が許可されるのはなぜですか?
このコード片
このエラーが発生します:
'SelectedValue' プロパティを宣言的に設定することはできません。
ただし、これはデータバインドされた GridView の合法的で一般的に使用される編集テンプレートです。属性は確かにここSelectedValue
で宣言的に設定されているようです。
問題は、宣言的に設定できる場合とそうでない場合の違いは何ですか? エラー メッセージは、許可されていないことを意味します。
c# - プログラムで追加されたTemplateFieldのコントロールのIDプロパティはいつ設定されますか?
カスタムGridViewに動的に追加されるTemplateFieldがあります。
グリッドコマンド(挿入/更新/削除)に応答して、GetRowControlsと呼ばれるメソッドが呼び出されます。このメソッドは、特定のグリッド行の列を反復処理し、その各コントロールをディクショナリに追加します。
したがって、これは、宣言的に追加されたテンプレートフィールドとバインドされたコントロールの両方、およびプログラムで追加された動的非テンプレートフィールドの両方で正常に機能します。
ただし、コントロールが動的に追加されたTemplateFieldコントロールの場合、ctrl.IDは常にnullであるため、上記のステートメントは例外をスローします。
リフレクターでこれを調べたのは、VS 2005のイミディエイトウィンドウで変数を調べたときに、?ctrl、ctrl.IDが値を一覧表示することがわかったためです。それ以来、これは、イミディエイトウィンドウに?ctrlを一覧表示するときに、プロパティClientIDが呼び出され、ClientIDがEnsureId()を呼び出して、IDを設定するためであることがわかりました。
したがって、ClientID、UniqueId、およびIDはすべてnullであると想定しています。ただし、上記のように、最初の2つを読み取るだけで、すべてが設定されます。また、NamingContainerはnullではないことに注意してください。設定されています。
したがって、これを回避する方法は非常に簡単です。つまり、ctrl.ID == nullを確認し、その場合はctrl.ClientIDを読み取ります。そして、それは私がやったことです。なぜなら、時間的には本当にうごめく必要があるからです。しかし、誰かが頭のてっぺんからそれを知っているなら、私はまだ答えに興味があります。
動的に追加されたTemplateFieldの子コントロールのID値が、他のコントロールのID値とは異なる時間に設定されるのはなぜですか?
asp.net - TemplateField を DetailsView に追加する
TemplateField コントロールを DetailsView Fields コレクションの先頭に追加するにはどうすればよいですか?
これが私のコードです..
これは、DetailsView コントロールの最後に追加されます。dv.Fields(0) を試しましたが、使用できる Add メソッドがありません。dv.Fields.RemoveAt があることに気付きましたが、dv.Fields.AddAt はありません...
何か案は???
asp.net - TemplateFieldsでObjectDataSourceを使用してGridViewで並べ替える方法
バックグラウンド:
私はGridViewとObjectDataSourceを使用しています。ページングと並べ替えを実装しています。
ObjectDataSourceの場合:
GridViewの場合:
ページングと並べ替えを機能させるために、「EnableSortingAndPagingCallbacks」をTrueに設定しました。以前、「System.Web.HttpException:処理されなかったGridView起動イベントSorting」が発生していました。そしてこれはそれを修正します。
GridViewでBoundFieldsのみを使用する場合、これは素晴らしく、正常に機能します。
ただし、TemplateFieldsを使用した場合、「NotSupportedException:一部のコントロールがコールバックで正しく更新できないため、コールバックはTemplateFieldでサポートされていません。GridViewでコールバックをオフにしてください。」が表示されます。
これは理にかなっています。EnableSortingAndPagingCallbacksを使用せずに、並べ替えを機能させる方法を知る必要があります。
EnableSortingAndPagingCallbacks = Trueの場合:
- ページングワークス
- 仕分け作業
- BoundFieldsは機能します
- TemplateFieldsが機能しない
EnableSortingAndPagingCallbacks = Falseの場合:
- ページングワークス
- 並べ替えが機能しない
- BoundFieldsは機能します
- TemplateFieldsは機能します
私の質問:
Paging、Sorting、およびTemplateFieldsをすべて同時に機能させるにはどうすればよいですか?
実装の明確化:
GridViewでObjectDataSourceを使用するには、ソート式、返される行数、および開始行を提供するSelectというメソッドを実装する必要があります。
特定のSortExpressionは、aspx/ascxで定義されています。
これは、列がクリックされたときに渡され、ObjectDataSourceのSelectメソッドを呼び出すことになっていますが、EnableSortingAndPagingCallbacks = trueの場合は機能しないようで、代わりに、Sortingイベントが定義されていないという例外が発生します。
c# - リンクボタンをプログラムで gridview に追加できますか?
私は運がなくてもいくつかの同様の質問を見てきました。私がやりたいのは、特定のアイテムにはリンクボタンを表示し、他のアイテムにはハイパーリンクを表示するグリッドビューを用意することです。これは私が現在持っているコードです:
ここで、最初のセルは TemplateField です。現在、すべてが正しく表示されますが、リンク ボタンは Command イベント ハンドラーを発生させず、ポストバック時にすべてのコントロールが消えます。
何か案は?
asp.net - GridView の asp:HiddenField と同等
GridView で使用できる asp:HiddenField はありません。
これが必要な理由は、OnRowCommand をトリガーする ButtonField があるからです。そこから、選択された行を特定できますが、ButtonField からテキスト値を取得して、それにバインドされたデータを (DataTextField を介して) 確認することはできません。
これに対する私の解決策は、BoundField を用意し、代わりにそこからテキスト値を取得することでした。どの行が選択されているかは既にわかっていたからです。これは機能しましたが、非表示にする必要があります。
誰かが TemplateField 内にネストされた HiddenField を使用することを提案しましたが、その HiddenField からテキスト値を取得するのに問題がありました。HiddenField のテキスト値を取得するために TemplateField 内のコントロールにアクセスする方法はありますか?
誰かが代替案について何か提案があれば、それも素晴らしいでしょう。
ありがとう、
マット