【问题标题】:ASP Email client error, Gridview and checkboxesASP 电子邮件客户端错误、Gridview 和复选框
【发布时间】:2017-02-18 14:01:57
【问题描述】:

我在执行以下代码时遇到问题,我正在创建一个电子邮件系统,我可以通过单击网格视图中的复选框来选择多封电子邮件。一旦我选择了我想要的电子邮件并点击发送按钮,我就会收到以下错误

索引超出范围。必须是非负数且小于集合的大小。 参数名称:索引

说明:在执行当前 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>

【问题讨论】:

  • 你设置断点并单步执行了吗?究竟是哪里抛出的错误?
  • 我对 ASP 很陌生,所以不确定断点是什么,引发错误的点是 emailArray.Add(GridView1.DataKeys[item.RowIndex]["email"].ToString() );
  • 你能发布 gridview 标记吗?
  • 在Visual Studio上,点击左侧栏,它会添加一个断点,然后你可以在调试模式下运行,它会在该行停止执行
  • 添加了代码,但代码部分的格式无法正常工作

标签: c# asp.net email gridview


【解决方案1】:

您缺少的是设置 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2020-01-16
    • 2011-05-04
    相关资源
    最近更新 更多