我有一个名为dayList的List,里面有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绑定一样?
答案 0 :(得分:1)
正如@ manish-mishra所说,你为什么要这样做呢?只需拥有以下内容即可:
GridView2.DataSource = dayList;
GridView2.DataBind();
如果要设置lblgriddate
控件的文本,则应将其设置为绑定到rowtemplate的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]);
}
答案 1 :(得分:0)
您正在尝试访问那些甚至不存在的GridView行。
为什么要尝试绑定gridView的单个列?
你应该做以下两种情况之一:
直接将gridView
与dayList
绑定,即
GridView2.AutoGenerateColumns=true;
GridView2.DataSource = dayList;
GridView2.DataBind();
将GridView绑定到至少包含12行的备用DataSource,以便GridView确实有行,然后在RowDataBound
或之后(dataBinding
)更新其中的一列Grid)包含来自DayList的值,即
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
集合,并将其添加到Controls
的{{1}}。见ref。
答案 2 :(得分:0)
创建一个新的DataGridViewRow对象,然后将列表中的项目添加到行。执行此操作后,将此行添加到gridview。这将做你正在尝试做的事情