如何解决System.ArgumentOutOfRangeException

时间:2014-01-07 06:50:18

标签: asp.net c#-4.0

我有两个页面一个MasterPage.master和默认我认为这个错误为两个表[0]我在主页面中使用,掌握一个轮询与数据表和默认我在使用数据表显示新闻时删除数据表在页面默认和运行是正确的,当使用两个数据表时出现错误我看到错误

运行default.aspx时出现此错误,请参阅:

Specified argument was out of the range of valid values.
Parameter name: index
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: index

Source Error:


Line 88:             tbl.BorderWidth = 0;
Line 89:             tbl.Attributes.Add("Style", "text-align:right");
Line 90:             ImageButton ButtonPolls = (ImageButton)tbl.Controls[0];
Line 91:             ButtonPolls.ImageUrl = "../images/poll/CastVote.jpg";

Line 92:        

此代码使用MasterPage.master

 string strSQL = "select QuestionText from TPollQuestions where Iscurrent=1 and Isarchived=0";
        string cmdtext = "";
        SqlConnection conn = Conn;
        Pollcontrol1.CanVote = true;

        if (conn.State == System.Data.ConnectionState.Closed)
            conn.Open();

        cmdtext = "select QuestionText from TPollQuestions where Iscurrent=1 and Isarchived=0";
        cmd = new SqlCommand(cmdtext, conn);
        Pollcontrol1.PollQuestion = cmd.ExecuteScalar().ToString();
        conn.Close();
        cmdtext =
            "select optionID,PollID,OptionText,Votes from TPollOptions where pollID in(select PollID from TPollquestions where Iscurrent=1 and Isarchived=0)";
        SqlDataAdapter da = new SqlDataAdapter(cmdtext, conn);
        DataTable dt = new DataTable();
        da.Fill(dt);

        for (int i = 0; i < dt.Rows.Count; i++)
        {
            Pollcontrol1.AddPollAnswer(Convert.ToInt32(dt.Rows[i]["pollID"]), Convert.ToInt32(dt.Rows[i]["optionID"]), dt.Rows[i]["optionText"].ToString(), Convert.ToInt32(dt.Rows[i]["votes"]));
        }

        TableCell tbl = (TableCell)Pollcontrol1.Controls[0].Controls[Pollcontrol1.Controls[0].Controls.Count - 1].Controls[0];
        tbl.BorderWidth = 0;
        tbl.Attributes.Add("Style", "text-align:right");
        ImageButton ButtonPolls = (ImageButton)tbl.Controls[0];
        ButtonPolls.ImageUrl = "../images/poll/CastVote.jpg";

和default.aspx中的此代码 当删除getdata(str)运行正确但没有错误

时,此数据表显示新闻
PagedDataSource pgsource = new PagedDataSource();
int findex, lindex;
DataRow dr1;
static string str = "select *  from TNews where 1=1";
protected void Page_Load(object sender, EventArgs e)
{

    if (!IsPostBack)
    {
        //CurrentPage = 0;
 GetData(str);
    }
}

DataTable GetData(string str)
{
    DataTable dtable1= new DataTable();

    SqlConnection Conn;
    SqlCommand Cmd;

    Conn = new SqlConnection(ConfigurationManager.ConnectionStrings["bakerConnectionString"].ToString());
    Cmd = new SqlCommand();
    Conn.Open();
    Cmd.Connection = Conn;

    Cmd.CommandText = str;

    SqlDataAdapter dap1= new SqlDataAdapter(Cmd);
    DataSet ds1 = new DataSet();
    dap1.Fill(ds1, "ds1");
    pgsource.DataSource = ds1.Tables[0].DefaultView;
    DataBind();
    return ds1.Tables[0];
}

1 个答案:

答案 0 :(得分:0)

查看错误消息我不得不猜测你的问题在这里:

Line 90:             ImageButton ButtonPolls = (ImageButton)tbl.Controls[0];

另外,我看到你使用基于索引的控件检索相当多,这是不可取的。相反,使用Control.FindControl方法检索子控件(当然,检查null)。

假设您的ImageButton标识为_imgButton。要从表中检索它,请使用:

var imgButton = tbl.FindControl("_imgButton") as ImageButton;
if(imgButton != null)
{
    // your logic here...
}