2010-12-14 18 views
0

GridViewに(各行ごとに)チェックボックスとテキストボックスがあり、その状態に応じてテキストボックスを有効または無効にするいくつかのJavaScriptを記述したいと考えています。チェックボックス(オンまたはオフ)。私はJSに行インデックスを何らかの形で与えなければならないと思います。これは可能ですか?GridViewRowでのテキストボックスの無効化/有効化

答えて

0

おかげで、私はポストバック行うことによってこの問題を回避してきました - ない最善の方法をが、時間的制約には論理的な選択だった私はこれを追加する必要が唯一のものは、無効にすることです

1

あなたは次のように、これは非常に簡単に行うことができ、その後のjQueryを使用する準備ができている場合:

$(document).ready(function() { 

    $('.grid tr').each(function() { 
     var r = $(this); 
     var c = r.find('.check'); 
     var t = r.find('.text'); 
     var f = function(c1, t1) { return function() { 
      if (c1.attr('checked')) { 
       t1.removeAttr('disabled'); 
      } 
      else { 
       t1.attr('disabled', 'disabled'); 
      } 
     }; 
     }; 
     c.click(f(c, t)); // attach click event handler 
     f(c, t); // set initial state 
    }); 
}); 

スクリプトの上にGridViewのテーブルがgrid CSSクラスで飾られていると仮定され、各テキストボックスやチェックボックスが飾られていそれぞれcheckおよびtext cssクラスです。

+1

asp.netページの状態の検証を表示します。ページ内のコントロールの状態を変更するため、ビューの状態の検証でエラーが発生します。このようなエラーは断続的でデバッグは困難ですが、そこにあります。ビューステートの検証を無効にすると、これを防ぐことができ、JavaScript側でクライアント側でhtmlコントロールを変更することができます。 – bleepzter

0


はい、これは絶対に可能です。あなたが次のことを行う必要があり、この実装するに

  1. は、チェックボックスの状態に基づいて、テキストボックスの有効/無効を処理するために、一般的なJavaScript関数を書きます。
    例: -
    function ManageControlEnabling(sourceCheckBoxId, affectingControlId)
    {
    var sourceCheckBox = document.getElementById(sourceCheckBoxId);
    var affectingControl = document.getElementById(affectingControlId);
    var shouldEnable = false;

    if (sourceCheckBox && affectingControl)
    {
    shouldEnable = sourceCheckBox.checked;

    if(shouldEnable) 
        affectingControl.disabled = false; 
    else 
        affectingControl.disabled = true; 
    

    }
    }

  2. グリッドビューの行-データバインドイベントを処理します。チェックボックスの状態に基づいてテキストボックス(各行)の有効/無効を処理するために、.NETコードで同様の機能を実装します。また、JavaScript機能をチェックボックスに追加します。
    例: -

    CheckBox checkSource; 
    TextBox textAffecting; 
    
    
    checkSource = e.Row.FindControl("cbSource") as CheckBox; 
    textAffecting = e.Row.FindControl("tbAffecting") as TextBox; 
    
    
    if(checkSource != null) 
    { 
        textAffecting.Enabled = checkSource.Checked; 
    } 
    
    
    checkSource.Attributes.Add("onclick", "ManageControlEnabling('" + checkSource.ClientID + "', '" + textAffecting.ClientID + "', true);"); 
    

このことができますかどうかを確認してください。

ありがとうございました。すべての返信用

+0

悲しいことに、悲しいことに、それは動作しません - rowdatabound部分が動作します(属性を追加し、テキストボックスはチェックボックスの状態によっては無効/有効になります)。しかし、チェックボックスをクリックすると、たとえ私がすべてのifを取り出して、それがテキストボックスを有効にしたとしても。 – Chris