我正在查看提供给我的一些代码,以尝试了解如何将excel电子表格加载到DataTable
。我已经得到了那部分工作,或者至少我觉得它有效,因为它没有异常。我现在要做的是检查DataTable是否已填充。我遇到的问题是让Form
识别出Class中的List。
以下是我的班级的代码:
namespace WindowsFormsApplication12
{
class Class1
{
public List<DataTable> ImportExcel(string FileName)
{
List<DataTable> _dataTables = new List<DataTable>();
string _ConnectionString = string.Empty;
string _Extension = Path.GetExtension(FileName);
if (_Extension.Equals(".xls", StringComparison.CurrentCultureIgnoreCase))
{
_ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + FileName + ";Extended Properties=Excel 12.0;";
}
else if (_Extension.Equals(".xlsx", StringComparison.CurrentCultureIgnoreCase))
{
_ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName + ";Extended Properties=Excel 12.0 Xml;";
}
DataTable dataTable = null;
var count = 0;
using (OleDbConnection oleDbConnection = new OleDbConnection(string.Format(_ConnectionString, FileName)))
{
oleDbConnection.Open();
DataTable dbSchema = oleDbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables_Info, null);
foreach (DataRow item in dbSchema.Rows)
{
using (OleDbCommand oleDbCommand = new OleDbCommand())
{
oleDbCommand.Connection = oleDbConnection;
oleDbCommand.CommandText = string.Format("SELECT * FROM [Sheet1$]", item["TABLE_NAME"].ToString());
using (OleDbDataAdapter oleDbDataAdapter = new OleDbDataAdapter())
{
if (count < 3)
{
oleDbDataAdapter.SelectCommand = oleDbCommand;
dataTable = new DataTable(item["TABLE_NAME"].ToString());
oleDbDataAdapter.Fill(dataTable);
_dataTables.Add(dataTable);
count++;
}
}
}
}
}
return _dataTables;
}
}
}
以下是我的表单的代码:
namespace WindowsFormsApplication12
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string fileName = textBox1.Text;
Class1 ext = new Class1();
if (string.IsNullOrEmpty(fileName))
MessageBox.Show("Please enter a file extension");
else
ext.ImportExcel(fileName);
}
}
}
我尝试了一些诸如:
之类的东西 List<DataTable> ldt = new Class1.ImportExcel
ListBox.Items.Add(ext.ImportExcel._dataTables)
除了其他一些东西,但似乎都没有效果。我已经开始讨论如何调用List
并且没有工作。我在之前的练习中之前调用了DataTable
,但我无法根据此代码进行调整。如果有一些文件可以帮助我,或者如果我很接近,请向我推进正确的方向。提前谢谢。
答案 0 :(得分:1)
使用以下方法,您可以使用包含任何类型密钥的列表:
List<String> Test = new List<String>();
Test.Add("TEST");
Test.Add("Test");
Console.WriteLine(Test[0]); // TEST
Console.WriteLine(Test[1]); // Test
char[] t = Test[0].ToCharArray();
要通过搜索名称或ID获取列表中的某些值,请使用以下方法:
List<String> Test = new List<String>();
Test.Add("TEST");
Test.Add("Test");
string arry = Test.Where(x => x[0] == 'T').ToArray()[0];
Console.WriteLine(arry);
我还没有尝试过数据表的东西,但是你可以很容易地使用这些方法,Foreach语句也适用于某些东西:
List<String> Test = new List<String>();
Test.Add("TEST");
Test.Add("Test");
foreach (string str in Test)
{
Console.WriteLine(str);
}
答案 1 :(得分:1)
您可能希望使用FileHelpers库轻松导入数据。
ImportData.cs文件
[DelimitedRecord(",")]
public class ImportedData
{
public string DropDownValue;
public string DropDownText;
}
Form1档案
public partial class Form1 : Form
{
private void button1_Click(object sender, EventArgs e)
{
string fileName = textBox1.Text;
FileHelperEngine engine = new FileHelperEngine(typeof(ImportedData));
// To Read Use:
ImportedData[] customData = engine.ReadFile(fileName) as ImportedData[];
// let's say you named your ListBox as listBox1
listBox1.DataSource = customData;
listBox1.DataTextField = "DropDownText";
listBox1.DataValueField = "DropDownValue";
listBox1.DataBind();
}
}
如果您不想使用FileHelper库,那么:
ListBox.DataSource = ldt;
ListBox.DataBind();