DataGridView с привязкой к данным пуст, несмотря на полный источник данных - PullRequest
0 голосов
/ 20 марта 2009

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

У меня просто нет идей. Это вероятно что-то довольно очевидное, что я упустил из виду. Я знаю, что привязка данных работает, потому что я делал это раньше с большим успехом.

Будем весьма благодарны за любые указатели в правильном направлении.

1 Ответ

1 голос
/ 20 марта 2009

Я пытался воссоздать вашу программу, используя фрагменты, которые вы упомянули здесь. Я на самом деле не получил данные из таблицы данных, но это не имеет значения. Вот что я сделал:

public partial class Form1 : BaseForm
    {
        BindingSource source = new BindingSource();
        public Form1()
        {
            InitializeComponent();
            this.dataGridView1.DataSource = source;

        }

        private void button1_Click(object sender, EventArgs e)
        {
            DataTable table = GetDataTable();
            this.source.DataSource = table;
        }
    }

    public class BaseForm : Form
    {
        protected DataTable GetDataTable()
        {
            DataTable result = new DataTable();
            result.Columns.Add("Name");
            result.Columns.Add("Age", typeof(int));
            result.Rows.Add("Alex", 27);
            return result;
        }
    }

Это примерно то же самое, что у вас есть? У меня не было проблем вообще. Исходя из того, что вы публикуете эту ДОЛЖНУЮ работу. Вы уверены, что все правильно связываете друг с другом? Если возможно, опубликуйте больше своего связующего кода ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...