将一列gridview映射到标签控件时出现Null Reference Exception

时间:2013-12-18 12:23:01

标签: c# asp.net gridview label

我有一个包含数据的列gridview。我想将gridview的每一行上的数据映射到标签控件。但是在执行代码时我有一个ArgumenyOutOfRange异常。请查看下面的代码块以了解我的概念。

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        gvSurveyResult.DataSource = getStatusTable();
        gvSurveyResult.DataBind();
        gvSurveyResult.Visible = true;

        foreach (GridViewRow myRow in gvSurveyResult.Rows)
        {
            for (int i = 1; i <= gvSurveyResult.Rows.Count; i++)
            {
                Label lblResults = new Label();
                lblResults = ((Label)ResultsPanel.FindControl("lblResult" + i +".Text"));
                String gvCellText = myRow.Cells[i].Text;
                lblResults.Text = gvCellText;
            }
        }
    }
}

我觉得lblResults.Text没有得到myRow.Cells [i] .Text传递给它的值

我需要从One列gridview中获取结果,然后将它们映射到页面上的标签。谢谢你们一直在那里。

Guzzyman。

2 个答案:

答案 0 :(得分:0)

您需要在行数据绑定事件上编写代码。

GridView.RowDataBound Event

那应该如下

protected void GridView1_DataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        //Label lblResults = new Label();
        //lblResults = ((Label)ResultsPanel.FindControl("lblResult" + i +".Text"));
        //String gvCellText = myRow.Cells[i].Text;
        //lblResults.Text = gvCellText;
    }
}

答案 1 :(得分:0)

两件事

  1. 索引是基于零的,因此你的for循环不正确(注意gvSurveyResult.Rows只返回Data - 行,而不是标题)
  2. 您正在使用行的索引访问单元格,您可能希望使用Columns

  3. 这应该起作用(尽管对我来说没有多大意义):

    foreach (GridViewRow myRow in gvSurveyResult.Rows)
    {
        for (int i = 1; i < gvSurveyResult.Columns.Count; i++)
        {
            string labelID = string.Format("lblResult{0}", i);
            Label lblResults = ((Label)ResultsPanel.FindControl(labelID);
            String gvCellText = myRow.Cells[i].Text;
            lblResults.Text = gvCellText;
        }
    }
    

    但我会使用RowDataBound事件而不是这个循环。