У меня есть базовый класс формы, содержащий метод, который возвращает DataTable:DataBound DataGridView Empty Несмотря на полное 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;
}
Другое окно является подклассом его, и вызывает его следующим образом:
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
является System.Windows.Forms.BindingSource
. Он устанавливается как свойство DataSource
объекта System.Windows.Forms.DataGridView
. (Выражение this.ObjectName
оценивает имя таблицы или представление в базе данных.)
Когда я просматриваю код в отладчике, я вижу, что SQL выполняется просто отлично. Я вижу, что данные DataTable
содержат данные. Я вижу, что элемент управления DataGridView
должным образом привязан к источнику данных и что я могу видеть данные в таблице данных через его свойство DataSource
. Однако в самом элементе управления данные не отображаются. Нет заголовков строк или столбцов, и никакие данные не отображаются вообще.
Я пробовал все, что я могу придумать, чтобы определить причину этой проблемы. Этот код работает точно так же, как показано на другой форме. Я попробовал удалить элементы управления и воссоздать их, но безрезультатно. Я консультировался с статьями о MSDN о том, как правильно привязывать данные к элементу управления DataGridView
. Я пробовал его с OracleCommandBuilder
(что мне не кажется нужным, так как это просмотр данных только для чтения).
Я откровенно из идей. Вероятно, это довольно очевидно, что я забыл. Я знаю, что привязка данных работает, потому что я сделал это с большим успехом.
Любые указатели в правильном направлении были бы очень признательны.
Код, который я опубликовал, - это все код привязки данных, который есть. Он работает как в другом месте приложения. Пользователь выбирает таблицу/представление, и я показываю строки данных. Я понимаю, что DataTable имеет достаточно метаданных в нем, чтобы позволить DGV автоматически генерировать столбцы, поэтому мне не нужно. –