C# Can';不要复制数据表
我有以下代码,用于使用CSV文件中的信息填充数据表 我已将DataTable声明为类属性C# Can';不要复制数据表,c#,asp.net,datatable,C#,Asp.net,Datatable,我有以下代码,用于使用CSV文件中的信息填充数据表 我已将DataTable声明为类属性 public partial class Super_Proyectos_LoadProjects: System.Web.UI.Page { private DataTable dt; private DataTable datosC; string rutaActual; .... } protected void btnLoad_Click(object sender, E
public partial class Super_Proyectos_LoadProjects: System.Web.UI.Page
{
private DataTable dt;
private DataTable datosC;
string rutaActual;
....
}
protected void btnLoad_Click(object sender, EventArgs e)
{
if(fupCSV.HasFile)
{
try
{
string csvPath = Server.MapPath("~/Projects/") + Path.GetFileName(fupCSV.PostedFile.FileName);
fupCSV.SaveAs(csvPath);
dt = new DataTable();
dt.Columns.AddRange(new DataColumn[8] { new DataColumn("Project ID", typeof(string)), new DataColumn("Worker ID", typeof(string)),
new DataColumn("Project Name", typeof(string)));
dt.TableName = "Project";
string csvData = File.ReadAllText(csvPath);
foreach(string row in csvData.Split('\n'))
{
if(!string.IsNullOrEmpty(row))
{
dt.Rows.Add();
int i = 0;
foreach (string cell in row.Split(','))
{
dt.Rows[dt.Rows.Count - 1][i] = cell;
i++;
}
}
}
gvProyectos.DataSource = dt;
gvProyectos.DataBind();
}
catch(Exception)
{
string script = @"<script type='text/javascript'>
alert('Error al cargar los datos.');
</script>";
ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, false);
}
}
}
但是,当我单击“接受”按钮时,会出现以下错误:
对象引用未设置为对象的实例
为什么在加载数据表的外部使用该数据表时会出错?调试代码,您会看到在某个地方,您正在对空值对象(可能是存储在
dt.Rows[0][0]
中的值)调用一个函数。为什么您首先要将它放在数据表中?为什么不把它放到强类型对象中?为什么要在页面中使用字段,并希望它们在回发过程中保持不变?(提示,他们不会)奇怪,我刚刚在一小时前回答了这个问题的另一个版本谢谢你的回答。嗨@mason你能解释一下为什么我不能使用字段吗?正确的方法是什么?Thank you字段(也称为实例变量)特定于该类的实例,在本例中,Super\u Proyectos\u LoadProjects
,这是您的页面类。对服务器的每个请求都会导致page类的一个新实例,因此所有实例变量都将被丢弃。当您单击按钮或从ASP.NET页面触发服务器端事件时,将导致新的回发,这是一个新的HTTP请求。因此,dt
不会在回发之间持续存在。您应该做的是将数据加载到强类型模型中(创建一个新类,而不是使用DataTable)
protected void btnAccept_Click(object sender, EventArgs e)
{
Response.Write(dt.Rows[0][0].ToString());
}