2017-06-10 1 views
1

Je dois ajouter « Select » à l'index 0 sans savoir colonnes DataTable compte ou le nom parce que cette méthode DataAccessLayer et utilisera later`C#: Ajouter « Sélectionner » élément à dynamique Remplir la méthode ComboBox

// ComboBox Fill Method 
public static void ComboBoxFill(ComboBox cbo, string Query, string cboDisplayMember, string cboValueMember) 
      { 
       con.Open(); 
       SqlCommand cmd = new SqlCommand(Query, con); 
       SqlDataReader dr = cmd.ExecuteReader(); 
       DataTable dt = new DataTable(); 
       dt.Load(dr); 
       cbo.DataSource = dt; 
       cbo.DisplayMember = cboDisplayMember; 
       cbo.ValueMember = cboValueMember; 
       cbo.SelectedIndex = 0; 
       con.Close(); 
      } 
+0

DataTable DT1 = (DataTable) cbo.DataSource; int columns = dt.Columns.Count; int rows = dt.Rows.Count; – jdweng

+0

Comment puis-je utiliser les colonnes int et les lignes après l'avoir déclaré? –

+0

Votre affichage est un peu flou. Vous ne savez pas si vous avez demandé comment sélectionner la zone de liste déroulante ou comment mettre à jour/insérer des données. Donc, je supposais que vous vouliez changer les données. La manière correcte de modifier les données consiste à modifier le DataTable. Vous avez également dit que vous ne connaissiez pas les colonnes ou le nombre donc j'ai obtenu les colonnes et le compte de cbo. – jdweng

Répondre

0

Juste mettez cette ligne dans votre fonction ComboBoxFill().

public static void ComboBoxFill(ComboBox cbo, string Query, string cboDisplayMember, string cboValueMember) 
      { 
       con.Open(); 
       SqlCommand cmd = new SqlCommand(Query, con); 
       SqlDataReader dr = cmd.ExecuteReader(); 
       DataTable dt = new DataTable(); 
       dt.Load(dr); 
       cbo.DataSource = dt; 

       DataRow newRow = dt.NewRow(); 
       newRow[0] = "Select"; 
       dt.Rows.InsertAt(newRow, 0); 

       cbo.DisplayMember = cboDisplayMember; 
       cbo.ValueMember = cboValueMember; 
       cbo.SelectedIndex = 0; 
       con.Close(); 
      } 

Il ajoutera "Select" à postion 0

+0

Erreur: Informations supplémentaires: La collection d'éléments ne peut pas être modifiée lorsque la propriété DataSource est définie –

+0

Afficher l'erreur car le nom de la colonne inconnue et les colonnes comptent. Mais il a été résolu par For –

+0

Merci, Il a été résolu et j'ai ajouté la solution –

1

J'ai résolu ce problème par le code suivant. Merci pour tous ...

 public static void ComboBoxFill(ComboBox cbo, string Query, string cboDisplayMember, string cboValueMember) 
    { 
     con.Open(); 
     SqlCommand cmd = new SqlCommand(Query, con); 
     SqlDataReader dr = cmd.ExecuteReader(); 
     DataTable dt = new DataTable(); 
     dt.Load(dr); 
     DataRow drow = dt.NewRow(); 
     for (int i = 0; i < dt.Columns.Count ; i++) 
     { 
      if (dt.Columns[i].ColumnName == cboDisplayMember) 
      { 
       drow[i] = "Select"; 
      } 
      else if (dt.Columns[i].ColumnName == cboValueMember) 
      { 
       drow[i] = 0; 
      } 
      else 
      { 
       drow[i] = null; 
      } 
     } 

     dt.Rows.InsertAt(drow, 0); 

     cbo.DataSource = dt; 
     cbo.DisplayMember = cboDisplayMember; 
     cbo.ValueMember = cboValueMember; 
     cbo.SelectedIndex = 0; 
     con.Close(); 
    }