2011-07-29 10 views
1

私は働いているスタッフの請求費用申請に取り組んでいます。プロセスの一部にリストビューが含まれています。新しい要件の一部は、費用タイプがマイレージである場合、ユーザーはアイテムを編集できず、ビジネスルールや英国の税務上の理由などで削除して再提出するだけです。同じ種類のリストビューアイテムテンプレートでコントロールを検索

とにかく、特定のテキスト値を持つリストビューの各項目でコントロールを見つけることができるようにします。

私は次のようなものを考えましたが、これは正しくなく、理由はわかります。

 Label ExpenseTypeLabel = (Label)Expenses.FindControl("ExpenseTypeLabel"); 
     string ExpenseType = (ExpenseTypeLabel.Text.ToString()); 

     if (ExpenseType == "Mileage") 
     { 
      foreach (ListViewDataItem thisItem in Expenses.Items) 
      { 

       ImageButton btnEdit = (ImageButton)thisItem.FindControl("btnEdit"); 
       btnEdit.Enabled = false; 


      } 
     } 

費はweekendingに基づいており、(最初のロード)現在のweekendingための費用に関連する多くのExpenseTypeLabelsがあるのでそれは特定の個人のコントロールにバインドすることはできませんとページのロードとしてそれは私のexcepionをスローします。

ここで達成しようとしているのは、アイテムテンプレートと代替アイテムテンプレートの両方ですべてのExpenseTypeLabelsを見つけて、その費用アイテムの編集機能を無効にすることです。あなたは週末に費用がかかり、子どもたちは個々の費用項目であると思っています。

あなたの素敵な人がこれを達成するための最善の方法を教えてください。

おかげ

マット

答えて

1

使用OnItemDataBoundイベントバインドされたアイテムにアクセスするための

OnItemDataBound="Expenses_ItemDataBound" 

protected void Expenses_ItemDataBound(object sender, ListViewItemEventArgs e) 
{ 

    if (e.Item.ItemType == ListViewItemType.DataItem) 
    { 

     Label ExpenseTypeLabel = (Label)e.Item.FindControl("ExpenseTypeLabel"); 

     string ExpenseType = (ExpenseTypeLabel.Text.ToString()); 

     if (ExpenseType == "Mileage") 
     { 
      // disable button 
     } 
    } 
} 
+0

Vありがとう、ありがとう! – dotnetnewb

+0

はい、私はちょっと正しいトラックに私を入れて、それは私の考えを満たしているわけではありませんが、それは私にはより良い理解を与えます。 – dotnetnewb

+0

あなたは答えを得ることができます:-)私は何らかの理由でボタンを踏み外すことができませんでした。私は奇妙に見えるfalseへのvisibleプロパティを表示するだけです!再度、感謝します! – dotnetnewb

2

バインド順序、およびタイミングは以下のように、非常に重要です。これは特に、バインディングアイテムを持つサブコントロールがある場合にも当てはまります。

これらのバインドされたコントロールの表示に影響を与えたい場合は、通常aspxエンドから行うことができます。その値を返すパブリック関数を行い、サーバ側で

<asp:listview id='lstExpense'> 
    ... 
    <asp:button id='btnEdit' enabled='<%#= isEnabled(((Expense)Container.DataItem).ExpenseType) %>' ... 
    ... 
<asp:listview> 

サーバー側の機能へのフロントエンドからのリンクを作成し、すべての必要なパラメータを渡し


しかし、最高の解決策は、jQueryを使用することです。誇張はしませんが、すべてのことを次のような単純なもので実現できます:

$('.rowClass').each(function() { 
    if ($(this).find('.expenseTypeClass').val() == 'Mileage')) 
     $(this).find('.btnEditClass').attr('disabled','disabled'); 
}) 
+0

これは良い入力のおかげです、私は管理されたコードとしてAJAX以外のクライアント側のスクリプトを使用しないように私のマネージャーからアドバイスを受けています。 jQueryはある時点ですぐに学ばなければならないと思っています。私が自分に尋ねた質問の多くは、JS/jQ – dotnetnewb

関連する問題