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!
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;
}
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.
Sur le DataGridView, définissez le DataPropertyName des colonnes à vos noms de colonne de votre DataTable.
// 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();
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());
foreach (DictionaryEntry entry in Hashtable)
{
datagridviewTZ.Rows.Add(entry.Key.ToString(), entry.Value.ToString());
}
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;
}