这是我在dataGridView里添加新列,列带下拉列表,我现在在dataGridView1.Columns.Insert(0, dgvComboBox);
出问题了,INT不能写1.2.3等等,只能用0。是哪错了?列跑的前面去了。
private void Form1_Load(object sender, EventArgs e)
        {
            string strCom = "SELECT EMPID,CHINESENAME,POSITION_CODE,DATE_STARTED,DATE_LEFT,STATUS_CODE FROM HR_EMPLOYEE  a left outer join HR_DEPARTMENT b on a.DEPTID=b.DEPTNAME";
            string strCon = "SELECT DEPTNAME FROM HR_DEPARTMENT";
            OracleConnection conn = new OracleConnection("Data Source=orcl;User ID=todai;Password=todai");
            conn.Open();            DataGridViewComboBoxColumn dgvComboBox = new DataGridViewComboBoxColumn();
            dgvComboBox.DataPropertyName = "DEPTNAME";//
            dgvComboBox.HeaderText = "DEPTNAME";
            dgvComboBox.DataSource = GetTable(strCon).DefaultView;
            dgvComboBox.DisplayMember = "DEPTNAME";//
            dgvComboBox.ValueMember = "DEPTNAME";//            dataGridView1.Columns.Insert(0, dgvComboBox);
            dataGridView1.DataSource = GetTable(strCom).DefaultView;
        }
        private DataTable GetTable(string sql)
        {
            using (OracleConnection Oconn = new OracleConnection("Data Source=orcl;User ID=todai;Password=todai"))
            {
                DataTable dt = new DataTable();
                OracleDataAdapter Oda = new OracleDataAdapter(sql, Oconn);
                Oda.Fill(dt);
                return dt;
            }
        }

解决方案 »

  1.   

     a left outer join HR_DEPARTMENT b on a.DEPTID=b.DEPTNAME
    没用了。
      

  2.   

    不明白你的意思,
    我写了一个,你看看、  DataTable ta = new DataTable();
                DataColumn c = new DataColumn("A");
                ta.Columns.Add(c);
                for (int i = 0; i < 2; i++)
                {
                    DataRow r = ta.NewRow();
                    r[0] = i.ToString();
                    ta.Rows.Add(r);            }
                DataTable ta1 = new DataTable();
                DataColumn c1 = new DataColumn("AB");
                DataColumn c2 = new DataColumn("AB1");
                DataColumn c3 = new DataColumn("AB2");            ta1.Columns.Add(c1);
                ta1.Columns.Add(c2);
                ta1.Columns.Add(c3);
                for (int i = 0; i < 2; i++)
                {
                    DataRow r = ta1.NewRow();
                    r[0] = (i+500).ToString();
                    r[1] = (i+100).ToString();
                    r[2] = (i+200).ToString();                ta1.Rows.Add(r);            }
                DataGridViewComboBoxColumn dgvComboBox = new DataGridViewComboBoxColumn();
                dgvComboBox.DataPropertyName = "DEPTNAME";// 
                dgvComboBox.HeaderText = "DEPTNAME";
                dgvComboBox.DataSource = ta.DefaultView;
                dgvComboBox.DisplayMember = "A";// 
                dgvComboBox.ValueMember = "A";// 
                //dataGridView1.Columns.Clear();
                dataGridView1.Columns.Insert(0, dgvComboBox);
                dataGridView1.DataSource = ta1.DefaultView;
            
      

  3.   

    2楼,我就是想把dataGridView1.Columns.Insert(0, dgvComboBox); 改成dataGridView1.Columns.Insert(2, dgvComboBox); 
    但出现插入索引已超出范围。必须为非负值,并且必须小于或等于大小。参数名: index的错误。
    因为如果是0,就加到第一列去了,我想让他成为第三列。
    有没有办法,还是本来我就错了。
      

  4.   

    你的strCom写错了吧,没as,a.DEPTID=b.DEPTNAME?你这表是怎么设计的。我感觉应该是SELECT EMPID,CHINESENAME,POSITION_CODE,DATE_STARTED,DATE_LEFT,STATUS_CODE, HR_DEPARTMENT.DEPTNAME
    FROM HR_EMPLOYEE AS a left outer join HR_DEPARTMENT AS b on a.DEPTID=b.DEPTIDinsert不了,是不是因为你insert之前columns里是空的?不是的话,用add什么效果呢?
      

  5.   

    把datagridview的自动创建列设为false试试
      

  6.   

    awesomeo
    as貌似我加了就错了,ADD也不行,出3错。
    参数“1”: 无法从“int”转换为“string”
    参数“2”: 无法从“System.Windows.Forms.DataGridViewComboBoxColumn”转换为“string”
    与“System.Windows.Forms.DataGridViewColumnCollection.Add(string, string)”最匹配的重载方法具有一些无效参数
      

  7.   

    把datagridview的自动创建列设为false也不行,说出现插入索引已超出范围。貌似是4楼说的:insert之前columns里是空的,我不知道我理解的对吗?如果是空的,又怎么达到我要的目的呢?
      

  8.   

    我写错了,
    SELECT EMPID,CHINESENAME,POSITION_CODE,DATE_STARTED,DATE_LEFT,STATUS_CODE, b.DEPTNAME 
    FROM HR_EMPLOYEE AS a left outer join HR_DEPARTMENT AS b on a.DEPTID=b.DEPTID 
    dataGridView1.Columns.add(dgvComboBox)这样
      

  9.   

    啊,我才明白你啥意思。
    你直接在界面上编辑,添一个combo的列,调整你想要的列顺序,把DataPropertyName啥的都填上,然后在代码里把combo和grid的DataSource都赋上值就行了,绝对的。