我的Gridview总是得到null数据表,错误消息:Object reference not set to an instance of an object.
,但我不知道丢失了哪些代码。
感谢帮助!!!
.CS
protected void btn_Click(object sender, EventArgs e)
{
DataSet ds = new DataSet();
DataTable dt = new DataTable("abc");
dt = getDT(formatDate); //string[] formatDate ={2013-01-01,2013-05-01..}
ds.Tables.Add(dt);
GridView2.DataSource = ds.Tables["abc"].DefaultView;
//if change to dt , it works ==> GridView2.DataSource =dt;
GridView2.DataBind();
}
}
private DataTable getDT(string[] date)
{
DataTable dt = new DataTable();
dt.Columns.Add("RowID", typeof(Int16));
dt.Columns.Add("Date", typeof(DateTime));
for (int i = 0; i < date.Length; i++)
{
dt.Rows.Add(i + 1, date[i]);
}
return dt;
}
答案 0 :(得分:3)
由于代码 -
Protected void btn_Click(object sender, EventArgs e)
{
DataSet ds = new DataSet();
DataTable dt = new DataTable("abc");
dt = getDT(formatDate);
ds.Tables.Add(dt);
GridView2.DataSource = ds.Tables["abc"].DefaultView;
GridView2.DataBind();
}
}
private DataTable getDT(string[] date)
{
DataTable dt = new DataTable();
dt.Columns.Add("RowID", typeof(Int16));
dt.Columns.Add("Date", typeof(DateTime));
for (int i = 0; i < date.Length; i++)
{
dt.Rows.Add(i + 1, date[i]);
}
return dt;
}
在getDT
功能中,您再次创建一个没有名称的新DataTable
。您应该将表作为参考发送,或者在函数中创建它。以下任一解决方案都可以使用 -
Protected void btn_Click(object sender, EventArgs e)
{
DataSet ds = new DataSet();
DataTable dt = new DataTable("abc");
dt = getDT(dt, formatDate);
ds.Tables.Add(dt);
GridView2.DataSource = ds.Tables["abc"].DefaultView;
GridView2.DataBind();
}
}
private DataTable getDT(DataTable dt, string[] date)
{
//DataTable dt = new DataTable();
dt.Columns.Add("RowID", typeof(Int16));
dt.Columns.Add("Date", typeof(DateTime));
for (int i = 0; i < date.Length; i++)
{
dt.Rows.Add(i + 1, date[i]);
}
return dt;
}
或,
Protected void btn_Click(object sender, EventArgs e)
{
DataSet ds = new DataSet();
DataTable dt = getDT(formatDate);
ds.Tables.Add(dt);
GridView2.DataSource = ds.Tables["abc"].DefaultView;
GridView2.DataBind();
}
}
private DataTable getDT(string[] date)
{
DataTable dt = new DataTable("abc");
dt.Columns.Add("RowID", typeof(Int16));
dt.Columns.Add("Date", typeof(DateTime));
for (int i = 0; i < date.Length; i++)
{
dt.Rows.Add(i + 1, date[i]);
}
return dt;
}
编辑:仅适用于HassanNisar
@HassanNisar ..这是调试器输出 -
答案 1 :(得分:2)
您应该传递正在创建的DataTable的名称。默认情况下,DataTable
没有名称,这就是为什么您无法通过名称abc
获取名称。
private DataTable getDT(string name, string[] date)
{
DataTable dt = new DataTable(name);
dt.Columns.Add("RowID", typeof(Int16));
dt.Columns.Add("Date", typeof(DateTime));
for (int i = 0; i < date.Length; i++)
dt.Rows.Add(i + 1, date[i]);
return dt;
}
然后创建表格如下:
ds.Tables.Add(getDT("abc", formatDate));
您还可以为日期参数添加空检查。
注意:我建议您改进代码的命名。见C# Naming Guidelines。而且你不需要在这里使用DataSet - 只需绑定到DataTable:
private DataTable CreateDatesTable(IEnumerable<DateTime> dates)
{
DataTable dt = new DataTable("Dates");
dt.Columns.Add("RowID", typeof(Int16));
dt.Columns.Add("Date", typeof(DateTime));
foreach(var date in dates)
dt.Rows.Add(dt.Rows.Count + 1, date);
return dt;
}
用法:
protected void btn_Click(object sender, EventArgs e)
{
var dates = formattedDates.Select(DateTime.Parse);
GridView2.DataSource = CreateDatesTable(dates);
GridView2.DataBind();
}