对于导出到 Excel,如果您不使用基于 XML 的 2007 或 2010,Interop 几乎是唯一的方法。不过也没有名气那么差。我将列出一些解决方案。
1 到 Excel
首先将 Microsoft.Office.Interop.Excel 组件引用添加到您的项目。这应该在 Project -> Add Reference 中的 .NET 选项卡下。
将 using 语句添加到您的表单中:
使用 Excel = Microsoft.Office.Interop.Excel;
添加一个按钮控件,并将这段代码添加到它的主体中:
private void btnExport_Click(object sender, EventArgs e)
{
Excel.Application app = new Excel.Application();
app.Visible = true;
Excel.Workbook wb = app.Workbooks.Add(1);
Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets[1];
// changing the name of active sheet
ws.Name = "Exported from gridview";
ws.Rows.HorizontalAlignment = HorizontalAlignment.Center;
// storing header part in Excel
for (int i = 1; i < dataGridView1.Columns.Count + 1; i++)
{
ws.Cells[1, i] = dataGridView1.Columns[i - 1].HeaderText;
}
// storing Each row and column value to excel sheet
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
ws.Cells[i + 2, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();
}
}
// sizing the columns
ws.Cells.EntireColumn.AutoFit();
// save the application
wb.SaveAs("c:\\output.xls",Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive , Type.Missing, Type.Missing, Type.Missing, Type.Missing);
// Exit from the application
app.Quit();
}
}
2 - 到 SQL Server
这不需要互操作。为了便于使用,请将您的 List 对象传递给执行插入的事件。如果您将表格设置为与您的网格视图列相对应,这很容易。在这里,我使用了存储过程。
private void btnToSQL_Click(object sender, EventArgs e)
{
string connStr = @"Data Source=(local)\sqlexpress;Initial Catalog=rTALIS;Integrated Security=True";
var cn = new SqlConnection(connStr);
var cm = new SqlCommand("exec usp_InsertRecord", cn);
cm.CommandType = System.Data.CommandType.StoredProcedure;
try
{
cn.Open();
foreach (Row r in rows)
{
cm.Parameters.Clear();
cm.Parameters.AddWithValue("@Number1", r.Number1);
cm.Parameters.AddWithValue("@Number2", r.Number2);
cm.Parameters.AddWithValue("@Number3", r.Number3);
cm.Parameters.AddWithValue("@Number4", r.Number4);
cm.Parameters.AddWithValue("@Number5", r.Number5);
cm.Parameters.AddWithValue("@Number6", r.Number6);
cm.Parameters.AddWithValue("@Number7", r.Number7);
cm.Parameters.AddWithValue("@Date1", r.Date1);
cm.ExecuteNonQuery();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
cn.Close();
}
}
如果我需要为你调整这个,请告诉我。在原始示例中,我有 List rows = new List();在 form_Load 方法中声明。这适用于该解决方案,但现在它的范围太有限了。我已经将它上移/移出到类中,以便可以在表单上的任何位置调用 in(特别是 btnToSQL_Click)。我在下面评论了它:
List<Row> rows = new List<Row>();
private void Form1_Load(object sender, EventArgs e)
{
//var rows = new List<Row>(); //limited scope
var sr = new StreamReader(@"C:\so_test.txt");
while (!sr.EndOfStream)
{
string s = sr.ReadLine();
if (!String.IsNullOrEmpty(s.Trim()))
{
rows.Add(new Row(s));
}
}
sr.Close();
dataGridView1.DataSource = rows;
}