web-dev-qa-db-fra.com

comment lier datable à datagridview en c #

J'ai besoin de lier mon DataTable à mon DataGridView . je fais ça:

        DTable = new DataTable();
        SBind = new BindingSource();
        //ServersTable - DataGridView
        for (int i = 0; i < ServersTable.ColumnCount; ++i)
        {
            DTable.Columns.Add(new DataColumn(ServersTable.Columns[i].Name));
        }

        for (int i = 0; i < Apps.Count; ++i)
        {
            DataRow r = DTable.NewRow();
            r.BeginEdit();
            foreach (DataColumn c in DTable.Columns)
            {
                r[c.ColumnName] = //writing values
            }
            r.EndEdit();
            DTable.Rows.Add(r);
        }
        SBind.DataSource = DTable;
        ServersTable.DataSource = SBind;

Mais tout ce que j'ai obtenu est DataTable ADDS NEW colonnes à mon DataGridView . Je n'ai pas besoin de ça, j'ai juste besoin d'écrire sous des colonnes existantes. S'il vous plaît, aidez-moi, les gars!

17
Greag.Deay

Essaye ça:

    ServersTable.Columns.Clear();
    ServersTable.DataSource = SBind;

Si vous ne voulez pas effacer toutes les colonnes existantes, vous devez définir DataPropertyName pour chaque colonne existante comme ceci:

for (int i = 0; i < ServersTable.ColumnCount; ++i) {
  DTable.Columns.Add(new DataColumn(ServersTable.Columns[i].Name));
  ServersTable.Columns[i].DataPropertyName = ServersTable.Columns[i].Name;
}
19
King King

Encore mieux: 

DataTable DTable = new DataTable();
BindingSource SBind = new BindingSource();
SBind.DataSource = DTable;
DataGridView ServersTable = new DataGridView();

ServersTable.AutoGenerateColumns = false;
ServersTable.DataSource = DTable;

ServersTable.DataSource = SBind;
ServersTable.Refresh();

Vous indiquez à la source pouvant être liée qu'elle est liée au DataTable. À son tour, vous devez indiquer à votre DataGridView de ne pas générer automatiquement de colonnes, de sorte qu'il extraira uniquement les données des colonnes que vous avez entrées manuellement dans le contrôle. .. enfin actualiser le contrôle pour mettre à jour le databind. 

10
user817530

Sur le DataGridView, définissez le DataPropertyName des colonnes à vos noms de colonne de votre DataTable.

3
Marc K

// J'ai d'abord construit mon datatable, puis rempli les colonnes, les lignes et tout . // Ensuite, une fois que le datatable est fonctionnel, procédez comme suit pour le lier au DGV. REMARQUE: la propriété AutoGenerateColumns du fichier DGV doit être "true" pour cet exemple, sinon l'attribution de noms de colonnes de datatable à dgv ne fonctionnera pas. J'ai aussi "ajouté" mes données à un jeu de données auparavant, mais je ne pense pas que ce soit nécessaire.

 BindingSource SBind = new BindingSource();
 SBind.DataSource = dtSourceData;

 ADGView1.AutoGenerateColumns = true;  //must be "true" here
 ADGView1.Columns.Clear();
 ADGView1.DataSource = SBind;

 //set DGV's column names and headings from the Datatable properties
 for (int i = 0; i < ADGView1.Columns.Count; i++)
 {
       ADGView1.Columns[i].DataPropertyName = dtSourceData.Columns[i].ColumnName;
       ADGView1.Columns[i].HeaderText = dtSourceData.Columns[i].Caption;
 }
 ADGView1.Enabled = true;
 ADGView1.Refresh();
2
Cwinds

par exemple, nous voulons définir un DataTable 'Utilisateurs' sur DataGridView en suivant les 2 étapes suivantes:

public DataTable  getAllUsers()
    {
        OracleConnection Connection = new OracleConnection(stringConnection);
        Connection.ConnectionString = stringConnection;
        Connection.Open();

        DataSet dataSet = new DataSet();

        OracleCommand cmd = new OracleCommand("semect * from Users");
        cmd.CommandType = CommandType.Text;
        cmd.Connection = Connection;

        using (OracleDataAdapter dataAdapter = new OracleDataAdapter())
        {
            dataAdapter.SelectCommand = cmd;
            dataAdapter.Fill(dataSet);
        }

        return dataSet.Tables[0];
    }

Étape 2: définissez le résultat renvoyé sur DataGridView: 

public void setTableToDgv(DataGridView DGV, DataTable table)
    {
        DGV.DataSource = table;
    }

en utilisant exemple:

    setTableToDgv(dgv_client,getAllUsers());
0
abdelilah dehaoui
foreach (DictionaryEntry entry in Hashtable)
{
    datagridviewTZ.Rows.Add(entry.Key.ToString(), entry.Value.ToString());
}
0
Jegadeesh Sakthivel
private void Form1_Load(object sender, EventArgs e)
    {
        DataTable StudentDataTable = new DataTable("Student");

        //perform this on the Load Event of the form
        private void AddColumns() 
        {
            StudentDataTable.Columns.Add("First_Int_Column", typeof(int));
            StudentDataTable.Columns.Add("Second_String_Column", typeof(String));

            this.dataGridViewDisplay.DataSource = StudentDataTable;
        }
    }

    //Save_Button_Event to save the form field to the table which is then bind to the TableGridView
    private void SaveForm()
        {
            StudentDataTable.Rows.Add(new object[] { textBoxFirst.Text, textBoxSecond.Text});

            dataGridViewDisplay.DataSource = StudentDataTable;
        }
0
Parag555