在C#中基于传入的Excel数据dynamic创build数据表?
我试图导入Excel表格到C#中的数据表。 我一直得到一个越界exception,因为列值是由我硬编码。
for(int c = 0; c <40; c ++){…}
所以,而不是硬编码这一点,并有一大堆列在我的数据表的空列,是否有一种方法来计算所有的列在我创build表之前传入? 从而允许我dynamic创build表中的传入数据?
以下是我的代码。
if (fileUpload.HasFile) { DataTable dt = new DataTable(); for (int c = 0; c <40; c++) { dt.Columns.Add(c.ToString(), typeof(string)); } using (Stream fileStream = fileUpload.PostedFile.InputStream) using (StreamReader sr = new StreamReader(fileStream)) { string a = null; while ((a = sr.ReadLine()) != null) { dt.Rows.Add(a.Split(new char[] { ',' }).ToArray()); } } GridView1.DataSource = dt; GridView1.DataBind();
尝试使用这样的东西,而不是:
DataTable dt; using (Stream fileStream = fileUpload.PostedFile.InputStream) using (StreamReader sr = new StreamReader(fileStream)) { string a = null; while ((a = sr.ReadLine()) != null) { string[] columns = a.Split(','); if (dt == null) { dt = new DataTable(); for (int i = 0; i < columns.Count(); i++) dt.Columns.Add(new DataColumn(i.ToString(), typeof(string))); } dt.Rows.Add(columns); } } GridView1.DataSource = dt; GridView1.DataBind();
只要第一行包含其余数据所具有的最大列数,就应该全部设置。
如果第一行是列名,则可以修改代码以跳过dt.Rows.Add(columns)
,并用columns[i].ToString()
replacei.ToString()
columns[i].ToString()
以命名DataColumn
正常。
如果列/值也被引号( "
)包围,则可以修改上面的while
语句,如下所示:
while ((a = sr.ReadLine()) != null) { a = a.Substring(1, a.Length - 2); string[] columns = a.Split(new string[] { "\",\"" }, StringSplitOptions.None); if (dt == null) { dt = new DataTable(); for (int i = 0; i < columns.Count(); i++) dt.Columns.Add(new DataColumn(i.ToString(), typeof(string))); } dt.Rows.Add(a.Split(new char[] { ',' }).ToArray()); }
这将剥离第一个和最后一个"
从整个string,然后拆分","
你可能想玩一些虽然,并添加代码来弄清楚你的字段是如何分隔,或有一些input字段,你可以指定,也就是说,如果你的input是如何定义的variables。