私のアプリケーションは、aspxページのハイパーリンクを含む電子メールをユーザーに送信します。get文字列にGUIDがあります。aspxページには、複数のページにまたがる行を含むグリッドビューが表示されます。私の要件は、リンクがクリックされたときにユーザーを適切なページに誘導し、GUIDにマッピングされている行を強調表示することです。
助けてください、その緊急。
私のアプリケーションは、aspxページのハイパーリンクを含む電子メールをユーザーに送信します。get文字列にGUIDがあります。aspxページには、複数のページにまたがる行を含むグリッドビューが表示されます。私の要件は、リンクがクリックされたときにユーザーを適切なページに誘導し、GUIDにマッピングされている行を強調表示することです。
助けてください、その緊急。
Canavar にはポイントがありますが、単純なこととして、RowDataBound メソッドの負荷を取得し、レンダリングの最後にハイライトを実行できます。
想像してみましょう(あなたはそれに関する情報を提供しなかったため-ところで、質問の最も詳細なバージョンを常に提供してください):)
GridView には 30 行が表示されており、行 ID 22 を強調表示する必要があります。
次の手順に従います。
1 - HiddenField を追加します
<asp:HiddenField ID="rowID" CssClass="rowids" Value='<%# Eval("YourROWID") %>' />
2 - 行ができたので、必要なのは、DOM の準備ができたら、すべての行をループして、コメントで言及したselectrowと同じ値を持つ行を強調表示することだけです
jQueryを使用していますか?
var selectedRow = '<%= Request["selectrow"] %>';
$(document).ready(function(){
$(".rowids").each( function() { // Get and Loop through all class=rowids elements
if( $(this).value() == selectedRow) {
// we found it! lets find the TR and add the highlight class to it
$(this) // the INPUT ELEMENT
.parent() // the TD element
.parent() // the TR element
.addClass("highlight"); // Add the class
}
});
});
jQueryを使用していない場合(ただし、コードのより多くの部分を改善するために再利用することはほぼ確実です)
var selectedRow = '<%= Request["selectrow"] %>';
var arr = document.getElementsByTagName("input");
for (i = 0; i < arr.length; i++) { // Loop through all input elements
if( arr[i].className == "rowids" && arr[i].defaultValue == selectedRow ) {
// it's a rowids element and the value is the one we are looking out
var tableRow = arr[i].parentNode.parentNode; // get it's TR element
tableRow.className = tableRow.className + ' hightlight'; // Add the class
break; // no need to loop through more, we already found the one we are looking for
}
}
これをスクリプトの BODY タグの前に追加することを忘れないでください。これにより、すべての要素がページにレンダリングされたときに呼び出されます (DOM 対応のトリック)。
そのためにJQueryを使用できます。
$("a").click(function(){
$(this).effect("highlight", {}, 3000);
})
それはとても単純なことでしょう。それが役に立てば幸い。