2

我有一个列出所有客户的网格视图。

我将它绑定在放置在 MDI 子级中的 Form 的加载时间中。

网格视图中的列是在设计时预定义的。

我的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 和即时窗口中完全作为数据库获取,网格的特定单元格的值显示了确切的值,但问题是当加载表单时,网格仍然为空。并创建与从数据库中获取的行数相同的空白行数。

我应该怎么做才能解决这个错误。

请帮忙。

4

3 回答 3

0
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();
  }

  }

希望对你有帮助

于 2013-05-09T06:16:49.040 回答
0

改变

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();
    }
于 2013-04-15T20:34:42.973 回答
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();
    }

这应该已经解决了

dataGridView1.DataSource = ds.Tables[0];
于 2013-04-15T20:34:47.230 回答