Невозможно связать представление сетки в коде настольного приложения.

У меня есть представление сетки, в котором перечислены все клиенты.

Я привязываю его во время загрузки формы, которая находится в дочернем элементе MDI.

Столбцы в представлении сетки предопределены во время разработки.

Мой код для события Form_Load():

try
{
       cn = db.createConnection();
       if (cn.State == System.Data.ConnectionState.Open)
       {
           cn.Close();
       }
       cn.Open();
       cmd = new OleDbCommand("Select BillNo,PartyName,City,State,FORMAT(BillDt,'dd-mm-yyyy') as BillDt from BillMaster", cn);
       da = new OleDbDataAdapter(cmd);
       ds = new DataSet();
       da.Fill(ds);
       cn.Close();

       dataGridView1.AutoGenerateColumns = false;
       dataGridView1.DataSource = ds.Tables[0];
       for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
       {
            dataGridView1.Rows[i].Cells[0].Value = ds.Tables[0].Rows[i]["BillNo"].ToString();
            dataGridView1.Rows[i].Cells[1].Value = ds.Tables[0].Rows[i]["PartyName"].ToString();
            dataGridView1.Rows[i].Cells[2].Value = ds.Tables[0].Rows[i]["City"].ToString();
            dataGridView1.Rows[i].Cells[3].Value = ds.Tables[0].Rows[i]["State"].ToString();
            dataGridView1.Rows[i].Cells[4].Value = ds.Tables[0].Rows[i]["BillDt"].ToString();
        }

   }
   catch (Exception ex)
   {
        MessageBox.Show(ex.Message.ToString());
   }
   finally
   {
       cn.Close();
       da.Dispose();
       ds.Dispose();
       cmd.Dispose();
   }

}

Я проверил выполнение программы, поставив точки останова. Данные извлекаются точно так же, как база данных в DataSet и Immediate Window, значение конкретной ячейки сетки показывает точное значение, но проблема заключается в том, что при загрузке формы сетка остается пустой. И создает количество пустых строк, равное количеству строк, извлеченных из базы данных.

Что мне делать, чтобы исправить эту ошибку.

Пожалуйста помоги.


person Mohemmad K    schedule 15.04.2013    source источник
comment
Не могли бы вы показать нам свой файл Designer.cs?   -  person clearpath    schedule 16.04.2013
comment
Возможно, вы имели в виду Designing form na?   -  person Mohemmad K    schedule 16.04.2013
comment
это моя форма. Но сетка остается пустой. Ожидается, что он будет заполнен отображаемыми в нем данными.   -  person Mohemmad K    schedule 16.04.2013


Ответы (3)


Изменять

dataGridView1.AutoGenerateColumns = false;

до true. Удалять

for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
   {
        dataGridView1.Rows[i].Cells[0].Value = ds.Tables[0].Rows[i]["BillNo"].ToString();
        dataGridView1.Rows[i].Cells[1].Value = ds.Tables[0].Rows[i]["PartyName"].ToString();
        dataGridView1.Rows[i].Cells[2].Value = ds.Tables[0].Rows[i]["City"].ToString();
        dataGridView1.Rows[i].Cells[3].Value = ds.Tables[0].Rows[i]["State"].ToString();
        dataGridView1.Rows[i].Cells[4].Value = ds.Tables[0].Rows[i]["BillDt"].ToString();
    }
person clearpath    schedule 15.04.2013
comment
Не уверен, что я бы установил для AutoGenerateColumns значение false, если они не предопределены - person Micah Armantrout; 16.04.2013
comment
Да, столбцы предопределены во время разработки. - person Mohemmad K; 16.04.2013
comment
Потому что его не было :) - person clearpath; 16.04.2013

во-первых, и, возможно, я что-то упускаю, но:

это лишнее, я бы убрал его, это может быть частью проблемы

 for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
   {
        dataGridView1.Rows[i].Cells[0].Value = ds.Tables[0].Rows[i]["BillNo"].ToString();
        dataGridView1.Rows[i].Cells[1].Value = ds.Tables[0].Rows[i]["PartyName"].ToString();
        dataGridView1.Rows[i].Cells[2].Value = ds.Tables[0].Rows[i]["City"].ToString();
        dataGridView1.Rows[i].Cells[3].Value = ds.Tables[0].Rows[i]["State"].ToString();
        dataGridView1.Rows[i].Cells[4].Value = ds.Tables[0].Rows[i]["BillDt"].ToString();
    }

это уже должно позаботиться об этом

dataGridView1.DataSource = ds.Tables[0];
person Micah Armantrout    schedule 15.04.2013
comment
Сэр, мне удалить цикл for или удалить оператор dataGridView1.DataSource = ds.Tables[0];? @Мика Армантраут - person Mohemmad K; 16.04.2013
comment
что произойдет, если вы установите для столбцов autogen значение true просто для удовольствия - person Micah Armantrout; 16.04.2013
comment
Когда я устанавливаю для автоматического создания столбцов значение true, в качестве вывода отображается пустая сетка. - person Mohemmad K; 16.04.2013
comment
никакой MDI не должен иметь значения ... так что он действует одинаково независимо от того, установлено ли для AutoGen значение true или false? - person Micah Armantrout; 16.04.2013
comment
да, это не влияет на вывод. - person Mohemmad K; 16.04.2013
comment
давайте продолжим обсуждение в чате - person Micah Armantrout; 16.04.2013

try
{
   cn = db.createConnection();
   if (cn.State == System.Data.ConnectionState.Open)
   {
       cn.Close();
   }
   cn.Open();
   cmd = new OleDbCommand("Select BillNo,PartyName,City,State,FORMAT(BillDt,'dd-mm-yyyy') as BillDt from BillMaster", cn);
   da = new OleDbDataAdapter(cmd);
   ds = new DataSet();
   da.Fill(ds);
   cn.Close();

   dataGridView1.AutoGenerateColumns = true;
   dataGridView1.DataSource = ds.Tables[0];

   //Or you can use
   //dataGridView1.DataSource = ds.Tables[0].DefaultView;    


   }
   catch (Exception ex)
   {
    MessageBox.Show(ex.Message.ToString());
   }
   finally
   {
   cn.Close();
   da.Dispose();
   ds.Dispose();
   cmd.Dispose();
  }

  }

Надеюсь, это поможет вам

person Neeraj Dubey    schedule 09.05.2013