与数据表保持一致。 我想要做的是从Excel文档中取出一个列,然后用它来创建一个PDF文件。
这里是我取出数据并放入Datagrid视图的代码。
void ExcelOpen()
{
string PathConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +textBox1.Text+ ";Extended Properties=Excel 12.0;";
OleDbConnection conn = new OleDbConnection(PathConn);
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("SELECT * FROM[" + textBox3.Text + "$"+Kolumn1.Text+":"+Kolumn1.Text+"]", conn);
DataTable dt = new DataTable();
myDataAdapter.Fill(dt);
dataGridView1.DataSource = dt;
// a try to convert the data to an Array.
List<String> str = new List<string>();
foreach (DataRow row in dt.Rows)
{
foreach (DataColumn col in dt.Columns)
{
stringColumnValue +="" + Convert.ToString(row[col]);
}
str.Add(stringColumnValue.Trim());
}
string.Join(" ", str.ToArray());
}
答案 0 :(得分:1)
使用DataRow的ItemArray属性。尝试类似下面的内容。
foreach (DataRow row in dt.Rows)
{
var stringArr = dataTable.row.ItemArray.Select(x =>x.ToString()).ToArray();
}
奖金注意:
下面的查询是针对SQL注入攻击打开的。您应该在sql语句中使用Parameters而不是字符串连接。
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("SELECT * FROM[" + textBox3.Text + "$"+Kolumn1.Text+":"+Kolumn1.Text+"]", conn);
答案 1 :(得分:0)
试试这种方式
List<string> s = dt.AsEnumerable().Select(x => x[0].ToString()).ToList();
foreach(string e in s)
Console.WriteLine(e);
答案 2 :(得分:0)
你在strColumnValue上做+ =,这意味着你每次进行循环都会继续添加到该字符串。
然后将strColumnValue添加到str,这是一个字符串数组。因此,如果您的行是“A”,“B”,“C”,则在3个循环后,StrColumnValue将为“ABC”,str将为[“A”,“AB”,“ABC”]
然后在最后执行连接,但是不要将连接的结果分配给任何变量,因此该语句无效。如果它被分配,它看起来像“A AB ABC”
就像有三种不同的方法来构建一起使用的字符串。
当您从许多较小的字符串创建字符串时,最有效的方法是StringBuilder。见下文。
var sb = new StringBuilder();
foreach (DataRow row in dt.Rows)
{
foreach (DataColumn col in dt.Columns)
{
sb.Append(Convert.ToString(row[col])));
sb.Append(" ");
}
}
var fullString = sb.ToString();