本帖最后由 hengsf2009 于 2009-08-18 14:47:24 编辑

解决方案 »

  1.   

    插入列?
    dataGridView1.Rows[i].Cells[0].Value = table.Tables[0].Rows[0][i].ToString();这样你试试。看看好使不。
      

  2.   

    不太明白你的问题。你的DataGrid不可能只显示一列吧,也就是说,你的DataGrid如何组织显示数据的?
      

  3.   


    dataGridView1.Rows[i].Cells[2].Value = table.Tables[0].Rows[0][i].ToString();
    //固定第三列 
      

  4.   

                if (dataGridView1.Columns.Count == 0)
                    dataGridView1.Columns.Add("col1","列1");            int num = table.Tables[0].Rows.Count;
                for (int i = 0; i < num; i++)
                {
                    dataGridView1.Rows.Add(table.Tables[0].Rows[0][i].ToString());
                }
      

  5.   

    那你前面两列放什么内容?null吗?              if (dataGridView1.Columns.Count == 0)
                {
                    dataGridView1.Columns.Add("col1", "列1");
                    dataGridView1.Columns.Add("col2", "列2");
                    dataGridView1.Columns.Add("col3", "列3");
                }
                int num = table.Tables[0].Rows.Count;
                for (int i = 0; i < num; i++)
                {
                    dataGridView1.Rows.Add(null,null,table.Tables[0].Rows[0][i].ToString());
                }
      

  6.   


    这个是不错,可是为什么DataGrid在后面的列自动把table的内容都显示出来了???
      

  7.   

    int num = table.Tables[0].Rows.Count;
    这是取到table的行数,请问咋取到table的列数呢???哎,row既是行,又是列的意思,真郁闷!
      

  8.   


    是的是dateSet,他好像默认把我的table第一行作为数据字段了,但是我想取得就是第一行的内容我的目的是:把EXCEL的列名取出来做DataGrid的一行没想到这么郁闷。。
      

  9.   

    int num = table.Tables[0].Columns.Count
      

  10.   

    你早点表达清楚啊。            dataGridView1.DataSource = table.Tables[0];            if (table.Tables[0].Rows.Count > 1)
                {
                    MessageBox.Show(table.Tables[0].Rows.Count.ToString());
                    for (int i = 0;i<table.Tables[0].Columns.Count;i++)
                    {
                        table.Tables[0].Columns[i].ColumnName = table.Tables[0].Rows[0][i].ToString();
                        table.Tables[0].Columns[i].Caption = table.Tables[0].Rows[0][i].ToString();
                    }
                }
                table.Tables[0].Rows.RemoveAt(0);
      

  11.   

    table    把table先给想出来       老师   学生   校长
    姓名  小明    猪     狼
    性别   女     女     女
      

  12.   


    那么就把dataGridView1.Rows[i].Cells[2].Value = table.Tables[0].Rows[0][i].ToString();
    改一下就可以了。。不过你头俩列也要有数据才行。。要不然可能就不好使了。
      

  13.   


    谢谢大哥,但是还是取不到EXcel的列名,直接取得是第二行。。
      

  14.   

    我已经处理的列名了,你既然说第一行数据就是列名,我就将第一行数据赋值到了列名,然后删除了第一行数据。
    难道说你单独想提取第一行的列名数据吗?
    另外你的dataGridView1不要设置任何的手动添加的列,让列自动分配,这样我的设置才会有效。
      

  15.   

    我记得是DataGrid有自动取第一行做列名,不知道在哪里改呢??
      

  16.   


    哦,其实在DataGrid显示的时候,第一列也不是EXCEL的列名,而直接是数据
      

  17.   

    不行的,自动获取Column.ColumnName作为列名的
      

  18.   


    string strConn = string.Format("Provider=Microsoft.Jet.Oledb.4.0;Data Source='{0}';Extended Properties=Excel 8.0;", textBox1.Text);
                string sql = "select * from [Sheet1$]";
                OleDbDataAdapter adapter = new OleDbDataAdapter(sql, strConn);
                table = new DataSet();
                adapter.Fill(table);            if (table.Tables[0].Rows.Count > 1)
                {
                    for (int i = 0; i < table.Tables[0].Columns.Count; i++)
                    {
                        int p = i + 1;
                        table.Tables[0].Columns[i].ColumnName = table.Tables[0].Rows[0][i].ToString();
                        table.Tables[0].Columns[i].Caption = table.Tables[0].Rows[0][i].ToString();
                        dataGridView1.Rows.Add(null, "Column " + p, table.Tables[0].Rows[0][i].ToString());
                    }
                }
                table.Tables[0].Rows.RemoveAt(0);
    这是全部代码。。
      

  19.   

    关键是你的EXCEL内数据如何填写,第一行设置了列名了吗?第一列是有效的数据列吗?或者说你的EXCEL是没有列名的。EXCEL直接查询需要符合一定的格式才行,假如不是标准的表格格式,查询出来的结果有异常也不是不可能。
      

  20.   

    EXCEL第一行有列名的,而且如果DataGrid不设置Column,直接DataSource = table的话,那DataGrid的Column列名就是EXCEL的列名说直白点,就是DataGrid直接就取了EXCEL的列名作为自己的列名了。。
      

  21.   

    那不就好啦,既然那样不是没问题了吗?你第一行设置好了列名,进入DataSet就自动识别到了列名然后填充,其实是那个SQL语句需要有这样一个列名才能操作,这样会有什么问题吗?
      

  22.   

    string strConn = string.Format("Provider=Microsoft.Jet.Oledb.4.0;Data Source='{0}';Extended Properties=Excel 8.0;", textBox1.Text); 
                string sql = "select * from [Sheet1$]"; 
                OleDbDataAdapter adapter = new OleDbDataAdapter(sql, strConn); 
                table = new DataSet(); 
                adapter.Fill(table);             if (table.Tables[0].Rows.Count > 1) 
                { 
                    for (int i = 0; i < table.Tables[0].Columns.Count; i++) 
                    { 
                        int p = i + 1; 
                        table.Tables[0].Columns[i].ColumnName = table.Tables[0].Rows[0][i].ToString(); 
                        table.Tables[0].Columns[i].Caption = table.Tables[0].Rows[0][i].ToString(); 
                        dataGridView1.Rows.Add(null, "Column " + p, table.Tables[0].Rows[0][i].ToString()); 
                    } 
                } 
                table.Tables[0].Rows.RemoveAt(0); 
      

  23.   

    谢谢大家!辛苦啦!今天真的收获不少!最后解决不敢独享,Table有个属性ColumnName,直接可以取到其标题的!