2011-12-13 7 views
0

データリストの選択を処理する必要がありますが、データリストのアイテムをループしているforechループは機能しません。基本的にチェックボックスがチェックされていれば、Chekcボックスのツールチップにある電子メールアドレスを取得したいと思います。データリストの数はゼロです。誰かがこれで私を助けることができますか?データリストのルーピングが失敗します

<ajaxToolkit:Accordion ID="Accordion1" runat="server" selectedIndex="0" FadeTransitions="true" FramesPerSecond="40" TransitionDuration="250" SuppressHeaderPostbacks="true" HeaderCssClass="Header"> 
      <Panes> 
       <ajaxToolkit:AccordionPane ID="AccordionPane1" runat="server"> 
        <Header> 
          <asp:LinkButton ID="lbtnSM" runat="server" Width="207px" Text="Users" Font-Bold="true" CssClass="GeneralText" /><br /><br /> 
        </Header> 
        <Content> 
         <div class="emailleftcolumm"> 
          <asp:DataList ID="dlSM" runat="server" DataKeyField="ID" OnItemCommand="dlSM_ItemCommand" 
           EnableViewState="false" Width="207px" OnItemDataBound="dlSM_ItemDataBound"> 
           <HeaderStyle BorderWidth="1" BorderStyle="Inset" Font-Bold="true" /> 
           <HeaderTemplate> 
            Select All <asp:CheckBox ID="chkSelectAll" runat="server" /> 
           </HeaderTemplate> 
           <ItemTemplate> 
            <asp:CheckBox ID="chkSelector" runat="server" Text='<%# Eval("firstname") + " " + Eval("lastname") + ", " + Eval("acronym") %>' 
             CssClass="GeneralText" ToolTip='<%# Eval("email") + ";" + Eval("altemail") %>'/>         </ItemTemplate> 
           <AlternatingItemTemplate> 
            <div id="altbgcolor"> 
             <asp:CheckBox ID="chkSelector" runat="server" Text='<%# Eval("firstname") + " " + Eval("lastname") + ", " + Eval("acronym") %>' 
              ToolTip='<%# Eval("email") + ";" + Eval("altemail") %>' CssClass="GeneralText" />          </div> 
           </AlternatingItemTemplate> 
          </asp:DataList> 
         </div> 
        </Content> 
       </ajaxToolkit:AccordionPane> 

ボタンのクリックイベントハンドラは次のようになります。

protected void btnSend_Click(object sender, EventArgs e) 
    { 
     string _mailto = string.Empty; 
     string _subject = txtSubject.Text; 
     string _message = txtMessage.Text; 

     DataList DataList1 = (DataList)FindControl("DataList1"); 
     foreach (DataListItem item in DataList1.Items) 
     { 
      CheckBox chkSelector = (CheckBox)item.FindControl("chkSelector"); 
      if (chkSelector.Checked) 
      { 
       _mailto += chkSelector.ToolTip + ";"; 
      } 
     } 

     // do mail call 

     // Clean up 
     lblEmailConfirm.Font.Bold = true; 
     lblEmailConfirm.Text = "Subject: " + _subject + " Message: " + _message; 
     txtSubject.Text = string.Empty; 
     txtMessage.Text = string.Empty; 
    } 
+2

あなたはviewstateを有効にしてください –

+0

あなたのDataListのIDは 'DataList1'ではなく' dlSM'です。 'btnSend'はどこですか?なぜあなたはFindControlでDataListのためにserachingですか? –

+0

@Tim:IDは修正しましたが、使用しません。 btnSendはアコーディオンの外にあり、電子メールを送信するためにクリックするフォームの一部です。それは発生し、問題はありません。これを投稿して以来、私は次のことをしました:DataList dlSM =(DataList)Master.FindControl( "ContentPlaceHolder1")。FindControl( "Accordion1")。FindControl( "AccordionPane1")。FindControl( "dlSM");フローはforeachに入りますが、最初の反復で終了します。 – Risho

答えて

0

あなたがこれはおそらく、あなたが提供した内容に基づいて

DataList DataList1 = (DataList)FindControl("dlSM"); 

ことになっている

DataList DataList1 = (DataList)FindControl("DataList1"); 

を持っています。私は今DataList1のIDでコントロールが表示されません。

+0

'DataList1.Items'が見つからない場合、nullrefをスローしませんか? –

+0

@ヤード:私はちょうどティムのポストにコメントしました。私はあなたにはまだ結果がないことを示唆しているので、修正を加えました。 – Risho

1

viewstateをtrueに設定すると、トリックは誰ですか? (Well Adrianは...)

+1

ありがとうございます。この回答を受け入れる必要があります。私はこれに+1を与えるでしょう、それは最初です。 –

関連する問題