2017-02-17 2 views
0

У меня возникла проблема с выполнением следующего кода. Я создаю почтовую систему, в которой я могу выбрать несколько электронных писем, щелкнув флажок в gridview. После того, как я выберу письма, которые захочу, и нажмите кнопку отправки, я получаю следующую ошибку:Ошибка почтового клиента ASP, Gridview и флажки

Индекс был за пределами допустимого диапазона. Должен быть неотрицательным и меньше размера коллекции. Имя параметра: индекс

Описание: Необработанное исключение произошло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительной информации об ошибке и ее возникновении в коде.

Сведения об исключении: System.ArgumentOutOfRangeException: Индекс был за пределами допустимого диапазона. Должен быть неотрицательным и меньше размера коллекции. Имя параметра: индекс

Вот мой код ниже Любая помощь приветствуется

protected void send_Click(object sender, EventArgs e) 
{ 
     //Array list to hold selected email ids 
     ArrayList emailArray = new ArrayList(); 
     //Looping through rows of GridView 
     foreach (GridViewRow item in GridView1.Rows) 
     { 
      //Creating checkbox object using the find control method 
      CheckBox cb = (CheckBox)item.Cells[1].FindControl("CheckBox1"); 
      //CheckBox cb = (CheckBox)item.FindControl("CheckBox1"); 
      //Checking whether checkbox is checked or not 
      if (cb.Checked) 
      { 
       //If checked Adding email id to Arraylist 
       emailArray.Add(GridView1.DataKeys[item.RowIndex]["email"].ToString()); 
      } 
     } 
     //Looping through the email id list 
     foreach (string email in emailArray) 
     { 
      MailMessage msg = new MailMessage(); 
      msg.From = new MailAddress("[email protected]"); 
      msg.To.Add(email); 

      msg.Subject = subjecttext.Text; 
      msg.Body = TextBox1.Text; 
      SmtpClient smt = new SmtpClient("smtp.gmail.com", 587); 
      smt.Credentials = new System.Net.NetworkCredential("[email protected]", "xxxxxxxxx"); 
      smt.EnableSsl = true; 
      smt.Send(msg); 
      //} 
     } 
     emailsent.Text = "Email has been sent Successfully"; 
    } 
} 

<asp:GridView ID="GridView1" runat="server" Visible="true" 
    CssClass="mydatagrid" EmptyDataText="No Students Enrolled on this Module" 
    EmptyDataRowStyle-BorderWidth="0px" PagerStyle-CssClass="pager" 
    HeaderStyle-CssClass="header" RowStyle-CssClass="rows" 
    DataSourceID="displayemail"> 
    <Columns> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:CheckBox ID="CheckBox1" runat="server" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField DataField="email" HeaderText="email" SortExpression="name" /> 
    </Columns> 
</asp:GridView> 
+0

Вы установили точку останова и прошли через него? Где именно возникает ошибка? –

+0

Im совершенно новый для ASP, поэтому не уверен, что точка останова, точка там ошибка выбрасывается является emailArray.Add (GridView1.DataKeys [item.RowIndex] ["email"]. ToString()); –

+0

Можете ли вы разместить разметку сетки? –

ответ

0

Что вам не хватает является установка DataKeyName свойства GridView. Ваш GridView следует изменить следующим образом.

<asp:GridView ID="GridView1" runat="server" Visible="true" 
    CssClass="mydatagrid" EmptyDataText="No Students Enrolled on this Module" 
    EmptyDataRowStyle-BorderWidth="0px" PagerStyle-CssClass="pager" 
    HeaderStyle-CssClass="header" RowStyle-CssClass="rows" 
    DataSourceID="displayemail" DataKeyNames="email"> 
    <Columns> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:CheckBox ID="CheckBox1" runat="server" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField DataField="email" HeaderText="email" SortExpression="name" /> 
    </Columns> 
</asp:GridView> 
Смежные вопросы