none
datagridview导入excel数据问题,对应字段 RRS feed

  • 问题

  • 将Excel表导入到datagridview里
    条件是: excel表里的字段要和datagridview中的字段对应而导入,
    如:excel表里字段
        姓名    性别    年龄
    datagridview字段
      姓名      性别    年龄    地址
    怎么实现对应字段导入?
    2009年12月8日 3:39

答案

  • 你可以先把EXECL里面的数据查询出来放入一个datatable  dt 里面
    然后遍历
              for (int i = 0; i < dt.Rows.Count; i++)
                  {
                      DataGridViewRow dr = new DataGridViewRow();
                      dr.Cells[" 姓名"].Value = dt.Rows[i][" 姓名"].ToString();
                      dr.Cells[" 性别"].Value = dt.Rows[i]["性别"].ToString();
                       this.dataGridView1.Rows.Add(dr);
                  }
    努力+方法=成功
    • 已标记为答案 server126 2009年12月8日 4:10
    2009年12月8日 3:57
  • //Excel 表里字段:  姓名    性别    年龄 (dt1)
    //Datagridview 字段: 姓名  性别 年龄 地址 (dt2)
    
    DataTable dt1 = new DataTable();
    dt1.Columns.AddRange(new DataColumn[] { 
        new DataColumn("姓名", typeof(String)),
        new DataColumn("性别", typeof(String)),
        new DataColumn("年龄", typeof(String))
    });
    
    // 模拟 excel 中的数据
    dt1.Rows.Add(new object[] { "XXY", "男", "20" });
    dt1.Rows.Add(new object[] { "开心", "男", "20" });
    dt1.Rows.Add(new object[] { "Server 126", "男", "20" });
    
    // GridView 绑定的表结构及数据
    DataTable dt2 = new DataTable();
    
    dt1.Columns.AddRange(new DataColumn[] { 
        new DataColumn("姓名", typeof(String)),
        new DataColumn("性别", typeof(String)),
        new DataColumn("年龄", typeof(String)),
        new DataColumn("地址", typeof(String))
    });
    
    // 将 dt1 的数据加入到 dt2 中
    
    foreach (DataRow sourceRow in dt1.Rows)
    {
        DataRow importRow = dt2.NewRow();
    
        foreach (DataColumn c in dt2.Columns)
        {
            // 字段名一样且数据一样。
            if (dt1.Columns.Contains(c.ColumnName)
                && dt1.Columns[c.ColumnName].DataType == dt2.Columns[c.ColumnName].DataType)
                importRow[c.ColumnName] = sourceRow[c.ColumnName];
            else
                importRow[c.ColumnName] = DBNull.Value; // 不存在的字段设置为 NULL(前担字段允许为NULL) 或者默认值。
    
            dt2.Rows.Add(importRow);
        }
    }
    
    // 绑定 dataGridVIew

    知识改变命运,奋斗成就人生!
    • 已标记为答案 server126 2009年12月8日 4:10
    2009年12月8日 4:02
    版主
  • 你好!

    我写了一个完整的示例,示例所需要的 excel 在 debug 目录下。地址如下:http://blog.csdn.net/sabty/archive/2009/12/08/4964230.aspx

    知识改变命运,奋斗成就人生!
    2009年12月8日 6:36
    版主

全部回复

  • 谢谢二楼的回答,实现显示是字段对应
      希望别人能帮助我一下,在线等
    2009年12月8日 3:47
  • 你可以先把EXECL里面的数据查询出来放入一个datatable  dt 里面
    然后遍历
              for (int i = 0; i < dt.Rows.Count; i++)
                  {
                      DataGridViewRow dr = new DataGridViewRow();
                      dr.Cells[" 姓名"].Value = dt.Rows[i][" 姓名"].ToString();
                      dr.Cells[" 性别"].Value = dt.Rows[i]["性别"].ToString();
                       this.dataGridView1.Rows.Add(dr);
                  }
    努力+方法=成功
    • 已标记为答案 server126 2009年12月8日 4:10
    2009年12月8日 3:57
  • //Excel 表里字段:  姓名    性别    年龄 (dt1)
    //Datagridview 字段: 姓名  性别 年龄 地址 (dt2)
    
    DataTable dt1 = new DataTable();
    dt1.Columns.AddRange(new DataColumn[] { 
        new DataColumn("姓名", typeof(String)),
        new DataColumn("性别", typeof(String)),
        new DataColumn("年龄", typeof(String))
    });
    
    // 模拟 excel 中的数据
    dt1.Rows.Add(new object[] { "XXY", "男", "20" });
    dt1.Rows.Add(new object[] { "开心", "男", "20" });
    dt1.Rows.Add(new object[] { "Server 126", "男", "20" });
    
    // GridView 绑定的表结构及数据
    DataTable dt2 = new DataTable();
    
    dt1.Columns.AddRange(new DataColumn[] { 
        new DataColumn("姓名", typeof(String)),
        new DataColumn("性别", typeof(String)),
        new DataColumn("年龄", typeof(String)),
        new DataColumn("地址", typeof(String))
    });
    
    // 将 dt1 的数据加入到 dt2 中
    
    foreach (DataRow sourceRow in dt1.Rows)
    {
        DataRow importRow = dt2.NewRow();
    
        foreach (DataColumn c in dt2.Columns)
        {
            // 字段名一样且数据一样。
            if (dt1.Columns.Contains(c.ColumnName)
                && dt1.Columns[c.ColumnName].DataType == dt2.Columns[c.ColumnName].DataType)
                importRow[c.ColumnName] = sourceRow[c.ColumnName];
            else
                importRow[c.ColumnName] = DBNull.Value; // 不存在的字段设置为 NULL(前担字段允许为NULL) 或者默认值。
    
            dt2.Rows.Add(importRow);
        }
    }
    
    // 绑定 dataGridVIew

    知识改变命运,奋斗成就人生!
    • 已标记为答案 server126 2009年12月8日 4:10
    2009年12月8日 4:02
    版主
  • Thanks you   XXY and 开心

      Thank you very much
    2009年12月8日 4:10
  • 不用客气啊~
    知识改变命运,奋斗成就人生!
    2009年12月8日 4:21
    版主
  • 不用客气啊~
    知识改变命运,奋斗成就人生!

    班主  我测试了没有成功呀~!
                 您能否给一个完整的代码参考一下
    谢谢,在线等、、、、
    2009年12月8日 5:15
  • 班主是否还在?在线等您
    谢谢
    2009年12月8日 5:35
  • 你遇到了什么样的问题?
    知识改变命运,奋斗成就人生!
    2009年12月8日 5:36
    版主
  • X.Y的地方有些错误。我改了,你再试试
       //Excel 表里字段:  姓名    性别    年龄 (dt1)
                //Datagridview 字段: 姓名  性别 年龄 地址 (dt2)

                DataTable dt1 = new DataTable();
                dt1.Columns.AddRange(new DataColumn[] {
        new DataColumn("姓名", typeof(String)),
        new DataColumn("性别", typeof(String)),
        new DataColumn("年龄", typeof(String))
    });

                // 模拟 excel 中的数据
                dt1.Rows.Add(new object[] { "XXY", "男", "20" });
                dt1.Rows.Add(new object[] { "开心", "男", "20" });
                dt1.Rows.Add(new object[] { "Server 126", "男", "20" });

                // GridView 绑定的表结构及数据
                DataTable dt2 = new DataTable();

                dt2.Columns.AddRange(new DataColumn[] {
        new DataColumn("姓名", typeof(String)),
        new DataColumn("性别", typeof(String)),
        new DataColumn("年龄", typeof(String)),
        new DataColumn("地址", typeof(String))
        });
              

                // 将 dt1 的数据加入到 dt2 中

                foreach (DataRow sourceRow in dt1.Rows)
                {
                    DataRow importRow = dt2.NewRow();

                    foreach (DataColumn c in dt2.Columns)
                    {
                        // 字段名一样且数据一样。
                        if (dt1.Columns.Contains(c.ColumnName)
                            && dt1.Columns[c.ColumnName].DataType == dt2.Columns[c.ColumnName].DataType)
                        {
                          
                            importRow[c.ColumnName] = sourceRow[c.ColumnName];
                        }
                        else
                            importRow[c.ColumnName] = DBNull.Value; // 不存在的字段设置为 NULL(前担字段允许为NULL) 或者默认值。

                     
                    }
                    dt2.Rows.Add(importRow);
                }


    努力+方法=成功
    2009年12月8日 5:41
  • 班主  您可能没有明白我的意思
                  
             Excel表内容
      
                    姓名        省份       电话      地址
                    11           aaa       11         11
                    22          bbb       22          22
                 
           GridView控件已经定义好了列
        
                   ID         姓名           省份         电话       地址        邮编
    字段不一样(Excel 和  GridView)
     
                  我想把Excel表里内容导入到GridView里,字段对应导入,你写的代码不能实现此工能,
    班主   再次请教您
    麻烦您了
    谢谢
    2009年12月8日 5:44
  • 谢谢您们我再试一下呀
    2009年12月8日 6:00
  • 班主  您可能没有明白我的意思
                  
             Excel表内容
      
                    姓名        省份       电话      地址
                    11           aaa       11         11
                    22          bbb       22          22
                 
           GridView控件已经定义好了列
        
                   ID         姓名           省份         电话       地址        邮编
    字段不一样(Excel 和  GridView)
     
                  我想把Excel表里内容导入到GridView里,字段对应导入,你写的代码不能实现此工能,
    班主   再次请教您
    麻烦您了
    谢谢

    我就想实现这样的功能
      呵呵,您们两个回答的都不能实现呀,再次谢谢您们两,继续在线等(帮我解决)
    2009年12月8日 6:03
  • 班主  您可能没有明白我的意思
                  
             Excel表内容
      
                    姓名        省份       电话      地址
                    11           aaa       11         11
                    22          bbb       22          22
                 
           GridView控件已经定义好了列
        
                   ID         姓名           省份         电话       地址        邮编
    字段不一样(Excel 和  GridView)
     
                  我想把Excel表里内容导入到GridView里,字段对应导入,你写的代码不能实现此工能,
    班主   再次请教您
    麻烦您了
    谢谢

    我就想实现这样的功能
      呵呵,您们两个回答的都不能实现呀,再次谢谢您们两,继续在线等(帮我解决)
    忘记说了 是WinForm编程中不是web开发
    2009年12月8日 6:10
  •            DataTable dt1 //查询EXECL的结果
                   
              for (int i = 0; i < dt1.Rows.Count; i++)
                {
                  
                 int index = this.dataGridView1.Rows.Add();

                this.dataGridView1.Rows[index].Cells[" 电话 "].Value = dt1.Rows[i]["姓名 "].ToString();
                this.dataGridView1.Rows[index].Cells[" 电话 "].Value =dt1.Rows[i]["省份"].ToString();
                this.dataGridView1.Rows[index].Cells[" 电话 "].Value = dt1.Rows[i][" 电话 "].ToString();               
                }


    努力+方法=成功
    2009年12月8日 6:18
  • 谢谢您们的回答  我换一种办法试一下
    谢谢您们  xxy   开心
    2009年12月8日 6:22
  • 你好!

    我写了一个完整的示例,示例所需要的 excel 在 debug 目录下。地址如下:http://blog.csdn.net/sabty/archive/2009/12/08/4964230.aspx

    知识改变命运,奋斗成就人生!
    2009年12月8日 6:36
    版主
  • 谢谢指正!
    知识改变命运,奋斗成就人生!
    2009年12月8日 6:36
    版主
  • 你好!

    我写了一个完整的示例,示例所需要的 excel 在 debug 目录下。地址如下:http://blog.csdn.net/sabty/archive/2009/12/08/4964230.aspx

    知识改变命运,奋斗成就人生!

    太感谢了
    2009年12月8日 7:12