2016-04-13 16 views
0

Ich versuche, ein Kombinationsfeld zu der Datagrid-Ansicht hinzuzufügen. Dies ist der Code für die Datagrid AnsichtHinzufügen eines Kombinationsfelds zu einem Datenraster Ansicht

  SqlDataAdapter da = new SqlDataAdapter("SELECT pid, pdtName, amount, Qty,day, cat from purchase where [email protected] and [email protected]", ConnectionInfo.con); 
      da.SelectCommand.Parameters.AddWithValue("@year", comboBox3.Text); 
      da.SelectCommand.Parameters.AddWithValue("@month", comboBox2.Text); 



      DataTable dt = new DataTable(); 

      da.Fill(dt); 
      dataGridView1.DataSource = dt; 
      this.dataGridView1.Columns[0].HeaderText = "number"; 
      this.dataGridView1.Columns[0].ReadOnly = true; 
      this.dataGridView1.Columns[0].Visible = false; 
      this.dataGridView1.Columns[1].HeaderText = "name"; 
      this.dataGridView1.Columns[2].HeaderText = "amount"; 
      this.dataGridView1.Columns[3].HeaderText = "number"; 
      this.dataGridView1.Columns[4].HeaderText = "day"; 
      this.dataGridView1.Columns[5].HeaderText = "category"; 

für Spalte 5 in der Datagrid Ansicht Ich versuche, es als ein Kombinationsfeld zu setzen und die Kategorienamen aus der Kategorie Tabelle in meiner Datenbank lesen.

ich mit diesem Code fange an, aber ich weiß nicht, wie es zu vollenden

 string query = "select distinct cat from purchase "; 
      SqlDataAdapter da2 = new SqlDataAdapter(query, ConnectionInfo.con); 

      DataSet ds2 = new DataSet(); 
      da2.Fill(ds2, "purchase"); 

     DataGridViewComboBoxColumn cmb = new DataGridViewComboBoxColumn(); 
     cmb.HeaderText = "cat"; 
     cmb.Name = "cmb"; 
     cmb.DataSource=ds2 

Können Sie was falsch in meinem Code hinweisen, oder mir helfen, in einer anderen Art und Weise mein Problem zu lösen

+0

Möglicherweise dies: http://stackoverflow.com/questions/12747256/datagridview-set-column-cell-combobox –

Antwort

1

Sie müssen jede Spalte mit einer DataGridViewTextBoxColumn oder DataGridViewComboBoxColumn formatieren und sie der DataGridView hinzufügen. Stellen Sie sicher, dass AutoGenerateColumns auf false festgelegt ist. Etwas wie:

dataGridView1.Columns.Clear(); 
    dataGridView1.AutoGenerateColumns = false; 

    DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn(); 
    column.DataPropertyName = "Description"; 
    column.Name = "Description"; 
    column.HeaderText = "Description"; 
    column.Width = 150; 
    //column.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; 
    dataGridView1.Columns.Add(column) 

    DataGridViewComboBoxColumn ccolumn = new DataGridViewComboBoxColumn(); 
    ccolumn.DataPropertyName = "cmb"; 
    ccolumn.Name = "cmb"; 
    ccolumn.HeaderText = "Cat"; 
    ccolumn.Width = 65; 
    ccolumn.DataSource = ds2; 
    ccolumn.DisplayMember = "cat"; 
    ccolumn.ValueMember = "cat"; 
    dataGridView1.Columns.Add(ccolumn); 

Machen Sie alle Spalten so, bevor Sie die DataSource der DataGridView zuweisen.

+0

Ich habe versucht, dass aber alles, was ich bekomme, ist ein leeres Datagrid Sollte ich meinen Datenquellcode ändern, ich habe nichts geändert, weil ich keine Probleme davor hatte – zozi

+0

Sie müssen einen neuen Spalteneintrag für jede Spalte erstellen, die Sie anzeigen möchten. Tun Sie dies, bevor Sie die Datenquelle des Datagridview festlegen. Der DataPropertyName muss mit einem Spaltennamen in der DataTable übereinstimmen. Wenn das immer noch nicht funktioniert, poste die aktuelle Version deines Codes und ich werde es mir anschauen. –

+0

Es funktioniert jetzt. Vielen Dank – zozi

Verwandte Themen