0

我有一个名为 dayList 的列表,其中包含 12 个日期。我正在尝试将此列表绑定到 GridView 列。

  GridView2.DataSource = dayList;

        GridView2.DataBind();

        for (int i = 0; i < dayList.Count; i++)
        { 
            Label lbldate = (Label)GridView2.Rows[i].FindControl("lblgriddate");
            lbldate.Text = Convert.ToString(dayList[i]);
        }
    }

我在以下位置收到未将对象引用设置为对象错误的实例:

lbldate.Text = Convert.ToString(dayList[i]);

是因为 GridView 中没有行吗?但是 GridView 不应该像我们将 GridView Column 与 DataTable 绑定时一样自动添加行吗?

4

3 回答 3

1

正如@manish-mishra 所说,你为什么还要这样做?只要有以下就足够了:

GridView2.DataSource = dayList;
GridView2.DataBind();

如果要设置lblgriddate控件的文本,则应将其设置为绑定到行DataItem模板的。

        var dayList = new List<DateTime>() { 
            DateTime.Today, 
            DateTime.Today.AddDays(-1), 
            DateTime.Today.AddDays(-2) 
        };
        GridView2.DataSource = dayList;
        GridView2.DataBind();

对于 HTML:

    <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="false">
        <Columns>
            <asp:TemplateField HeaderText="Date">
                <ItemTemplate>
                    <asp:Label ID="lblgriddate" Text="<%# Container.DataItem %>" runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

然后我在调用后添加了以下代码DataBind(),这也有效。但这并没有改变任何东西。因为标签本身已经数据绑定到该值,所以您不必在代码中显式绑定它。

        for (int i = 0; i < dayList.Count; i++)
        {
            Label lbldate = (Label)GridView2.Rows[i].FindControl("lblgriddate");
            lbldate.Text = Convert.ToString(dayList[i]);
        }
于 2013-03-07T13:06:29.527 回答
0

您正在尝试访问那些甚至不存在的 GridView 行。

你为什么要绑定gridView的单列?

您应该执行以下两项中的任何一项:

  1. 直接绑定你gridViewdayListie

     GridView2.AutoGenerateColumns=true;
     GridView2.DataSource = dayList;
     GridView2.DataBind();
    
  2. 将您的 GridView 绑定到具有至少 12 行的备用数据源,以便您的 GridView 确实有行,然后使用您的 DayList 中的值更新它的列之一RowDataBound(您的网格),即dataBinding

    for (int i = 0; i < dayList.Count; i++)
    { 
        Label lbldate = (Label)GridView2.Rows[i].FindControl("lblgriddate");
        lbldate.Text = Convert.ToString(dayList[i]);
    }
    

在 RowDataBound 内

    protected void Review_grid_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            e.Row.Cells[2].Text = DayList[e.Row.RowIndex];

        }
    }

它应该给你一个想法:

您也可以将您的DayList收藏转换为GridViewRow 收藏并将其添加ControlsGridView. 见参考

于 2013-03-07T12:51:32.517 回答
0

创建一个新的 DataGridViewRow 对象 abd,然后将您的项目从列表添加到行。完成此操作后,将此行添加到您的 gridview。这将做你正在尝试做的事情

于 2013-03-07T13:24:01.533 回答