このチュートリアルでは、データソースはAOD.NETエンティティデータモデルですが、ここではAccessデータベースを使用しています。私は、コードをコンパイルしたが、C#DataGridViewからExcelファイルへのエラー
The name 'productBindingSource' does not exist in the current context
または
The name 'DB' does not exist in the current context
または
The type or namespace name 'Product' could not be found
のような様々なエラーを取得しています、私はわからないんだけど、私は参照を追加見逃している場合は、これらのエラーであればデータソースが異なるためですか?
Visual Studioで自動的に//TODO: This line of code etc...
が追加され、チュートリアルの表示方法に変更されました。
私が間違っていることを誰かに見せてくれることを願っていますか?
チュートリアル:https://www.youtube.com/watch?v=-wGzK1vsqS8
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ExportWebsiteData
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void label1_Click(object sender, EventArgs e)
{
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
List<Product> list = ((DataParameter)e.Argument).ProductList;
string filename = ((DataParameter)e.Argument).FileName;
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
Workbook wb = excel.Workbooks.Add(XlSheetType.xlWorksheet);
Worksheet ws = (Worksheet)excel.ActiveSheet;
excel.Visible = false;
int index = 1;
int process = list.Count;
//Add Column
ws.Cells[1, 1] = "Item Number";
ws.cells[1, 2] = "Model";
ws.cells[1, 3] = "Manufacturer";
ws.cells[1, 4] = "Category";
ws.cells[1, 5] = "Subcategory";
//
foreach(Product p in list)
{
if (!backgroundWorker.CancellationPending)
{
backgroundWorker.ReportProgress(index++ * 100/process);
ws.Cells[index, 1] = p.ItemNumber.ToString();
ws.Cells[index, 2] = p.Model.ToString();
ws.Cells[index, 3] = p.Manufacturer.ToString();
ws.Cells[index, 4] = p.Category.ToString();
ws.Cells[index, 5] = p.SubCategory.ToString();
}
}
//Save file
ws.SaveAs(filename, XlFileFormat.xlWorkbookdefault, Type.Missing, Type.Missing, true, false, XlSaveConflictResolution.xlLocalSessionChanges, Type.Missing, Type.Missing);
excel.Quit();
}
struct DataParameter
{
public List<Product> ProductList;
public string FileName { get; set; }
}
DataParameter _inputParameter;
private void Form1_Load(object sender, EventArgs e)
{
using (this.inventoryTableAdapter.Fill(this._Wizard_Data_2016_10_17DataSet.Inventory); = new _Wizard_Data_2016_10_17DataSet())
{
productBindingSource.DataSource = DB.Products.ToList();
}
// TODO: This line of code loads data into the '_Wizard_Data_2016_10_17DataSet.Inventory' table. You can move, or remove it, as needed.
//this.inventoryTableAdapter.Fill(this._Wizard_Data_2016_10_17DataSet.Inventory);
}
private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar.Value = e.ProgressPercentage;
lblStatus.Text = string.Format("Processing...{0}", e.ProgressPercentage);
progressBar.Update();
}
private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if(e.Error == null)
{
Thread.Sleep(100);
lblStatus.Text = "Your data has been successfully exported.";
}
}
private void btnExport_Click(object sender, EventArgs e)
{
if (backgroundWorker.IsBusy)
return;
using (SaveFileDialog sfd = new SaveFileDialog() { Filter = "Excel Workbook|*.xls" })
{
if (sdf.ShowDialog() == DialogResult.OK)
{
_inputParameter.FileName = sfd.FileName;
_inputParameter.ProductList = productBindingSource.DataSource as List<product>;
progressBar.Minimum = 0;
progressBar.Value = 0;
backgroundWorker.RunWorkerAsync(_inputParameter);
}
}
}
}
}
UPDATE:
ジョンの答えは私のエラーを修正しましたが、データ・グリッドは、現在CSコードの代わりに、データベースによって移入されています。誰かが私が問題だと思うものを私に知らせることができれば、問題をより詳細に説明するビデオを作りました。
https://www.dropbox.com/s/1l5iw1j32a6oroj/C%23Excel.wmv?dl=0
こんにちはアレックスは、その他にも、この質問を見て、それが既に回答されていない場合がありますので、あなたの質問は(への接続アクセスDB)は元の投稿とは異なります。あなたのアクセスデータベースに接続する方法が複数あるので、私は少し時間をかけて答えを試してみます。これは、この接続が行われているところである 'Form1_Load'コードに焦点を当てるために別の質問を投稿することを検討するかもしれません。ご希望の場合は、チャットをセットアップすることができれば助かります。 – JohnG
こんにちはジョン、私たちはどのように進むのですか? – UserSN
しばらくお待ちください。可能であれば、私は試してみます。 – JohnG