У меня есть базовый класс формы, который содержит метод, который возвращает DataTable:
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
и без него (что мне не нужно, так как это представление данных только для чтения).
У меня просто нет идей. Это вероятно что-то довольно очевидное, что я упустил из виду. Я знаю, что привязка данных работает, потому что я делал это раньше с большим успехом.
Будем весьма благодарны за любые указатели в правильном направлении.