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

Имам мрежов изглед, който изброява всички клиенти.

Обвързвам го във времето за зареждане на Form, което се поставя в дъщерния елемент на 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 и незабавен прозорец, стойността на конкретна клетка от мрежата показва точната стойност, но проблемът е, че когато формулярът се зареди, мрежата остава празна. И създава броя на празните редове, същият като броя на редовете, извлечени от базата данни.

Какво трябва да направя, за да се справя с тази грешка.

Моля помогнете.


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