DataTable table = new DataTable();
            table = db.selectTable(DBName, TableName);
            for (int a = 0; a < table.Columns.Count; a++)
            {
                dataGridView1.Columns[a].DataPropertyName = table.Columns[a].ColumnName.ToString();
                dataGridView1.Columns[a].HeaderText = table.Columns[a].ColumnName.ToString();
                dataGridView1.Columns[a].Visible = true;
            }
           dataGridView1.DataSource = table.DefaultView;
数据库中列名是中文。
在绑定数据后,dataGridView1中不显示数据,但是设置短点监视发现后数据,不知为何,求解答~

解决方案 »

  1.   

    dataGridView1.AutoGenerateColumns = true;
    dataGridView1.DataSource = table;
      

  2.   

    datagridview会自动根据DataTable中的column创建column,无需手动自己创建
      

  3.   

    我试过了,但是依然无法显示,断点监视dataGridView1.Rows.Count有11条数据
      

  4.   

    da.Fill(ds, "a");              //用DataTable ,就不用DataMember
    dataGridView1.AutoGenerateColumns = true;
    dataGridView1.DataSource = ds;
    dataGridView1.DataMember = "a";
      

  5.   

    回复楼上,我本来是用的就是dataTable,只不过没有对TableName赋值而已,至于您说的方法我在之前也是用过了,结果依然杯具~~~为何啊~~~??????
      

  6.   

    一个不小心,引用错了回复楼上,我本来是用的就是dataTable,只不过没有对TableName赋值而已,至于您说的方法我在之前也是用过了,结果依然杯具~~~为何啊~~~??????
      

  7.   

    DataTable table = new DataTable();
      table = db.selectTable(DBName, TableName);
      for (int a = 0; a < table.Columns.Count; a++)
      {
      dataGridView1.Columns[a].DataPropertyName = table.Columns[a].ColumnName.ToString();
      dataGridView1.Columns[a].HeaderText = table.Columns[a].ColumnName.ToString();
      dataGridView1.Columns[a].Visible = true;
      }
      dataGridView1.DataSource = table.DefaultView;
      dataGridView1.DataBind();
    试试看。。
      

  8.   

    回复楼上,谢谢您的解答,但是我用的是WinFrom不是WebFrom,没有DataBind()方法
      

  9.   

    你的DATAGRIDVIEW上的列是手动加好的,还是要动态加的?
      

  10.   

    动态的,因为我的数据源是读取的Excel,内容不确定
      

  11.   

    DataTable table = new DataTable();
      table = db.selectTable(DBName, TableName);
    dataGridView1.AutoGenerateColumns = false;
      for (int a = 0; a < table.Columns.Count; a++)
      {
    dataGridView1.Columns.Add(table.Columns[a].ColumnName.ToString(), table.Columns[a].ColumnName.ToString());
      dataGridView1.Columns[a].DataPropertyName = table.Columns[a].ColumnName.ToString();
      dataGridView1.Columns[a].HeaderText = table.Columns[a].ColumnName.ToString();
      dataGridView1.Columns[a].Visible = true;
      }
      dataGridView1.DataSource = table.DefaultView;
      

  12.   

    还是不行啊!断点监视dataGridView1有数据,但是前台不显示!!!!!!我用的是VS2010,不会是版本有问题吧~~~~!
      

  13.   

    如果你没有在DATAGRIDVIEW中手动的加上列(不是说你手动指定列标题,数据源,只是在编辑列中新增了几列),这下面的语句会报错的;
    for (int a = 0; a < table.Columns.Count; a++)
      {
      dataGridView1.Columns[a].DataPropertyName = table.Columns[a].ColumnName.ToString();
      dataGridView1.Columns[a].HeaderText = table.Columns[a].ColumnName.ToString();
      dataGridView1.Columns[a].Visible = true;
      }
      

  14.   

    加个刷新页面的功能 IsPostback()
    {里面写show()函数}
    下面定义个show()函数就可以了!
      

  15.   

    我没有在DATAGRIDVIEW中指定任何列,也无法指定,因为我无法确定数据源的内容
      

  16.   


    show什么呢??能不能说详细点呢??麻烦了!我有怀疑的DataGridView没有刷新的问题,但是WinFrom中不是不需要刷新吗!
      

  17.   

    你说DATAGRIDVIEW里有数据,你的断点打在哪里的?你是怎么测试到的?你试一下看你的FOR语句有没有执行
      

  18.   

    断点设在for循环开始和dataGridView1.DataSource = table.DefaultView上
    循环都完成了,我监视dataGridView1.Rows[1].Cell[1].Value中是有数据的
      

  19.   

    我有在For循环外围加上TryCatch块,运行下来没有触发任何异常
      

  20.   

    那个for循环可以去掉,直接绑定.
    只要table里面有数据,就一定会显示的.
      

  21.   

    不要那段FOR语句会不会显示?
      

  22.   

    不会啊
    我之前也没有加For的
      

  23.   

    把你现在的DATAGRIDVIEW删了,重新拉一个进去
      

  24.   

    dataGridView1.DataSource = table
      

  25.   

    DataTable table = new DataTable();
      table = db.selectTable(DBName, TableName);
      dataGridView1.DataSource = table.DefaultView;
    不设置列头,直接绑定数据源。。
      

  26.   


      DataTable table = new DataTable();
      table = db.selectTable(DBName, TableName);
      if(table.Columns.Count>0)
      {
          dataGridView1.DataSource = table;
           dataGridView1.AutoGenerateColumns = true;
      dataGridView1.Columns[a].DataPropertyName = "ColumnName";//这个你应该知道是什么字段名称啊 直接填字段名称就好了吧!
      dataGridView1.Columns[a].HeaderText = "ColumnName";
      dataGridView1.Columns[a].Visible = true;
      }
      

  27.   

    这问题太深奥了;在DATAGRIDVIEW里没有手动增加列,代码里也没有datagridview1.columns.add(xx)去动态增加列;下面的dataGridView1.Columns[a].DataPropertyName也不报索引超出集合大小的错;你的程序是有点与众不同;(在我们的程序里没有手动增加列或动态加列,下面代码是会报错的)
    for (int a = 0; a < table.Columns.Count; a++)
      {
      dataGridView1.Columns[a].DataPropertyName = table.Columns[a].ColumnName.ToString();
      dataGridView1.Columns[a].HeaderText = table.Columns[a].ColumnName.ToString();
      dataGridView1.Columns[a].Visible = true;
      }
      

  28.   

    后面加 dataGridView1.DataBind();
      

  29.   

    dataGridView1.AutoGenerateColumns = false;
      

  30.   

    试验过了,绑定列名后dataSour依然无效
      

  31.   

    额再次重申,WinFrom,不是WebFrom!!!!米有DataBind方法
      

  32.   

    首先检查下你IDE属性页面是否设置了Datasource属性,我想这是不应该有的错误。。接下来就说你的代码了,逐行绑定不是这么实现的。。
    首先应该初始化列的数目:for (int m = 0; m < dataSet.Tables[0].Columns.Count; m++)   
    {   
        myDataGridView.Columns.Add(dataSet.Tables[0].Columns[m].ToString(),    
            dataSet.Tables[0].Columns[m].ToString());   
    } 接下来是绑定下面的值了:foreach (DataRow dataRow in dataSet.Tables[0].Rows)   
    {   
        myDataGridView.Rows.Add(); //DataGridView在录入数据之前,需要首先增加自己的行的数量   
        int i = myDataGridView.Rows.Count; //获取DataGridView当前行数   
        object[] itemArray = dataRow.ItemArray; //获取dataRow的所有的单元格里的数据Array   
       //将dataRow的单元格数组数据一一填充到DataGridViewRow的Cell中   
        for (int j = 0; j < itemArray.Length; j++)   
        {   
            myDataGridView.Rows[i - 1].Cells[j].Value = itemArray[j].ToString();   
        }   
    }  如果我们需要多次刷新并显示该DataGridViewmyDataGridView.Rows.Clear();   
    myDataGridView.Columns.Clear();   
    myDataGridView.Refresh(); 
      

  33.   

    var list = new List<DataCon>
                               {
                                   new DataCon {Name = "dataA", Description = "DesA"},
                                   new DataCon {Name = "dataB", Description = "DesB"}
                               };            var dataTable = new DataTable();
                dataTable.Columns.Add(new DataColumn("Name"));
                dataTable.Columns.Add(new DataColumn("Description"));            var row1 = dataTable.NewRow();
                row1["Name"] = "dataA";
                row1["Description"] = "DesA";            var row2 = dataTable.NewRow();
                row2["Name"] = "dataB";
                row2["Description"] = "DesB";
                dataTable.Rows.Add(row1);
                dataTable.Rows.Add(row2);            dataGridView1.DataSource = dataTable;
                dataGridView1.AutoGenerateColumns = false;
    internal  class DataCon
        {
            public string Name { get; set; }
            public string Description { get; set; }
        }
    简单绑定了一下 绑定 list 绑定 table 都能显示 测试过了  lz 弄个简单的 试试  一点点发现问题
      

  34.   

    dataGridView1.Columns.Add("a", "a");
                dataGridView1.Rows[0].Cells[0].Value = "1";
    我这样做,前台依然不显示数据
      

  35.   

    我知道没有报错,因为不会报错,这种情况我也遇到过,要不你就直接设置datasource=table,如果逐行绑定必须先设置列数。。
      

  36.   

    如果不涉及什么机密的话,可以把你的程序发我邮箱里[email protected] ,请放心我的人品。。
      

  37.   

    如果不涉及什么机密的话,可以把你的程序发我邮箱里[email protected] ,请放心我的人品。。
      

  38.   

    或者你直接剥离出一个Demo出来也行。。
      

  39.   

    呵呵,可惜还没收到,我qq邮箱也发个吧,[email protected]
      

  40.   

    这样 你在datagridview 列里面加一个 SQL语句中没有的字段绑定 看报错不,如果报错表示绑定正确,不报错 表示根本没有绑定!
      

  41.   

    是在属性里面添加一列之后,在到后台代码里面去DataSour,然后看是否报错是嘛?
      

  42.   


    给datagridview 加一个列 叫 名字叫 “测试”测试 设置 datapropertyname 为“123”
      

  43.   


    ===
    后台代码不变。。只是手动添加一个 SQL语句中没有的 字段 列
      

  44.   

    LZ,可以试下下面的代码,我在08下编译通过了。希望能给你一点帮助。       
    DataTable dtTmp = new DataTable();
                DataRow drTmp = dtTmp.NewRow();
                DataColumn dcTmp = new DataColumn("id", typeof(string));
                dtTmp.Columns.Add(dcTmp);
                dcTmp = new DataColumn("name", typeof(string));
                dtTmp.Columns.Add(dcTmp);
                dcTmp = new DataColumn("age", typeof(string));
                dtTmp.Columns.Add(dcTmp);
                dcTmp = new DataColumn("gender", typeof(string));
                dtTmp.Columns.Add(dcTmp);            for (int i = 0; i < 10; i++)
                {
                    drTmp = dtTmp.NewRow();
                    dtTmp.Rows.Add(drTmp);
                    dtTmp.Rows[i]["id"] = i.ToString();
                    dtTmp.Rows[i]["name"] = "a" + i.ToString();
                    dtTmp.Rows[i]["age"] = i.ToString();
                    dtTmp.Rows[i]["gender"] = i % 2 == 0 ? "男" : "女";
                }
                for (int a = 0; a < dtTmp.Columns.Count; a++)
                {
                    this.dataGridView1.Columns.Add(dtTmp.Columns[a].ColumnName.ToString(),dtTmp.Columns[a].ColumnName.ToString());
                    //dataGridView1.Columns[a].DataPropertyName = ;
                    //dataGridView1.Columns[a].HeaderText = ;
                    dataGridView1.Columns[a].Visible = true;
                }            
                dataGridView1.DataSource = dtTmp.DefaultView;
      

  45.   

    楼主不在吗,我加你qq了,好多话不方便多讲,不然楼上一堆高手要K你至死
      

  46.   

    昨天有事情,一直没上网,K我至死,O MY GAD,不需要吧
      

  47.   

    我也遇到类似问题了,不同的是我是直接dataGridView1.DataSource = ds.Tables["table1"];这么使用的。我的程序出错的原因是由于在绑定之后我对ds进行了clear操作,即ds.Clear();注释掉这句以后程序就能够显示数据了。不知道我的错误能够给楼主一点点提示。
      

  48.   

    是怎么解决的呀?~ 我也遇到这个问题,连最简单的绑定个List<>也不能显示,是哪里设置不对吗?!
      

  49.   

    刚问了就找到问题了,我是绑定的List<T>,T是自定义的一个类,我犯的错误很低级,把T中的字段列定义为了public的字段,——“要确保T中的字段列的定义为属性不能为实体定义,所谓属性就是set;get; 如果是实体也会导致数据绑定无法正常显示。”定义成属性就对了!
      

  50.   

    我来揭秘,可能是一个很小的错误,楼主和大家都没注意到。dataGridView1.DataSource 必须绑定DataTable楼主可能绑定的是DataSet.绑定DataSet是不行的必须指定 DataSet.Tables[0] 或者直接绑DataTable 这是粗心的错误.
      

  51.   

    楼主肯定是之前制定了列集合,把columns属性里面的自己定义的列全部删掉就可以了
      

  52.   

    我也遇到这种问题了,楼上各位所说的办法我都用过了,而且很相似的界面,一个可以显示,另一个绑定数据后就无法显示,但是单击datagridview还是可以选择到其中的数据的行的内容的,求大神解释…………
      

  53.   

    dgv.DataSource = ds;
    dgv.DataMember = ds.Tables[0].TableName;
    dgv.AutoGenerateColumns=true;
      

  54.   

    dgv.DataSource = ds;
    dgv.DataMember = ds.Tables[0].TableName;
    dgv.AutoGenerateColumns=true;