2017-07-21 10 views
0

リモートサーバーデータベースのデータをリストビューにバインドしています。私は、ボタンをクリックしてチェックボックス&で行を選択するために1つの列を作成しました。これらの選択された行のステータスを更新したいと思います。問題は、私が使用しているコードがリストビュー&の中でチェックボックスコントロールを見つけられず、結果として行を選択できないということです。リストビューから選択された行をasp.netで使用できない

行のIDを取得するために、チェックボックスツールチップを行IDに設定しました。リストビューは、内部のチェックボックスコントロールと完全にバインドされます。ブレークポイントを置くと、 'IF'条件(if(itemがCheckBox)の場合)が真になっていないことに気づいたので、それ以上のコードを実行することはできません。

List<string> ListItems = new List<string>(); 
foreach (void el_loopVariable in shipments.Items) { 
    el = el_loopVariable; 
    foreach (void item_loopVariable in el.Controls) { 
     item = item_loopVariable; 
     if (item is CheckBox) { 
      if (((CheckBox)item).Checked == true) { 
       ListItems.Add(((CheckBox)item).ToolTip); 
       Session["selectedConsignments"] = ListItems.ToArray(); 
      } 
     } 
    } 
} 

リストビュー(簡単にするために、私はちょうどそのチェックボックスの1列を入れています)

<asp:ListView ID="shipments" runat="server" DataKeyNames="ID"> 
    <ItemTemplate> 
     <tr> 
      <td id="cell13" runat="server"> 
       <asp:CheckBox ID="chk" runat="server" ToolTip='<%# Eval("ID") %>' /> 
      </td> 
     </tr> 
    </ItemTemplate> 
</asp:ListView> 
+0

あなたのコードはコンパイルされていますか? foreachループで 'void'は何をするのでしょうか? –

+0

@ChetanRanpariya申し訳ありませんが、実際に私はvb.netの開発者です。私はちょうど私のVBコードをtelrikからC#に変換しました。なぜなら、私はVBの投稿にはほとんど答えられていないことが気づいたからです。 – SUN

答えて

2

あなたのVBコードでどのような問題が起きているのかよくわかりません。 しかし、あなたはリストビュー項目のチェックボックスを識別するために過労をしています。 FindControlは、パラメータとしてcontrolIdをとり、親コントロール内のそのIdに一致するコントロールを見つけることができます。

コードを次のように書くことを検討してください。

List<string> ListItems = new List<string>(); 
foreach (var el_loopVariable in shipments.Items) 
{ 
    //Passing id "chk" to FindControl method of current ListViewItem and trying to cast it as Checkbox 
    var checkBox = el_loopVariable.FindControl("chk") as CheckBox; 
    if (checkBox != null && checkBox.Checked) 
    { 
     ListItems.Add(checkBox.ToolTip); 
    } 
} 

これは、問題の解決に役立ちます。

サーバ側のコードでアクセスしない場合は、「ru​​nat = server」をtdとして宣言する必要もありません。

ここには、同じコードのVB.NET版があります。

Dim ListItems As New List(Of String)() 
For Each el_loopVariable As ListViewItem In shipments.Items 
    Dim checkBox As CheckBox = TryCast(el_loopVariable.FindControl("chk"), CheckBox) 

    If checkBox IsNot Nothing AndAlso checkBox.Checked Then 
     ListItems.Add(checkBox.ToolTip) 
    End If 
Next 
+0

ありがとうございます。あなたのソリューションは私のために働いた。そして、 "runat = server"と答えました。なぜなら、私は、コードbehndからCSSを変更するためにセルを使用する必要があるからです。とにかくTysm。 – SUN

0
// here: 
<td id="cell13" runat="server"> 

あり、上の親コントロールがされているので、試してみてください。

item.Controls[0] is CheckBox 

しかしとしてコンパイル済みのMSILコードを読んだことがあります。

CheckBox chk = item.Controls[0] as CheckBox; 
if(chk != null) 
// is executed faster 
関連する問題