我在执行以下代码时遇到问题,我正在创建一个电子邮件系统,我可以通过单击GridView中的复选框选择多个电子邮件。选择想要的电子邮件并点击发送按钮后,我会收到以下错误
索引超出范围。必须是非负的,并且小于收藏的大小。 参数名称:索引
描述:执行当前Web请求期间发生了一个未经治疗的异常。请查看堆栈跟踪,以获取有关该错误以及代码中何处的更多信息。
异常详细信息: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("siscsc3047@gmail.com");
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("siscsc3047@gmail.com", "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>
您缺少的是设置GridView的DataKeyName
属性。您的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>