2010-10-08 6 views
1

Je suis nouveau à ce sujet. J'essaie de remplir un DataGrid à partir d'une source de table. Mon code tente de faire deux choses. D'abord, il remplit un DataGrid avec des colonnes d'une table. Ensuite, il ajoute une colonne appelée "SELECT" à la fin de la grille. Cette sélection est CheckBox. Cependant, lorsque j'exécute ce code, il ajoute deux fois la colonne "SELECT". Je veux le voir une fois. Qu'est-ce que je fais de mal?Datagrid Question de liaison

private void BankFlow_Load(object sender, EventArgs e) 
{ 
    initMethod(); 
    dataTable = getBankFlowData(globalConnection); 
    dataGridView1.DataSource = dataTable; 
} 

private static DataTable getBankFlowData(OracleConnection oc) 
{ 
    DataTable dt = new System.Data.DataTable(); 
    try 
    { 

     OracleCommand od = oc.CreateCommand(); 
     od.CommandText = "SELECT * FROM BANK_FLOW_SOURCE"; 
     od.CommandType = System.Data.CommandType.Text; 
     OracleDataAdapter adapter = new OracleDataAdapter(od); 
     adapter.Fill(dt); 

    } 
    catch (Exception) 
    { 

    } 
    return dt; 
} 

private static void initMethod() 
{ 
    targetSystem = ConfigurationManager.ConnectionStrings["prototype"].ConnectionString.ToString(); 
    Console.WriteLine("Target : {0}", targetSystem); 
    sourceSystem = ConfigurationManager.ConnectionStrings["qlprod8"].ConnectionString.ToString(); 
    Console.WriteLine("Source : {0}", sourceSystem); 

    globalConnection.ConnectionString = sourceSystem; 
    globalConnection.Open(); 
} 

private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
{ 
    DataGridViewCheckBoxColumn col = new DataGridViewCheckBoxColumn(); 
    col.HeaderText = "SELECT"; 
    col.ReadOnly = false; 
    col.DefaultCellStyle.BackColor = Color.Beige; 
    dataGridView1.Columns.Add(col); 
} 

Répondre

4

Votre problème est que l'événement arrive databindingcomplete plus vous pensez. En fait, à chaque fois que des données changent, elles se déclenchent.

Vous devez ajouter la colonne en dehors de l'événement databindingcomplete.

EDIT

En fait, puisque vous Databinding, vous voudrez peut-être envisager d'ajouter la colonne à votre table de données. Vous le feriez avant de lier la datatable à la grille. Pour l'essentiel, créez simplement une colonne de données nommée select, qui a le type de booléen, puis ajoutez la colonne de données au datatable.

+0

Merci Tony! Quel événement recommandez-vous? – abhi

+0

En fait, j'ai ajouté un edit. Vous devriez vraiment penser à ajouter une colonne au datatable juste avant de le lier à la grille. –