将Excel数据从另一个显示到主应用程序类,并在Datagridview和组合框中显示

本文关键字:显示 Datagridview 并在 组合 应用程序 数据 Excel 另一个 | 更新日期: 2023-09-27 18:30:01

我得到了一个很大的.xls文件,其中包含许多列,包括城市名称、人口名称等。出于代码目的,我只从这个excell文件中提取城市名称和人口编号。我用一个方法制作了另一个类,该方法将修改.xls文件。现在在主Form1.cs中,我想首先在datagridview表中以两列的形式显示该值,如城市和人口,然后从datagridview中,我希望在组合框列表中显示城市名称。我为此写了一个代码。但它显示出了很多错误。

为了获得excel数据,我编写了以下代码

 public class Data
  {
    public string DataService(DataTable data)//showing error
    {
        var startPath = Application.StartupPath;
        string folderName = Path.Combine(startPath, "POI_List");
        System.IO.Directory.CreateDirectory(folderName);
        string SavedfileName = "POI_list.json";
        var Saving_path = Path.Combine(folderName, SavedfileName);
        string fileName = "Zensus_Gemeinden_org.xlsx";
        var path = Path.Combine(startPath, fileName);
        String name = "Gemeinden_31.12.2011_Vergleich";
        String constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
                       path + ";Extended Properties='Excel 12.0 XML;HDR=YES;';";
        OleDbConnection con = new OleDbConnection(constr);
        OleDbCommand oconn = new OleDbCommand("Select [3] as City,[4] as Population, * From [" + name + "$D7:E11300] Where [4] > 10000", con);
        con.Open();
        OleDbDataAdapter sda = new OleDbDataAdapter(oconn);
        //DataTable data = new DataTable();
        sda.Fill(data);
        string Place_Json = "Place_List:" + JsonConvert.SerializeObject(data, Formatting.Indented);
        File.WriteAllText(Saving_path, Place_Json);
        return data;//showing error
      }
   }
 }

现在,为了从datagrid视图和combobox中的main类中获得这个值,我编写了以下代码

 public partial class Form1 : Form
  {
    private readonly Data _DataService;// showing error
    public Form1()
    {
         _DataService=new Data();
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {

        dataGridView1.DataSource = //here I want to set data from DataService method);
        for (int i = 0; i < data.Rows.Count; i++)//showing error for 'for'
        {
            comboBox1.Items.Add(data.Rows[i]["City"]);
        }
     }
  }

将Excel数据从另一个显示到主应用程序类,并在Datagridview和组合框中显示

DataService方法签名是公共的字符串DataService(DataTable数据)。但是您试图返回DataTable

编辑:只需修改您的方法:

public DataTable DataService()
{
    var data = new DataTable();
    var startPath = Application.StartupPath;
    string folderName = Path.Combine(startPath, "POI_List");
    System.IO.Directory.CreateDirectory(folderName);
    string SavedfileName = "POI_list.json";
    var Saving_path = Path.Combine(folderName, SavedfileName);
    string fileName = "Zensus_Gemeinden_org.xlsx";
    var path = Path.Combine(startPath, fileName);
    String name = "Gemeinden_31.12.2011_Vergleich";
    String constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
                   path + ";Extended Properties='Excel 12.0 XML;HDR=YES;';";
    OleDbConnection con = new OleDbConnection(constr);
    OleDbCommand oconn = new OleDbCommand("Select [3] as City,[4] as Population, * From [" + name + "$D7:E11300] Where [4] > 10000", con);
    con.Open();
    OleDbDataAdapter sda = new OleDbDataAdapter(oconn);
    //DataTable data = new DataTable();
    sda.Fill(data);
    string Place_Json = "Place_List:" + JsonConvert.SerializeObject(data, Formatting.Indented);
    File.WriteAllText(Saving_path, Place_Json);
    return data;
  }

}

public partial class Form1 : Form

{私有只读数据_Data;

public Form1()
{
     _data = new Data();
    InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
    var dataTable = _data.DataService()
    dataGridView1.DataSource = dataTable ;
    for (int i = 0; i < dataTable.Rows.Count; i++)//showing error for 'for'
    {
        comboBox1.Items.Add(dataTable.Rows[i]["City"]);
    }
 }

}