J'ai une classe sous forme de base qui contient une méthode qui renvoie un DataTable:Databound DataGridView vide Malgré la pleine DataSource
protected DataTable GetTableData(string sql, OracleConnection connection)
{
DataTable table = null;
OracleDataAdapter adapter = null;
try
{
table = new DataTable();
adapter = new OracleDataAdapter(sql, connection);
table.Locale = System.Globalization.CultureInfo.InvariantCulture;
adapter.Fill(table);
}
catch (Exception e)
{
MessageBox.Show("An error occurred while trying to process your request:\n\n" + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
if (null != adapter)
{
adapter.Dispose();
}
}
return table;
}
Une autre fenêtre est une sous-classe, et il invoque comme suit:
private void LoadViewData(OracleConnection connection)
{
DataTable table = null;
try
{
var sql = "SELECT * FROM " + this.ObjectName;
table = GetTableData(sql, connection);
this.resultBindingSource.DataSource = table;
}
catch (Exception e)
{
MessageBox.Show("An error occurred while trying to process your request:\n\n" + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
this.sqlEditor.Focus();
}
}
resultBindingSource
est un System.Windows.Forms.BindingSource
. Il est défini comme la propriété DataSource
d'un System.Windows.Forms.DataGridView
. (L'expression this.ObjectName
évalue le nom d'une table ou d'une vue dans la base de données.)
Lorsque je parcours le code dans le débogueur, je constate que le code SQL s'exécute correctement. Je peux voir que le DataTable
contient des données. Je peux voir que le contrôle DataGridView
est correctement lié à la source de données, et que je peux voir les données dans la table de données à travers sa propriété DataSource
. Cependant, aucune donnée n'est affichée dans le contrôle lui-même. Il n'y a aucun en-tête de ligne ou de colonne et aucune donnée n'est affichée.
J'ai essayé tout ce que je pouvais penser pour déterminer la cause de ce problème. Ce code fonctionne exactement comme indiqué sur un autre formulaire. J'ai essayé de supprimer les contrôles en question et de les recréer en vain. J'ai consulté les articles sur MSDN sur la façon de bien connecter à un contrôle DataGridView
. Je l'ai essayé avec et sans OracleCommandBuilder
(ce qui ne me semble pas nécessaire, puisqu'il s'agit d'une vue en lecture seule des données).
Je suis franchement à court d'idées. C'est probablement quelque chose d'assez évident que j'ai oublié. Je sais que la liaison de données fonctionne, parce que je l'ai déjà fait avec beaucoup de succès.
Tout pointeur dans la bonne direction serait grandement apprécié.
Le code que j'ai posté est tout le code de liaison de données qu'il y a. Cela fonctionne comme ailleurs dans l'application. L'utilisateur choisit une table/vue et affiche les lignes de données. Ma compréhension est que le DataTable a suffisamment de métadonnées pour permettre à la DGV de générer automatiquement des colonnes, donc je n'ai pas à le faire. –